.. _chapter-interactive_shell: ********************** ÐнÑеÑакÑÐ¸Ð²Ð½Ð°Ñ Ð¾Ð±Ð¾Ð»Ð¾Ñка ********************** ÐоÑÑи вÑегда в ÑÑом ÑÑководÑÑве Ð¼Ñ Ð¿Ñедполагаем, ÑÑо инÑеÑпÑеÑаÑÐ¾Ñ Sage бÑл запÑÑен командой ``sage``. Ðна запÑÑÑÐ¸Ñ ÑпеÑиалÑнÑÑ Ð²ÐµÑÑÐ¸Ñ ÐºÐ¾Ð½Ñоли IPython и импоÑÑиÑÑÐµÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво ÑÑнкÑий и клаÑÑов, Ñак ÑÑо они гоÑÐ¾Ð²Ñ Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² командной ÑÑÑоке. Ðолее ÑÐ¾Ð½ÐºÐ°Ñ Ð½Ð°ÑÑÑойка пÑоизводиÑÑÑ ÑедакÑиÑованием Ñайла ``$SAGE_ROOT/ipythonrc``. ÐÑи запÑÑке Sage Ð²Ñ ÑвидиÑе вÑвод, Ð¿Ð¾Ñ Ð¾Ð¶Ð¸Ð¹ на ÑледÑÑÑий: .. skip :: ---------------------------------------------------------------------- | SAGE Version 3.1.1, Release Date: 2008-05-24 | | Type notebook() for the GUI, and license() for information. | ---------------------------------------------------------------------- sage: ЧÑÐ¾Ð±Ñ Ð²ÑйÑи из Sage, нажмиÑе Ctrl-D или введиÑе ``quit`` или ``exit``. .. skip :: sage: quit Exiting SAGE (CPU time 0m0.00s, Wall time 0m0.89s) Wall time â ÑÑо пÑоÑедÑее вÑемÑ. ÐÑо знаÑение веÑно, поÑÐ¾Ð¼Ñ ÐºÐ°Ðº в "CPU time" не Ð²Ñ Ð¾Ð´Ð¸Ñ Ð²ÑемÑ, иÑполÑзованное ÑÑбпÑоÑеÑÑами вÑоде GAP или Singular. (ÐоÑÑаÑайÑеÑÑ Ð½Ðµ ÑбиваÑÑ Ð¿ÑоÑеÑÑ Sage командой ``kill -9`` из ÑеÑминала, поÑÐ¾Ð¼Ñ ÑÑо Sage Ð¼Ð¾Ð¶ÐµÑ Ð½Ðµ ÑбиÑÑ Ð´Ð¾ÑеÑние пÑоÑеÑÑÑ, Ñакие как Maple, или Ð¼Ð¾Ð¶ÐµÑ Ð½Ðµ оÑиÑÑиÑÑ Ð²ÑеменнÑе ÑÐ°Ð¹Ð»Ñ Ð¸Ð· диÑекÑоÑии ``$HOME/.sage/tmp``.) ÐаÑа ÑеÑÑÐ¸Ñ Sage ================ СеÑÑÐ¸Ñ â ÑÑо поÑледоваÑелÑноÑÑÑ Ð²Ð²Ð¾Ð´Ð¾Ð² и вÑводов наÑÐ¸Ð½Ð°Ñ Ñ Ð·Ð°Ð¿ÑÑка пÑогÑÐ°Ð¼Ð¼Ñ Ð¸ заканÑÐ¸Ð²Ð°Ñ Ð²ÑÑ Ð¾Ð´Ð¾Ð¼ из нее. Sage заноÑÐ¸Ñ Ð²ÑÑ Ð¸ÑÑоÑÐ¸Ñ Ð²Ð²Ð¾Ð´Ð¾Ð² в log-Ñайл, иÑполÑзÑÑ IPython. ÐÑли Ð²Ñ Ð¸ÑполÑзÑеÑе инÑеÑакÑивнÑÑ Ð¾Ð±Ð¾Ð»Ð¾ÑÐºÑ (не веб-инÑеÑÑÐµÐ¹Ñ Notebook), Ñо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ввеÑÑи ``%hist``, ÑÑÐ¾Ð±Ñ Ð²ÑвеÑÑи ÑпиÑок вÑÐµÑ Ð²Ð²ÐµÐ´ÐµÐ½Ð½ÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´. ÐÑ Ð¼Ð¾Ð¶ÐµÑе ввеÑÑи ``?`` в командной ÑÑÑоке Sage, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð±Ð¾Ð»ÑÑе инÑоÑмаÑии о IPython, напÑимеÑ, "IPython пÑедоÑÑавлÑÐµÑ Ð¿ÑонÑмеÑованнÑе команднÑе ÑÑÑоки... Ñ ÐºÐµÑиÑованием ввода и вÑвода. ÐÑе введеннÑе даннÑе ÑÐ¾Ñ ÑанÑÑÑÑÑ Ð¸ могÑÑ Ð±ÑÑÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ñ ÐºÐ°Ðº пеÑеменнÑе (помимо обÑÑного вÑзова Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑÑÑелок). СледÑÑÑие глобалÑнÑе пеÑеменнÑе пÑиÑÑÑÑÑвÑÑÑ Ð²Ñегда (не пеÑезапиÑÑвайÑе Ð¸Ñ !)": :: _: previous input (interactive shell and notebook) __: next previous input (interactive shell only) _oh : list of all inputs (interactive shell only) ÐÑимеÑ: .. skip :: sage: factor(100) _1 = 2^2 * 5^2 sage: kronecker_symbol(3,5) _2 = -1 sage: %hist # РабоÑÐ°ÐµÑ ÑолÑко в инÑеÑакÑивной оболоÑке, но не в Sage notebook. 1: factor(100) 2: kronecker_symbol(3,5) 3: %hist sage: _oh _4 = {1: 2^2 * 5^2, 2: -1} sage: _i1 _5 = 'factor(ZZ(100))\n' sage: eval(_i1) _6 = 2^2 * 5^2 sage: %hist 1: factor(100) 2: kronecker_symbol(3,5) 3: %hist 4: _oh 5: _i1 6: eval(_i1) 7: %hist ÐÑ Ð½Ðµ вклÑÑаем номеÑа ÑÑÑок в ÑÑом ÑÑебном поÑобии и в дÑÑгой докÑменÑаÑии Sage. ÐÑ Ñакже можеÑе Ñ ÑаниÑÑ ÑпиÑок введеннÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´ ÑеÑÑии в виде макÑоÑа Ð´Ð»Ñ ÑеÑÑии. .. skip :: sage: E = EllipticCurve([1,2,3,4,5]) sage: M = ModularSymbols(37) sage: %hist 1: E = EllipticCurve([1,2,3,4,5]) 2: M = ModularSymbols(37) 3: %hist sage: %macro em 1-2 Macro `em` created. To execute, type its name (without quotes). .. skip :: sage: E Elliptic Curve defined by y^2 + x*y + 3*y = x^3 + 2*x^2 + 4*x + 5 over Rational Field sage: E = 5 sage: M = None sage: em Executing Macro... sage: E Elliptic Curve defined by y^2 + x*y + 3*y = x^3 + 2*x^2 + 4*x + 5 over Rational Field ÐÑи иÑполÑзовании инÑеÑакÑивной оболоÑки Sage, лÑÐ±Ð°Ñ UNIX-команда Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð·Ð°Ð¿ÑÑена Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿ÑеÑикÑа ``!``. ÐапÑÐ¸Ð¼ÐµÑ .. skip :: sage: !ls auto example.sage glossary.tex t tmp tut.log tut.tex возвÑаÑÐ°ÐµÑ ÑодеÑжание ÑекÑÑей диÑекÑоÑии. ÐеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ ``PATH`` ÑожеÑÐ¶Ð¸Ñ Ð´Ð¸ÑекÑоÑÐ¸Ñ bin (бинаÑнÑе ÑайлÑ) в Ñамом наÑале, Ñак ÑÑо еÑли Ð²Ñ Ð·Ð°Ð¿ÑÑкаеÑе ``gp``, ``gap``, ``singular``, ``maxima``, и Ñ.д. Ð²Ñ Ð¿Ð¾Ð»ÑÑаеÑе веÑÑии, вклÑÑеннÑе в Sage. .. skip :: sage: !gp Reading GPRC: /etc/gprc ...Done. GP/PARI CALCULATOR Version 2.2.11 (alpha) i686 running linux (ix86/GMP-4.1.4 kernel) 32-bit version ... sage: !singular SINGULAR / Development A Computer Algebra System for Polynomial Computations / version 3-0-1 0< by: G.-M. Greuel, G. Pfister, H. Schoenemann \ October 2005 FB Mathematik der Universitaet, D-67653 Kaiserslautern \ ÐÑÑналиÑование ввода и вÑвода ============================= ÐÑÑналиÑование ÑеÑÑии Sage ÑÑо не Ñо же Ñамое, ÑÑо ÑÐ¾Ñ Ñнанение ÑеÑÑии (Ñм. :ref:`section-save` Ð´Ð»Ñ ÑÑого). ÐÐ»Ñ Ð¶ÑÑналиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð²Ð¾Ð´Ð° (и, опÑионалÑно, вÑвода), иÑполÑзÑйÑе ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ``logstart``. ÐведиÑе ``logstart?`` Ð´Ð»Ñ Ð¿Ð¾Ð´ÑобноÑÑей. ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð´Ð»Ñ Ð¶ÑÑналиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð²Ñего, ÑÑо Ð²Ñ Ð²Ð²Ð¾Ð´Ð¸Ñе, вÑего вÑвода, и даже можеÑе воÑпÑоизвеÑÑи введеннÑе даннÑе в бÑдÑÑей ÑеÑÑии (пÑоÑÑо загÑÑзив log-Ñайл). .. skip :: was@form:~$ sage ---------------------------------------------------------------------- | SAGE Version 3.0.2, Release Date: 2008-05-24 | | Type notebook() for the GUI, and license() for information. | ---------------------------------------------------------------------- sage: logstart setup Activating auto-logging. Current session state plus future input saved. Filename : setup Mode : backup Output logging : False Timestamping : False State : active sage: E = EllipticCurve([1,2,3,4,5]).minimal_model() sage: F = QQ^3 sage: x,y = QQ['x,y'].gens() sage: G = E.gens() sage: Exiting SAGE (CPU time 0m0.61s, Wall time 0m50.39s). was@form:~$ sage ---------------------------------------------------------------------- | SAGE Version 3.0.2, Release Date: 2008-05-24 | | Type notebook() for the GUI, and license() for information. | ---------------------------------------------------------------------- sage: load "setup" Loading log file <setup> one line at a time... Finished replaying log file <setup> sage: E Elliptic Curve defined by y^2 + x*y = x^3 - x^2 + 4*x + 3 over Rational Field sage: x*y x*y sage: G [(2 : 3 : 1)] ÐÑли Ð²Ñ Ð¸ÑполÑзÑеÑе Sage в ``konsole`` â ÑеÑминале ÑÑÐµÐ´Ñ KDE в GNU/Linux â Ñогда Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑÐ¾Ñ ÑаниÑÑ ÑеÑÑÐ¸Ñ ÑледÑÑÑим обÑазом: поÑле запÑÑка Sage в ``konsole``, вÑбеÑиÑе "settings", поÑом "history...", поÑом "set unlimited". Ðогда Ð²Ñ Ð³Ð¾ÑÐ¾Ð²Ñ ÑÐ¾Ñ ÑаниÑÑ ÑеÑÑиÑ, вÑбеÑиÑе "edit" и "save history as..." и введиÑе Ð¸Ð¼Ñ Ñайла Ð´Ð»Ñ ÑÐ¾Ñ ÑанениÑ. ÐоÑле ÑÑого Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе воÑполÑзоваÑÑÑÑ Ð»ÑбÑм ÑекÑÑовÑм ÑедакÑоÑом, напÑÐ¸Ð¼ÐµÑ xemacs, Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ Ñайла. ÐÑÑавка игноÑиÑÑÐµÑ Ð¿ÑиглаÑение ============================== ÐопÑÑÑим, Ð²Ñ ÑиÑаеÑе ÑеÑÑÐ¸Ñ Sage или вÑÑиÑÐ»ÐµÐ½Ð¸Ñ Python, и Ñ Ð¾ÑиÑе ÑкопиÑоваÑÑ Ð¸Ñ Ð² Sage. Ðо еÑÑÑ Ð¾Ð´Ð½Ð° пÑоблема: знаки ``>>>`` или ``sage:``. Ðа Ñамом деле Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе копиÑоваÑÑ Ð¸ вÑÑавлÑÑÑ Ð¿ÑимеÑÑ, коÑоÑÑе вклÑÑаÑÑ ÑÑи знаки. ÐÑгÑими Ñловами, Sage игноÑиÑÑÐµÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ ``>>>`` или ``sage:`` пеÑед оÑпÑавкой команд в Python. ÐапÑимеÑ, .. skip :: sage: 2^10 1024 sage: sage: sage: 2^10 1024 sage: >>> 2^10 1024 ÐÐ¾Ð¼Ð°Ð½Ð´Ñ Ð¸Ð·Ð¼ÐµÑÐµÐ½Ð¸Ñ Ð²Ñемени ========================= ÐÑли Ð²Ñ Ð²Ð²ÐµÐ´ÐµÑе ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ``%time`` в наÑале ÑÑÑоки ввода, Ñо вÑемÑ, заÑÑаÑенное на вÑполнение опеÑаÑии, бÑÐ´ÐµÑ Ð²Ñведено на ÑкÑан. ÐапÑимеÑ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе измеÑиÑÑ Ð²ÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑаÑии Ð²Ð¾Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð² ÑÑÐµÐ¿ÐµÐ½Ñ Ð½ÐµÑколÑкими пÑÑÑми. ÐÐ¾ÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð½Ð¸Ð¶Ðµ бÑдÑÑ Ð¾ÑлиÑаÑÑÑÑ Ð¾Ñ Ð²Ð°ÑÐ¸Ñ ; они могÑÑ Ð¾ÑлиÑаÑÑÑÑ Ð´Ð°Ð¶Ðµ в ÑазнÑÑ Ð²ÐµÑÑиÑÑ Sage. ЧиÑÑÑй Python: .. skip :: sage: %time a = int(1938)^int(99484) CPU times: user 0.66 s, sys: 0.00 s, total: 0.66 s Wall time: 0.66 ÐÑо ознаÑÐ°ÐµÑ ÑÑо 0.66 ÑекÑнд бÑло заÑÑаÑено в ÑÑмме, а "Wall time", (пÑоÑедÑее вÑемÑ), Ñоже 0.66 ÑекÑнд. ÐÑли Ð²Ð°Ñ ÐºÐ¾Ð¼Ð¿ÑÑÑÐµÑ ÑилÑно загÑÑжен дÑÑгими пÑоÑеÑÑами, Ñо "Wall time" Ð¼Ð¾Ð¶ÐµÑ ÑилÑно оÑлиÑаÑÑÑÑ Ð¾Ñ Ð¿ÑоÑеÑÑоÑного вÑемени. Ðалее Ð¼Ñ Ð¿Ð¾ÑÑиÑаем вÑÐµÐ¼Ñ Ð²Ð¾Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð² ÑÑÐµÐ¿ÐµÐ½Ñ Ñ Ð¸ÑполÑзованием вÑÑÑоенного в Sage ÑелоÑиÑленного Ñипа даннÑÑ , Ñеализованного (в Cython) Ñ Ð¸ÑполÑзованием библиоÑеки GMP: .. skip :: sage: %time a = 1938^99484 CPU times: user 0.04 s, sys: 0.00 s, total: 0.04 s Wall time: 0.04 ÐÑполÑзÑÑ Ð¸Ð½ÑеÑÑÐµÐ¹Ñ PARI из библиоÑеки C: .. skip :: sage: %time a = pari(1938)^pari(99484) CPU times: user 0.05 s, sys: 0.00 s, total: 0.05 s Wall time: 0.05 GMP Ð²ÐµÐ´ÐµÑ ÑÐµÐ±Ñ Ð»ÑÑÑе, но ÑолÑко немного (как и ожидалоÑÑ, Ð²ÐµÐ´Ñ Ð²ÐµÑÑÐ¸Ñ PARI, вÑÑÑÐ¾ÐµÐ½Ð½Ð°Ñ Ð² Sage, иÑполÑзÑÐµÑ GMP Ð´Ð»Ñ ÑабоÑÑ Ñ ÑелÑми ÑиÑлами). ÐÑ Ñакже можеÑе замеÑиÑÑ Ð²ÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð±Ð»Ð¾ÐºÐ° команд Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ``cputime``, как показано ниже: :: sage: t = cputime() sage: a = int(1938)^int(99484) sage: b = 1938^99484 sage: c = pari(1938)^pari(99484) sage: cputime(t) # random output 0.64 .. skip :: sage: cputime? ... Return the time in CPU second since SAGE started, or with optional argument t, return the time since time t. INPUT: t -- (optional) float, time in CPU seconds OUTPUT: float -- time in CPU seconds Ðоманда ``walltime`` Ð²ÐµÐ´ÐµÑ ÑÐµÐ±Ñ Ñак же, как ``cputime``, но она измеÑÑÐµÑ Ð½Ð°ÑÑоÑÑее вÑемÑ. ÐÑ Ñакже можем возвеÑÑи ÑиÑло в ÑÑепенÑ, иÑполÑзÑÑ ÑиÑÑÐµÐ¼Ñ ÐºÐ¾Ð¼Ð¿ÑÑÑеÑной алгебÑÑ, вклÑÑÑннÑе в Sage. Ркаждом ÑлÑÑае Ð¼Ñ Ð·Ð°Ð¿ÑÑкаем пÑоÑÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð² ÑиÑÑеме ÑÑÐ¾Ð±Ñ Ð·Ð°Ð¿ÑÑÑиÑÑ ÑеÑÐ²ÐµÑ Ð´Ð»Ñ ÑÑой пÑогÑаммÑ. Самое ÑоÑное - вÑÐµÐ¼Ñ ÑÑо Wall time. Ðднако, еÑли ÑÑÑеÑÑвÑÐµÑ ÑÑÑеÑÑÐ²ÐµÐ½Ð½Ð°Ñ ÑазниÑа Ð¼ÐµÐ¶Ð´Ñ ÑÑим знаÑением и пÑоÑеÑÑоÑнÑм вÑеменем (CPU time), Ñо, возможно, еÑÑÑ ÑмÑÑл пÑовеÑиÑÑ ÑиÑÑÐµÐ¼Ñ Ð½Ð° налиÑие пÑоблем пÑоизводиÑелÑноÑÑи. .. skip :: sage: time 1938^99484; CPU times: user 0.01 s, sys: 0.00 s, total: 0.01 s Wall time: 0.01 sage: gp(0) 0 sage: time g = gp('1938^99484') CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s Wall time: 0.04 sage: maxima(0) 0 sage: time g = maxima('1938^99484') CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s Wall time: 0.30 sage: kash(0) 0 sage: time g = kash('1938^99484') CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s Wall time: 0.04 sage: mathematica(0) 0 sage: time g = mathematica('1938^99484') CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s Wall time: 0.03 sage: maple(0) 0 sage: time g = maple('1938^99484') CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s Wall time: 0.11 sage: gap(0) 0 sage: time g = gap.eval('1938^99484;;') CPU times: user 0.00 s, sys: 0.00 s, total: 0.00 s Wall time: 1.02 ÐамеÑÑÑе, ÑÑо GAP и Maxima ÑвлÑÑÑÑÑ ÑамÑми медленнÑми в ÑÑом ÑеÑÑе (ÑеÑÑ Ð±Ñл пÑоведен на маÑине ``sage.math.washington.edu``). Так как они ÑабоÑаÑÑ Ñ Ð´ÑÑгим инÑеÑÑейÑом, надÑÑÑоеннÑм над ними, ÑÑдиÑÑ Ð¾Ð± абÑолÑÑной пÑоизводиÑелÑноÑÑи ÑÑÐ¸Ñ ÑиÑÑем не ÑÑоиÑ. ÐÑибки и иÑклÑÑÐµÐ½Ð¸Ñ =================== Ðогда ÑÑо-Ñо Ð¸Ð´ÐµÑ Ð½Ðµ Ñак, обÑÑно можно ÑвидеÑÑ Ð¸ÑклÑÑение Python (Python "exception"). Python даже попÑÑаеÑÑÑ Ð¿ÑедположиÑÑ, ÑÑо вÑзвало оÑибкÑ. ЧаÑÑо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе видеÑÑ Ð¸Ð¼Ñ Ð¸ÑклÑÑениÑ, напÑимеÑ, ``NameError`` или ``ValueError`` (Ñм. Python Reference Manual [Py]_ Ð´Ð»Ñ Ð¿Ð¾Ð»Ð½Ð¾Ð³Ð¾ ÑпиÑка иÑклÑÑений). ÐапÑимеÑ, .. skip :: sage: 3_2 ------------------------------------------------------------ File "<console>", line 1 ZZ(3)_2 ^ SyntaxError: invalid syntax sage: EllipticCurve([0,infinity]) ------------------------------------------------------------ Traceback (most recent call last): ... TypeError: Unable to coerce Infinity (<class 'sage...Infinity'>) to Rational ÐнÑеÑакÑивнÑй оÑладÑик Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñм Ð´Ð»Ñ Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ñ Ñого, ÑÑо поÑло не Ñак. ÐÑладÑик можно вклÑÑаÑÑ Ð¸Ð»Ð¸ вÑклÑÑаÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ ``%pdb`` (по ÑмолÑÐ°Ð½Ð¸Ñ Ð¾Ð½ вÑклÑÑен). ÐÑиглаÑение командной ÑÑÑоки ``ipdb>`` поÑвлÑеÑÑÑ Ð½Ð° ÑкÑане, еÑли ÑлÑÑилоÑÑ Ð¸ÑклÑÑение и оÑладÑик бÑл вклÑÑен. Ðз оÑладÑика Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе вÑвеÑÑи на ÑкÑан ÑоÑÑоÑние лÑбой локалÑной пеÑеменной и двигаÑÑÑÑ Ð²Ð²ÐµÑÑ Ð¸ вниз по ÑÑÐµÐºÑ (execution stack). ÐапÑимеÑ, .. skip :: sage: %pdb Automatic pdb calling has been turned ON sage: EllipticCurve([1,infinity]) --------------------------------------------------------------------------- <type 'exceptions.TypeError'> Traceback (most recent call last) ... ipdb> ÐÐ»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ ÑпиÑка команд оÑладÑика введиÑе ``?`` в командной ÑÑÑоке ``ipdb>``: :: ipdb> ? Documented commands (type help <topic>): ======================================== EOF break commands debug h l pdef quit tbreak a bt condition disable help list pdoc r u alias c cont down ignore n pinfo return unalias args cl continue enable j next pp s up b clear d exit jump p q step w whatis where Miscellaneous help topics: ========================== exec pdb Undocumented commands: ====================== retval rv ÐажмиÑе Ctrl-D или введиÑе ``quit`` ÑÑÐ¾Ð±Ñ Ð²ÐµÑнÑÑÑÑÑ Ð² Sage. .. _section-tabcompletion: ÐбÑаÑнÑй поиÑк и авÑодополнение =============================== СнаÑала Ñоздадим ÑÑÐµÑ Ð¼ÐµÑное векÑоÑное пÑоÑÑÑанÑÑво :math:`V=\QQ^3` ÑледÑÑÑим обÑазом: :: sage: V = VectorSpace(QQ,3) sage: V Vector space of dimension 3 over Rational Field Ðожно иÑполÑзоваÑÑ ÑокÑаÑенное обознаÑение: :: sage: V = QQ^3 ÐведиÑе наÑало командÑ, поÑом нажмиÑе ``Ctrl-p`` (или пÑоÑÑо нажмиÑе ÑÑÑÐµÐ»ÐºÑ Ð²Ð²ÐµÑÑ Ð½Ð° клавиаÑÑÑе) ÑÑÐ¾Ð±Ñ Ð²ÐµÑнÑÑÑÑÑ Ðº лÑбой из ÑÑÑок, коÑоÑÑе Ð²Ñ Ð²Ð²Ð¾Ð´Ð¸Ð»Ð¸, наÑинаÑÑейÑÑ Ñ ÑÐ°ÐºÐ¸Ñ Ð¶Ðµ Ñимволов. ÐÑо ÑабоÑÐ°ÐµÑ Ð´Ð°Ð¶Ðµ еÑли Ð²Ñ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑ Ð²ÑÑли из Sage и пеÑезапÑÑÑили его позже. Ðожно иÑполÑзоваÑÑ Ð¸ обÑаÑнÑй поиÑк по иÑÑоÑии команд Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ``Ctrl-r``. ÐÑе ÑÑи возможноÑÑи иÑполÑзÑÑÑ Ð¿Ð°ÐºÐµÑ ``readline`` коÑоÑÑй доÑÑÑпен поÑÑи на вÑÐµÑ ÑазновидноÑÑÑÑ GNU/Linux. Ðожно Ñ Ð»ÐµÐ³ÐºÐ¾ÑÑÑÑ Ð²ÑвеÑÑи ÑпиÑок вÑÐµÑ ÑÑнкÑий Ð´Ð»Ñ :math:`V`, иÑполÑзÑÑ Ð°Ð²Ñодополнение. ÐÑоÑÑо введиÑе ``V.``, поÑом нажмиÑе ``[TAB]`` на Ñвоей клавиаÑÑÑе: .. skip :: sage: V.[tab key] V._VectorSpace_generic__base_field ... V.ambient_space V.base_field V.base_ring V.basis V.coordinates ... V.zero_vector ÐÑли Ð²Ñ Ð²Ð²ÐµÐ´ÐµÑе пеÑвÑе неÑколÑко Ñимволов командÑ, а поÑом нажмÑÑе ``[TAB]``, Ð²Ñ Ð¿Ð¾Ð»ÑÑиÑе ÑÑнкÑии, коÑоÑÑе наÑинаÑÑÑÑ Ñ ÑÑÐ¸Ñ Ñимволов. .. skip :: sage: V.i[tab key] V.is_ambient V.is_dense V.is_full V.is_sparse ÐÑли вам инÑеÑеÑно, ÑÑо Ð´ÐµÐ»Ð°ÐµÑ ÐºÐ°ÐºÐ°Ñ-нибÑÐ´Ñ ÑÑнкÑиÑ, напÑÐ¸Ð¼ÐµÑ coordinates, введиÑе ``V.coordinates?`` Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ ÑпÑавки или ``V.coordinates??`` Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð¸ÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ кода (обÑÑÑнÑеÑÑÑ Ð² ÑледÑÑÑем Ñазделе). ÐÑÑÑÐ¾ÐµÐ½Ð½Ð°Ñ ÑпÑавоÑÐ½Ð°Ñ ÑиÑÑема ============================= Sage Ð¾Ð±Ð»Ð°Ð´Ð°ÐµÑ Ð²ÑÑÑоенной ÑпÑавоÑной ÑиÑÑемой. ÐведиÑе название ÑÑнкÑии Ñо знаком ? Ð´Ð»Ñ Ð´Ð¾ÑÑÑпа к докÑменÑаÑии по ÑÑой ÑÑнкÑии. .. skip :: sage: V = QQ^3 sage: V.coordinates? Type: instancemethod Base Class: <type 'instancemethod'> String Form: <bound method FreeModule_ambient_field.coordinates of Vector space of dimension 3 over Rational Field> Namespace: Interactive File: /home/was/s/local/lib/python2.4/site-packages/sage/modules/f ree_module.py Definition: V.coordinates(self, v) Docstring: Write v in terms of the basis for self. Returns a list c such that if B is the basis for self, then sum c_i B_i = v. If v is not in self, raises an ArithmeticError exception. EXAMPLES: sage: M = FreeModule(IntegerRing(), 2); M0,M1=M.gens() sage: W = M.submodule([M0 + M1, M0 - 2*M1]) sage: W.coordinates(2*M0-M1) [2, -1] Ðак показано вÑÑе, вÑвод показÑÐ²Ð°ÐµÑ Ñип обÑекÑа, Ñайл, в коÑоÑом он опÑеделен и полезное опиÑание ÑÑнкÑии Ñ Ð¿ÑимеÑами, коÑоÑÑе можно вÑÑавиÑÑ Ð² ваÑÑ ÑекÑÑÑÑ ÑеÑÑиÑ. ÐоÑÑи вÑе пÑимеÑÑ Ð¿Ð¾Ð´Ð²ÐµÑгаÑÑÑÑ ÑегÑлÑÑной авÑомаÑиÑеÑкой пÑовеÑке на пÑÐµÐ´Ð¼ÐµÑ ÑабоÑоÑпоÑобноÑÑи и налиÑÐ¸Ñ ÑÑебÑемого поведениÑ. ÐÑÑÐ³Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ñ Ð¾ÑоÑо оÑÑÐ°Ð¶Ð°ÐµÑ Ð´ÑÑ Ð¾ÑкÑÑÑого пÑогÑаммного обеÑпеÑениÑ: еÑли ``f`` ÑÑо ÑÑнкÑÐ¸Ñ Python'а, Ñо ``f??`` вÑÐ²ÐµÐ´ÐµÑ Ð¸ÑÑ Ð¾Ð´Ð½Ñй код, коÑоÑÑй опÑеделÑÐµÑ ``f``. ÐапÑимеÑ, .. skip :: sage: V = QQ^3 sage: V.coordinates?? Type: instancemethod ... Source: def coordinates(self, v): """ Write $v$ in terms of the basis for self. ... """ return self.coordinate_vector(v).list() ÐÑÑÑда Ð¼Ñ Ð·Ð½Ð°ÐµÐ¼, ÑÑо вÑе, ÑÑо Ð´ÐµÐ»Ð°ÐµÑ ÑÑнкÑÐ¸Ñ ``coordinates``, ÑÑо вÑзов ÑÑнкÑии ``coordinate_vector`` и пÑевÑаÑÐ°ÐµÑ ÑезÑлÑÑÐ°Ñ Ð² ÑпиÑок. ЧÑо Ð´ÐµÐ»Ð°ÐµÑ ÑÑнкÑÐ¸Ñ ``coordinate_vector?`` .. skip :: sage: V = QQ^3 sage: V.coordinate_vector?? ... def coordinate_vector(self, v): ... return self.ambient_vector_space()(v) ФÑнкÑÐ¸Ñ ``coordinate_vector`` ÑдеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð²Ð²ÐµÐ´ÐµÐ½Ð½Ñе знаÑÐµÐ½Ð¸Ñ Ð²Ð¾ внеÑнем пÑоÑÑÑанÑÑве, ÑÑо позволÑÐµÑ Ð´Ð¾Ð±Ð¸ÑÑÑÑ Ñакого же ÑÑÑекÑа, как пÑи вÑÑиÑлении векÑоÑа коÑÑÑиÑиенÑов пеÑеменной :math:`v` Ñ ÑоÑки зÑÐµÐ½Ð¸Ñ :math:`V`. ÐÑоÑÑÑанÑÑво :math:`V` Ñже внеÑнее, Ñак как оно ÑвлÑеÑÑÑ :math:`\QQ^3`. СÑÑеÑÑвÑÐµÑ Ñакже ÑÑнкÑÐ¸Ñ ``coordinate_vector`` Ð´Ð»Ñ Ð¿Ð¾Ð´Ð¿ÑоÑÑÑанÑÑв, и она Ð²ÐµÐ´ÐµÑ ÑÐµÐ±Ñ Ð¿Ð¾-иномÑ. ÐÑ Ñоздим подпÑоÑÑÑанÑÑво и поÑмоÑÑим: .. skip :: sage: V = QQ^3; W = V.span_of_basis([V.0, V.1]) sage: W.coordinate_vector?? ... def coordinate_vector(self, v): """ ... """ # First find the coordinates of v wrt echelon basis. w = self.echelon_coordinate_vector(v) # Next use transformation matrix from echelon basis to # user basis. T = self.echelon_to_user_matrix() return T.linear_combination_of_rows(w) (ÐÑли Ð²Ñ ÑÑиÑаеÑе, ÑÑо ÑÑÑеÑÑвÑÑÑÐ°Ñ ÑеализаÑÐ¸Ñ Ð½ÐµÑÑÑекÑивна, пожалÑйÑÑа, заÑегиÑÑÑиÑÑйÑеÑÑ Ð¸ помогиÑе опÑимизиÑоваÑÑ Ð»Ð¸Ð½ÐµÐ¹Ð½ÑÑ Ð°Ð»Ð³ÐµÐ±ÑÑ.) ÐÑ Ñакже можеÑе ввеÑÑи ``help(имÑ_командÑ)`` или ``help(клаÑÑ)`` Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ ÑпÑавки о клаÑÑÐ°Ñ Ð¸Ð»Ð¸ ÑÑнкÑиÑÑ Ð² ÑÑиле man-ÑÑÑаниÑ. .. skip :: sage: help(VectorSpace) Help on class VectorSpace ... class VectorSpace(__builtin__.object) | Create a Vector Space. | | To create an ambient space over a field with given dimension | using the calling syntax ... : : Ðогда Ð²Ñ Ð²Ð²Ð¾Ð´Ð¸Ñе ``q`` Ð´Ð»Ñ Ð²ÑÑ Ð¾Ð´Ð° из ÑпÑавоÑной ÑиÑÑемÑ, ваÑа ÑеÑÑÐ¸Ñ Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð² Ñом же ÑоÑÑоÑнии, ÑÑо и до ÑÑого. СпÑавка не Ð·Ð°Ñ Ð»Ð°Ð¼Ð»ÑÐµÑ Ð²Ð°Ñ ÑкÑан, в оÑлиÑие Ð¾Ñ ÑоÑÐ¼Ñ ``function_name?``, коÑоÑÐ°Ñ Ð¸Ð½Ð¾Ð³Ð´Ð° Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑÑавлÑÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð² ваÑей ÑеÑÑии. ÐÑобенно полезно иÑполÑзоваÑÑ ``help(module_name)``. ÐапÑимеÑ, векÑоÑнÑе пÑоÑÑÑанÑÑва опиÑÐ°Ð½Ñ Ð² ``sage.modules.free_module``, поÑÑÐ¾Ð¼Ñ Ð²Ð²ÐµÐ´Ð¸Ñе ``help(sage.modules.free_module)`` Ð´Ð»Ñ Ð´Ð¾ÐºÑменÑаÑии обо вÑем модÑле. Ðогда Ð²Ñ Ð¿ÑоÑмаÑÑиваеÑе докÑменÑаÑÐ¸Ñ Ð² ÑпÑавоÑной ÑиÑÑеме, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе оÑÑÑеÑÑвлÑÑÑ Ð¿Ð¾Ð¸Ñк Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ``/`` и в обÑаÑном поÑÑдке Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ``?``. Ð¡Ð¾Ñ Ñанение и загÑÑзка оÑделÑнÑÑ Ð¾Ð±ÑекÑов ======================================== ÐопÑÑÑим Ð²Ñ Ð²ÑÑиÑлили маÑÑиÑÑ Ð¸Ð»Ð¸ Ñ Ñже: Ñложное пÑоÑÑÑанÑÑво модÑлÑÑнÑÑ Ñимволов, и Ñ Ð¾ÑиÑе ÑÐ¾Ñ ÑаниÑÑ ÐµÐ³Ð¾ Ð´Ð»Ñ ÑабоÑÑ Ð² бÑдÑÑем. Ðак ÑÑо ÑделаÑÑ? ÐÑÑÑ Ð½ÐµÑколÑко ÑпоÑобов, коÑоÑÑми компÑÑÑеÑнÑе алгебÑÑ Ð¿Ð¾Ð»ÑзÑÑÑÑÑ Ð´Ð»Ñ ÑÐ¾Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¾Ð±ÑекÑов. #. **Ð¡Ð¾Ñ ÑаниÑÑ Ð¸Ð³ÑÑ:** ÐоддеÑживаеÑÑÑ ÑÐ¾Ñ Ñанение и загÑÑзка ÑолÑко полнÑÑ ÑеÑÑий (напÑимеÑ, GAP, Magma). #. **УниÑиÑиÑованнÑй ввод/вÑвод:** ÐÑвод обÑекÑов на ÑкÑан в Ñаком виде, в коÑоÑом они могÑÑ Ð±ÑÑÑ ÑÑиÑÐ°Ð½Ñ Ð¿Ð¾Ð·Ð¶Ðµ. (GP/PARI). #. **Eval**: Ðегкий ÑпоÑоб запÑÑка лÑбого кода в инÑеÑпÑеÑаÑоÑе (напÑимеÑ, Singular, PARI). Так как Sage поÑÑÑоен на Python'е, он иÑполÑзÑÐµÑ Ð¸Ð½Ð¾Ð¹ Ð¿Ð¾Ð´Ñ Ð¾Ð´: каждÑй обÑÐµÐºÑ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑевÑаÑен в ÑÑÑокÑ, из коÑоÑой в поÑледÑÑвии можно воÑÑÑановиÑÑ Ð¾Ð±ÑекÑ. СпоÑоб ÑÑ Ð¾Ð¶ Ñо ÑпоÑобом ÑниÑикаÑии ввода и вÑвода, как в PARI, но в ÑлÑÑае Ñ Sage Ð½ÐµÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи вÑводиÑÑ Ð¾Ð±ÑÐµÐºÑ Ð½Ð° ÑкÑан в Ñамой неÑдобной ÑоÑме. Также, поддеÑжка ÑÐ¾Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¸ загÑÑзки (в болÑÑинÑÑве ÑлÑÑаев) полноÑÑÑÑ Ð°Ð²ÑомаÑиÑна, не ÑÑебÑÐµÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑного пÑогÑаммиÑованиÑ; ÑÑо пÑоÑÑо возможноÑÑÑ Python'а, коÑоÑÐ°Ñ Ð±Ñла вклÑÑена в ÑзÑк Ñ Ñамого наÑала. ÐоÑÑи лÑбой обÑÐµÐºÑ x Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑÐ¾Ñ Ñанен в ÑжаÑой ÑоÑме на диÑк пÑи помоÑи ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ''save(x, filename)'' (или во Ð¼Ð½Ð¾Ð³Ð¸Ñ ÑлÑÑаÑÑ ''x.save(filename)''). ÐÐ»Ñ Ð·Ð°Ð³ÑÑзки обÑекÑа введиÑе ''load(filename)''. .. skip :: sage: A = MatrixSpace(QQ,3)(range(9))^2 sage: A [ 15 18 21] [ 42 54 66] [ 69 90 111] sage: save(A, 'A') ТепеÑÑ Ð²ÑйдиÑе из Sage и пеÑезапÑÑÑиÑе. ТепеÑÑ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе полÑÑиÑÑ ''A'' обÑаÑно: .. skip :: sage: A = load('A') sage: A [ 15 18 21] [ 42 54 66] [ 69 90 111] То же Ñамое можно делаÑÑ Ð¸ Ñ Ð±Ð¾Ð»ÐµÐµ ÑложнÑми обÑекÑами, напÑÐ¸Ð¼ÐµÑ ÑллипÑиÑеÑкими кÑивÑми. ÐÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾Ð± обÑекÑе (коÑоÑÐ°Ñ Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð² кеÑе) ÑÐ¾Ñ ÑанÑеÑÑÑ Ð²Ð¼ÐµÑÑе Ñ Ð¾Ð±ÑекÑом. ÐапÑимеÑ, .. skip :: sage: E = EllipticCurve('11a') sage: v = E.anlist(100000) # ÑÑебÑÐµÑ Ð½ÐµÐºÐ¾ÑоÑого вÑемени... sage: save(E, 'E') sage: quit Ð¡Ð¾Ñ ÑÐ°Ð½ÐµÐ½Ð½Ð°Ñ Ð²ÐµÑÑÐ¸Ñ ``E`` Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ 153 килобиÑа, Ñак как в нем ÑодеÑжаÑÑÑ Ð¿ÐµÑвÑе 100000 :math:`a_n`. .. skip :: ~/tmp$ ls -l E.sobj -rw-r--r-- 1 was was 153500 2006-01-28 19:23 E.sobj ~/tmp$ sage [...] sage: E = load('E') sage: v = E.anlist(100000) # моменÑалÑно! (Ð Python, ÑÐ¾Ñ Ñанение и загÑÑзка оÑÑÑеÑÑвлÑеÑÑÑ Ð¼Ð¾Ð´Ñлем ``cPickle``. ÐбÑÐµÐºÑ Sage ``x`` Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑÐ¾Ñ Ñанен Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ``cPickle.dumps(x, 2)``. ÐбÑаÑиÑе внимание на ``2``!) Sage не Ð¼Ð¾Ð¶ÐµÑ ÑÐ¾Ñ ÑанÑÑÑ Ð¸ загÑÑжаÑÑ Ð¾Ð±ÑекÑÑ, ÑозданнÑе в дÑÑÐ³Ð¸Ñ ÑиÑÑÐµÐ¼Ð°Ñ ÐºÐ¾Ð¼Ð¿ÑÑÑеÑной алгебÑÑ, ÑÐ°ÐºÐ¸Ñ ÐºÐ°Ðº GAP, Singular, Maxima и пÑ. Ðни загÑÑжаÑÑÑÑ Ð² ÑоÑÑоÑнии, коÑоÑое помеÑено как "invalid". ХоÑÑ, в GAP многие обÑекÑÑ Ð²ÑводÑÑÑÑ Ð² ÑоÑме, из коÑоÑой Ð¸Ñ Ð¿Ð¾Ñом можно воÑÑÑановиÑÑ, но многие не вÑводÑÑÑÑ Ð² Ñакой ÑоÑме, поÑÑÐ¾Ð¼Ñ Ð¸Ñ Ð²Ð¾ÑÑÑановление из Ñакого вида наÑоÑно запÑеÑено. .. skip :: sage: a = gap(2) sage: a.save('a') sage: load('a') Traceback (most recent call last): ... ValueError: The session in which this object was defined is no longer running. ÐбÑекÑÑ GP/PARI могÑÑ Ð±ÑÑÑ ÑÐ¾Ñ ÑÐ°Ð½ÐµÐ½Ñ Ð¸ загÑÑженÑ, Ñак как Ð¸Ñ Ð²Ð¸Ð´ пÑи вÑводе на ÑкÑан доÑÑаÑоÑен Ð´Ð»Ñ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð±ÑекÑа. .. skip :: sage: a = gp(2) sage: a.save('a') sage: load('a') 2 Ð¡Ð¾Ñ ÑаненнÑе обÑекÑÑ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð·Ð°Ð³ÑÑÐ¶ÐµÐ½Ñ Ð¿Ð¾Ð·Ð¶Ðµ на компÑÑÑеÑÐ°Ñ Ñ Ð´ÑÑгой аÑÑ Ð¸ÑекÑÑÑой или опеÑаÑионной ÑиÑÑемой, напÑимеÑ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑÐ¾Ñ ÑаниÑÑ Ð¾Ð³ÑомнÑÑ Ð¼Ð°ÑÑиÑÑ Ð² 32-биÑной OS X и загÑÑзиÑÑ ÐµÐµ в 64-биÑнÑÑ GNU/Linux, пÑивеÑÑи к ÑÑÑпенÑаÑой ÑоÑме и пеÑемеÑÑиÑÑ Ð¾Ð±ÑаÑно. Также во Ð¼Ð½Ð¾Ð³Ð¸Ñ ÑлÑÑаÑÑ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе загÑÑжаÑÑ Ð¾Ð±ÑекÑÑ Ð² веÑÑии Sage, оÑлиÑнÑе Ð¾Ñ Ð²ÐµÑÑии, на коÑоÑой они бÑли ÑÐ¾Ñ ÑаненÑ. ÐÑе аÑÑибÑÑÑ Ð¾Ð±ÑекÑа ÑÐ¾Ñ ÑанÑÑÑÑÑ Ð²Ð¼ÐµÑÑе Ñ ÐºÐ»Ð°ÑÑом (но не вклÑÑÐ°Ñ Ð¸ÑÑ Ð¾Ð´Ð½Ñй код), коÑоÑÑй опиÑÑÐ²Ð°ÐµÑ Ð¾Ð±ÑекÑ. ÐÑли клаÑÑ Ð±Ð¾Ð»ÐµÐµ не ÑÑÑеÑÑвÑÐµÑ Ð² новой веÑÑии Sage, Ñогда обÑÐµÐºÑ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð·Ð°Ð³ÑÑжен в ÑÑÑ Ð½Ð¾Ð²ÑÑ Ð²ÐµÑÑиÑ. Ðо еÑли Ð²Ñ Ð·Ð°Ð³ÑÑзиÑе ее на веÑÑÐ¸Ñ Ð½Ð¸Ð¶Ðµ, полÑÑиÑе ÑловаÑÑ Ð¾Ð±ÑекÑов (Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ``x.__dict__``) и ÑÐ¾Ñ ÑаниÑе ÑловаÑÑ, Ñо ÑможеÑе загÑÑзиÑÑ ÐµÐ³Ð¾ в новÑÑ Ð²ÐµÑÑиÑ. Ð¡Ð¾Ñ Ñанение в виде ÑекÑÑа ------------------------ ÐÑ Ñакже можеÑе ÑÐ¾Ñ ÑанÑÑÑ Ð¾Ð±ÑекÑÑ Ð² виде набоÑа ASCII Ñимволов в пÑоÑÑой ÑекÑÑовÑй Ñайл пÑоÑÑÑм оÑкÑÑÑием Ñайла и ÑÐ¾Ñ Ñанением ÑÑÑоки, коÑоÑÐ°Ñ Ð²ÑÑÐ°Ð¶Ð°ÐµÑ (опиÑÑваеÑ) обÑÐµÐºÑ (Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе запиÑÑваÑÑ Ð½ÐµÑколÑко обÑекÑов). Ðе забÑдÑÑе закÑÑÑÑ Ñайл поÑле Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ . .. skip :: sage: R.<x,y> = PolynomialRing(QQ,2) sage: f = (x+y)^7 sage: o = open('file.txt','w') sage: o.write(str(f)) sage: o.close() .. _section-save: Ð¡Ð¾Ñ Ñанение и загÑÑзка полнÑÑ ÑеÑÑий =================================== Sage Ð¾Ð±Ð»Ð°Ð´Ð°ÐµÑ Ð¾ÑÐµÐ½Ñ Ð³Ð¸Ð±ÐºÐ¸Ð¼Ð¸ возможноÑÑÑми ÑÐ¾Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¸ загÑÑзки полнÑÑ ÑеÑÑий. Ðоманда ``save_session(sessionname)`` ÑÐ¾Ñ ÑанÑÐµÑ Ð²Ñе пеÑеменнÑе, коÑоÑÑе Ð²Ñ Ð·Ð°Ð´Ð°Ð»Ð¸ в ÑекÑÑей ÑеÑÑии в виде ÑловаÑÑ Ð² заданном ``sessionname``. (Ð Ñедком ÑлÑÑае, когда обÑÐµÐºÑ Ð½Ðµ поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑÐ¾Ñ ÑанениÑ, он пÑоÑÑо не бÑÐ´ÐµÑ Ð²ÐºÐ»ÑÑен в ÑловаÑÑ.) Ð ÑезÑлÑÑаÑе бÑÐ´ÐµÑ Ñоздан Ñайл Ñ ÑаÑÑиÑением ``.sobj`` и Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð·Ð°Ð³ÑÑжен как лÑбой дÑÑгой обÑекÑ. Ðогда Ð²Ñ Ð·Ð°Ð³ÑÑжаеÑе ÑÐ¾Ñ ÑаненнÑе обÑекÑÑ Ð² ÑеÑÑиÑ, Ð²Ñ Ð¿Ð¾Ð»ÑÑаеÑе ÑловаÑÑ, клÑÑами коÑоÑого ÑвлÑÑÑÑÑ Ð¸Ð¼ÐµÐ½Ð° пеÑеменнÑÑ , а знаÑениÑми â обÑекÑÑ. ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ``load_session(sessionname)``, ÑÑÐ¾Ð±Ñ Ð·Ð°Ð³ÑÑзиÑÑ Ð¿ÐµÑеменнÑе, опиÑаннÑе в ``sessionname``, в ÑекÑÑÑÑ ÑеÑÑиÑ. ÐамеÑÑÑе, ÑÑо ÑÑо не ÑдалÑÐµÑ Ð¿ÐµÑеменнÑе, заданнÑе в ÑÑой ÑеÑÑии. ÐмеÑÑо ÑÑого, две ÑеÑÑии обÑединÑÑÑÑÑ. ÐÐ»Ñ Ð½Ð°Ñала запÑÑÑим Sage и зададим неÑколÑко пеÑеменнÑÑ . .. skip :: sage: E = EllipticCurve('11a') sage: M = ModularSymbols(37) sage: a = 389 sage: t = M.T(2003).matrix(); t.charpoly().factor() _4 = (x - 2004) * (x - 12)^2 * (x + 54)^2 Ðалее, ÑÐ¾Ñ Ñаним наÑÑ ÑеÑÑиÑ, ÑÑо вклÑÑÐ¸Ñ Ð² ÑÐµÐ±Ñ ÑÐ¾Ñ Ñанение вÑÐµÑ Ð·Ð°Ð´Ð°Ð½Ð½ÑÑ Ð²ÑÑе пеÑеменнÑÑ Ð² Ñайл. ÐоÑом Ð¼Ñ Ð¿ÑовеÑим инÑоÑмаÑÐ¸Ñ Ð¾ Ñайле. Ðго ÑÐ°Ð·Ð¼ÐµÑ â 3 килобайÑа. .. skip :: sage: save_session('misc') Saving a Saving M Saving t Saving E sage: quit was@form:~/tmp$ ls -l misc.sobj -rw-r--r-- 1 was was 2979 2006-01-28 19:47 misc.sobj ÐаконеÑ, Ð¼Ñ Ð¿ÐµÑезапÑÑÑим Sage, зададим дополниÑелÑнÑÑ Ð¿ÐµÑеменнÑÑ Ð¸ загÑÑзим ÑÐ¾Ñ ÑаненнÑÑ ÑеÑÑиÑ. .. skip :: sage: b = 19 sage: load_session('misc') Loading a Loading M Loading E Loading t ÐÐ°Ð¶Ð´Ð°Ñ ÑÐ¾Ñ ÑÐ°Ð½ÐµÐ½Ð½Ð°Ñ Ð¿ÐµÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ñнова ÑвлÑеÑÑÑ Ð¿ÐµÑеменной. ÐÑоме Ñого, пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ ``b`` не бÑла пеÑезапиÑана. .. skip :: sage: M Full Modular Symbols space for Gamma_0(37) of weight 2 with sign 0 and dimension 5 over Rational Field sage: E Elliptic Curve defined by y^2 + y = x^3 - x^2 - 10*x - 20 over Rational Field sage: b 19 sage: a 389 .. _section-notebook: ÐнÑеÑÑÐµÐ¹Ñ Notebook ================== Sage notebook запÑÑкаеÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑледÑÑÑей ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ .. skip :: sage: notebook() введенной в командной ÑÑÑоке. Ðна запÑÑÑÐ¸Ñ Sage notebook и оÑкÑÐ¾ÐµÑ ÐµÐ³Ð¾ в бÑаÑзеÑе по ÑмолÑаниÑ. Ð¤Ð°Ð¹Ð»Ñ ÑоÑÑоÑÐ½Ð¸Ñ ÑеÑвеÑа Ñ ÑанÑÑÑÑ Ð² ``$HOME/.sage/sage\_notebook``. ÐÑÑгие паÑамеÑÑÑ Ð²ÐºÐ»ÑÑаÑÑ Ð² ÑебÑ: .. skip :: sage: notebook("directory") ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ Ð·Ð°Ð¿ÑÑÑиÑÑ ÑеÑÐ²ÐµÑ Notebook, иÑполÑзÑÑ ÑÐ°Ð¹Ð»Ñ Ð² заданной диÑекÑоÑии, вмеÑÑо иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð¸ÑекÑоÑии по ÑмолÑÐ°Ð½Ð¸Ñ ``$HOME/.sage/sage_notebook``. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð¾ÐºÐ°Ð·Ð°ÑÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñм, еÑли Ð²Ñ Ñ Ð¾ÑиÑе имеÑÑ ÐºÐ¾Ð»Ð»ÐµÐºÑÐ¸Ñ ÑабоÑÐ¸Ñ Ð»Ð¸ÑÑов, ÑвÑзаннÑÑ Ñ ÐºÐ¾Ð½ÐºÑеÑнÑм пÑоекÑом, или еÑли Ð²Ñ Ñ Ð¾ÑиÑе запÑÑкаÑÑ Ð½ÐµÑколÑко оÑделÑнÑÑ ÑеÑвеÑов Notebook в одно вÑемÑ. Ðогда Ð²Ñ Ð·Ð°Ð¿ÑÑкаеÑе Notebook, внаÑале он ÑÐ¾Ð·Ð´Ð°ÐµÑ ÑледÑÑÑие ÑÐ°Ð¹Ð»Ñ Ð² диÑекÑоÑии ``$HOME/.sage/sage_notebook``: :: nb.sobj (the notebook SAGE object file) objects/ (a directory containing SAGE objects) worksheets/ (a directory containing SAGE worksheets). ÐоÑле ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑÑÐ¸Ñ Ñайлов, Notebook запÑÑÐºÐ°ÐµÑ Ð²ÐµÐ±-ÑеÑвеÑ. Notebook â ÑÑо коллекÑÐ¸Ñ ÑÑеÑнÑÑ Ð·Ð°Ð¿Ð¸Ñей полÑзоваÑелей (аккаÑнÑов), каждÑй из коÑоÑÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð¼ÐµÑÑ Ð»Ñбое колиÑеÑÑво ÑабоÑÐ¸Ñ Ð»Ð¸ÑÑов. Ðогда Ð²Ñ ÑоздаеÑе новÑй ÑабоÑий лиÑÑ, инÑоÑмаÑиÑ, коÑоÑÐ°Ñ Ð¾Ð¿Ð¸ÑÑÐ²Ð°ÐµÑ ÐµÐ³Ð¾, ÑÐ¾Ñ ÑанÑеÑÑÑ Ð² диÑекÑоÑии ``worksheets/username/number``. Ркаждой Ñакой диÑекÑоÑии Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð¿ÑоÑÑой ÑекÑÑовÑй Ñайл ``worksheet.txt``; еÑли ÑÑо-Ñо ÑлÑÑиÑÑÑ Ñ Ð²Ð°Ñими ÑабоÑими лиÑÑами, или Ñ Sage, или ÑÑо-нибÑÐ´Ñ ÐµÑе Ð¿Ð¾Ð¹Ð´ÐµÑ Ð½Ðµ Ñак, Ñо ÑекcÑовÑй Ñайл, коÑоÑÑй легко ÑиÑаеÑÑÑ, Ð¿Ð¾Ð¼Ð¾Ð¶ÐµÑ Ð²Ð¾ÑÑÑановиÑÑ Ð²Ð°Ñ Ð»Ð¸ÑÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ. Ð Sage введиÑе ``notebook?`` Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ñобной инÑоÑмаÑии о Ñом, как запÑÑÑиÑÑ ÑеÑÐ²ÐµÑ Notebook. СледÑÑÑÐ°Ñ Ð´Ð¸Ð°Ð³Ñамма иллÑÑÑÑиÑÑÐµÑ Ð°ÑÑ Ð¸ÑекÑÑÑÑ Sage Notebook: :: ---------------------- | | | | | firefox/safari | | | | javascript | | program | | | | | ---------------------- | ^ | AJAX | V | ---------------------- | | | sage | SAGE process 1 | web | ------------> SAGE process 2 (Python processes) | server | pexpect SAGE process 3 | | . | | . ---------------------- . ÐÐ»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ ÑпÑавки о команде Sage, ``cmd``, в notebook введиÑе, ``cmd?`` и нажмиÑе ``<esc>`` (не ``<shift-enter>``). ÐÐ»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ ÑпÑавки о гоÑÑÑÐ¸Ñ ÐºÐ»Ð°Ð²Ð¸ÑÐ°Ñ Ð¸Ð½ÑеÑÑейÑа notebook нажмиÑе ÑÑÑÐ»ÐºÑ ``Help``.