Path: blob/develop/src/doc/ja/tutorial/interactive_shell.rst
7339 views
.. _chapter-interactive_shell:
*********************
察話åã·ã§ã«
*********************
ãã®ãã¥ãŒããªã¢ã«ã®å€§éšåã¯ïŒèªè
ã ``sage`` ã³ãã³ãã«ãã£ãŠSageã€ã³ã¿ããªã¿ãèµ·åããŠãããã®ãšåæããŠããïŒ
ã³ãã³ã ``sage`` ã¯æ¹é çIPythonã·ã§ã«ãèµ·åãïŒå€§éã®é¢æ°ãã¯ã©ã¹çŸ€ãã€ã³ããŒãããŠã³ãã³ãããã³ããããå©çšå¯èœã«ããïŒ
``$SAGE_ROOT/ipythonrc`` ãã¡ã€ã«ãç·šéããã°ïŒãããªãã·ã§ã«ç°å¢ã®ã«ã¹ã¿ãã€ãºãå¯èœã ïŒ
Sageãèµ·åãããšïŒããã«æ¬¡ã®ãããªç»é¢ãçŸãã:
.. skip
::
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â SageMath version 9.7, Release Date: 2022-01-10 â
â Using Python 3.10.4. Type "help()" for help. â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
sage:
Sageãçµäºããã«ã¯ïŒCtrl-DãšæŒããïŒ ã³ãã³ã ``quit`` ããã㯠``exit`` ãå
¥åããïŒ
.. skip
::
sage: quit
Exiting Sage (CPU time 0m0.00s, Wall time 0m0.89s)
"Wall time"ã¯ïŒCPUã¿ã€ã ã§ã¯ãªãå€çã®å®çµéæéã瀺ããŠããïŒ
CPUã¿ã€ã ã¯GAPãSingularãªã©ã®ãµãããã»ã¹ã®æ¶è²»æéãŸã§ã¯åå®ã«å
¥ããŠãããªãããïŒå®çµéæéãèšç®æéã®èŠç©ãã«å¿
èŠã ïŒ
(ã¿ãŒããã«ãã ``kill -9`` ãå
¥åããŠSageããã»ã¹ã忢ããã®ã¯æ¢ããã»ããããïŒ
``kill -9`` ã§ã¯Mapleãªã©ã®åããã»ã¹ã忢ããªãã£ããïŒ ``$HOME/.sage/tmp`` å
ã®äžæãã¡ã€ã«ãæ¶å»ãããã«çµãããªã©ã®æããããïŒ)
Sageã»ãã·ã§ã³
=================
*ã»ãã·ã§ã³* ãšã¯ïŒSageã®èµ·åããçµäºãŸã§ã®éã«è¡ãªãããäžé£ã®å
¥åºåã®ç·äœã®ããšãããïŒ
Sageã¯ïŒSageã«å¯Ÿããå
¥åã®å
šãŠãIPythonçµç±ã§èšé²ããŠããïŒ
äºå®ïŒ(ããŒãããã¯çµç±ã§ã¯ãªã)察話åã·ã§ã«ã䜿ã£ãŠSageãåãããŠããã®ãªãã°ïŒå¥œããªæã« ``%history`` (ãŸã㯠``%hist``) ãšå
¥åããŠïŒãããŸã§ã®å
šå
¥åå±¥æŽãèŠãããšãã§ããïŒ
IPythonã«ã€ããŠãã£ãšç¥ããããã°ãSageããã³ããã§ ``?`` ãšå
¥åããã°ïŒ "IPython offers numbered prompts ... with input and output caching. All input is saved and can be retrieved as variables (besides the usual arrow key recall). The following GLOBAL variables always exist (so don't overwrite them!)" ãªã©ãšè©³ããæ
å ±ã衚瀺ãããããšãã§ãã:
::
_: ååã®å
¥åãåŒã³åºã (察話åã·ã§ã«ãšããŒãããã¯ã®äž¡æ¹ã§éçšãã)
__: åã
åã®å
¥åãåŒã³åºã(察話åã·ã§ã«ã®ã¿ã§éçš)
_oh : å
šãŠã®å
¥åããªã¹ããã(察話åã·ã§ã«ã®ã¿ã§éçš)
ããã§äŸãèŠãŠã¿ãã:
.. skip
::
sage: factor(100)
_1 = 2^2 * 5^2
sage: kronecker_symbol(3,5)
_2 = -1
sage: %hist # ããã䜿ããã®ã¯å¯Ÿè©±åã·ã§ã«äžã®ã¿ïŒããŒãããã¯ã§ã¯ã ãïŒ
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
察話åã·ã§ã«ã䜿ã£ãŠããéãïŒæå笊 ``!`` ãå眮ããã°å¥œããªUNIXã·ã§ã«ã³ãã³ããå®è¡ããããšãã§ããïŒ
äŸãã°
.. skip
::
sage: !ls
auto example.sage glossary.tex t tmp tut.log tut.tex
ã®ããã«ïŒã«ã¬ã³ããã£ã¬ã¯ããªã®å
容ã衚瀺ããããšãã§ããïŒ
ã·ã§ã«å€æ° ``PATH`` ã®å
é ã«ã¯Sageã®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?`` ãšå
¥åããŠã¿ãŠã»ããïŒ
``logstart`` ã䜿ãã°ïŒå
šãŠã®å
¥åãšåºåã®ãã°ãæ®ãïŒå°æ¥ã®ã»ãã·ã§ã³æã«(ãã®ãã°ãã¡ã€ã«ããªããŒãããŠããã ãã§)å
¥åãåçããããšãå¯èœã«ãªãïŒ
.. skip
::
was@form:~$ sage
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â SageMath version 9.7, Release Date: 2022-01-10 â
â Using Python 3.10.4. Type "help()" for help. â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
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
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â SageMath version 9.7, Release Date: 2022-01-10 â
â Using Python 3.10.4. Type "help()" for help. â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
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ãLinux KDEã¿ãŒããã« ``konsole`` äžã§äœ¿ã£ãŠãããªãïŒä»¥äžã®æé ã§ã»ãã·ã§ã³ãä¿åããããšãã§ããïŒ
ãŸã ``konsole`` äžã§Sageãèµ·åãããã "settings"(æ¥æ¬èªç°å¢ã§ããã°ãèšå®ã)ãéžæãïŒæ¬¡ã« "history"(ãå±¥æŽã)ïŒ "set unlimited"(ãç¡å¶éã«ããã)ã®é ã«éžæããŠããïŒ
ã»ãã·ã§ã³ãä¿åããããªã£ãæç¹ã§ïŒ "edit"(ãç·šéã)ã®äžã® "save history as..."(ãå±¥æŽãååãä»ããŠä¿åã)ãéžæããŠã»ãã·ã§ã³ãä¿åãããã¡ã€ã«åãå
¥åããŠããã°ããïŒ
ãã£ãããã¡ã€ã«ãšããŠä¿åããŠããŸãã°ïŒå¥œããªããã«xemacsãªã©ã®ãšãã£ã¿ã§èªã¿èŸŒãã ãããªã³ãã¢ãŠããããããããšãã§ããïŒ
ããã³ããèšå·ã¯ããŒã¹ãæã«ç¡èŠããã
========================================
Sageã»ãã·ã§ã³ãããã¯Pythonã®æŒç®çµæãèªã¿èŸŒãã§ïŒSageäžã«ã³ããŒãããå ŽåãããïŒ
åä»ãªã®ã¯ãããããåºåã« ``>>>`` ã ``sage:`` ãšãã£ãããã³ããèšå·ãçŽã蟌ãã§ããããšã ïŒ
ãããå®éã«ã¯ïŒããã³ããèšå·ãå«ãå®è¡äŸãSageäžãžå¥œãã«ã³ããŒã»ããŒã¹ãããŠããããšãã§ããïŒ
ããã©ã«ãã§SageããŒãµãŒã¯ããŒã¿ãPythonã«éãåã«è¡é ã® ``>>>`` ã ``sage:`` ããã³ããèšå·ãé€å»ããŠãããããã ïŒ
äŸãã°
.. 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"ãCPUã¿ã€ã ããããªãé·ããªãããšãããïŒ
次ã«ïŒåãã¹ãä¹èšç®ãSageçµã¿èŸŒã¿ã®Integeråã䜿ã£ãŠå®è¡ããå Žåã®æéãèšã£ãŠã¿ããïŒ
Sageã®Integeråã¯ïŒ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ã®æ¹ãéããïŒãã®å·®ã¯ãããã (Sageçšã«ãã«ããããPARIã¯æŽæ°æŒç®ã«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 å€ã«ã¯è¥å¹²ã®å¹
ãããïŒ
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ã¿ã€ã ã®å€ã倧å¹
ã«é£ãéãå Žåã¯ïŒè§£æ±ºãã¹ãããã©ãŒãã³ã¹äžã®åé¡ç¹ã®ååšã瀺ããŠããå¯èœæ§ãããïŒ
.. 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: libgap(0)
0
sage: time g = libgap.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`` äžã®ãã®)ïŒ
åã·ã¹ãã ãšã®pexpectã€ã³ã¿ãŒãã§ã€ã¹ã«ãããè² è·ãèãããšïŒäžã®äžé£ã®èšæž¬å€ãæéã ã£ãSageã®å€ãšæ¯èŒããã®ã¯å
¬å¹³ãæ¬ ãé¢ããããããããªãïŒ
IPythonããªãã¯
====================
ãã§ã«è¿°ã¹ãããã«ïŒSageã¯ãã®ããã³ããšã³ããšããŠIPythonãæŽçšããŠããïŒãŠãŒã¶ã¯IPythonã®ã³ãã³ããšç¬èªæ©èœãèªç±ã«å©çšããããšãã§ããïŒ
ãã®å
šè²ã«ã€ããŠã¯ïŒ ãèªåã§ `full IPython documentation
<http://ipython.scipy.org/moin/Documentation>`_ ãèªãã¿ãŠã»ããïŒ
ãã®ãããïŒããã§ã¯IPythonã®ãããžãã¯ã³ãã³ãããšåŒã°ããïŒã䟿å©ãªããªãã¯ãããã€ã玹ä»ãããŠããã ãã:
- ``%edit`` (``%ed`` ã ``ed`` ã§ããã)ã䜿ã£ãŠãšãã£ã¿ãèµ·åããã°ïŒè€éãªã³ãŒãã®å
¥åãæ¥œã«ãªãïŒ
Sageã®äœ¿çšåã«ïŒç°å¢å€æ° :envvar:`EDITOR` ã«å¥œã¿ã®ãšãã£ã¿åãèšå®ããŠããã(``export EDITOR=/usr/bin/emacs`` ãŸã㯠``export EDITOR=/usr/bin/vim`` ãšãããïŒ ``.profile`` ãã¡ã€ã«ãªã©ã§åæ§ã®èšå®ããã)ïŒ
ãããšSageããã³ããã§ ``%edit`` ãå®è¡ããã°èšå®ãããšãã£ã¿ãèµ·åããïŒãã®ãšãã£ã¿ã§é¢æ°
::
def some_function(n):
return n**2 + 3*n + 2
ãå®çŸ©ãïŒä¿åããããšãã£ã¿ãçµäºããïŒ
以éïŒãã®ã»ãã·ã§ã³äžã¯ ``some_function`` ãå©çšã§ããããã«ãªãïŒ
å
容ãç·šéããããã°Sageããã³ããã§ ``%edit some_function`` ãšå
¥åããã°ããïŒ
- çµæåºåãä»ã®çšéã®ããã«ç·šéããããã°ïŒ ``%rep`` ãå®è¡ããïŒ
ãããšçŽåã«å®è¡ããã³ãã³ãã®åºåãç·šéã§ããããã«Sageããã³ããäžã«é
眮ãããïŒ::
sage: f(x) = cos(x)
sage: f(x).derivative(x)
-sin(x)
ãã®æ®µéã§Sageããã³ãããã ``%rep`` ãå®è¡ãããšïŒæ°ããSageããã³ããã«ç¶ã㊠``-sin(x)`` ãçŸãããïŒ
ã«ãŒãœã«ã¯åãè¡æ«ã«ããïŒ
IPythonã®ã¯ã€ã㯠ã¬ãã¡ã¬ã³ã¹ã¬ã€ããèŠãããã°ïŒ ``%quickref`` ãšå
¥åããïŒ
å·çæç¹(2011幎4æ)ã§ã¯Sageã¯IPythonã®ããŒãžã§ã³0.9.1ãæ¡çšããŠããïŒ `documentation for its magic commands
<http://ipython.org/ipython-doc/dev/interactive/tutorial.html#magic-functions>`_
ã¯ãªã³ã©ã€ã³ã§èªãããšãã§ããïŒ
ããžãã¯ã³ãã³ãã®ïŒã¡ãã£ãšé²ãã æ©èœçŸ€ã«ã€ããŠã¯IPythonã® `ãã
<http://ipython.org/ipython-doc/stable/interactive/reference.html#magic-command-system>`_
ã§ææžåãããŠããã®ãèŠã€ããã¯ãã ïŒ
ãšã©ãŒãšäŸå€åŠç
=====================
åŠçäžã«äœããŸããããšãèµ·ãããšïŒPythonã¯ãµã€ããäŸå€ã(exception)ãçºçãïŒãã®äŸå€ãåŒãèµ·ãããåå ãæããŠãããããšãããïŒ
ãããç®ã«ãããããšã«ãªãã®ã¯ïŒ :class:`NameError` ã :class:`ValueError` ãšãã£ãåç§°ã®äŸå€ã (Pythonã©ã€ãã©ãªãŒãªãã¡ã¬ã³ã¹ [PyLR]_ ã«äŸå€åã®å
æ¬çãªãªã¹ãããã)ïŒ
å®äŸãèŠãŠã¿ãã:
::
sage: EllipticCurve([0,infinity])
Traceback (most recent call last):
...
SignError: cannot multiply infinity by zero
äœãæªãã調ã¹ãã«ã¯å¯Ÿè©±åãããã¬ã圹ç«ã€ããšãããïŒ
ãããã¬ã䜿ãã«ã¯ã ``%pdb`` ã³ãã³ãã«ãã£ãŠäœåã®ãªã³/ãªãããã°ã«ãã(ããã©ã«ãã¯ãªã)ïŒ
äœååŸã¯ãäŸå€ãçºçãããšãããã¬ãèµ·åãïŒããã³ãã ``ipdb>`` ã衚瀺ãããïŒ
ãã®ãããã¬ã®äžããïŒä»»æã®ããŒã«ã«å€æ°ã®ç¶æ
ã衚瀺ãããïŒå®è¡ã¹ã¿ãã¯ãäžäžããŠæ§åã調ã¹ãããšãã§ããïŒ
.. skip
::
sage: %pdb
Automatic pdb calling has been turned ON
sage: EllipticCurve([1,infinity])
---------------------------------------------------------------------------
<class '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
Sageã«æ»ãã«ã¯ïŒCtrl-Dã ``quit`` ãå
¥åããïŒ
.. _section-tabcompletion:
ã³ãã³ãå
¥åã®é¡è¡æ€çŽ¢ãšã¿ãè£å®
=================================
*é¡è¡æ€çŽ¢*: ã³ãã³ãã®åé éšãæã¡èŸŒãã§ãã ``Ctrl-p`` (ãŸãã¯äžåãç¢å°ããŒ)ãæŒããšïŒåé éšãäžèŽããéå»ã®å
¥åè¡ãå
šãŠåŒã³åºãããšãã§ããïŒ
ãã®æ©èœã¯ïŒSageããã£ããçµäºãåèµ·åããŠããã§ãæå¹ã§ããïŒ
``Ctrl-r`` ãå
¥åããã°ïŒå
¥åãã¹ããªãéæ¹åã«æ€çŽ¢ããããšãå¯èœã ïŒ
ãã®å
¥åè¡ã®æ€çŽ¢ãšåå©çšæ©èœã¯å
šãŠ ``readline`` ããã±ãŒãžãçµç±ããŠããïŒã»ãšãã©ã®Linuxç³»ã·ã¹ãã äžã§å©çšã§ããã¯ãã ïŒ
ã¿ãè£å®æ©èœãäœéšããããïŒãŸã3次å
ãã¯ãã«ç©ºé :math:`V=\QQ^3` ãçæããŠãã:
::
sage: V = VectorSpace(QQ,3)
sage: V
Vector space of dimension 3 over Rational Field
次ã®ãããªïŒãã£ãšç°¡æœãªèšå·æ³ã䜿ã£ãŠããã:
::
sage: V = QQ^3
ã¿ãè£å®ã䜿ãã°ïŒç°¡åã« :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: <class '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]
äžã§èŠãããã«ïŒãã«ã衚瀺ã«ã¯ïŒãã®ãªããžã§ã¯ãã®åïŒå®çŸ©ãããŠãããã¡ã€ã«ïŒçŸã»ãã·ã§ã³ã«ããŒã¹ãããããšãã§ãã䜿çšäŸä»ãã®è§£èª¬ãå«ãŸããïŒ
䜿çšäŸã®ã»ãšãã©ã¯åžžã«èªåçãªãã¹ããè¡ãªãããŠããŠïŒä»æ§ã©ããã®æ£ç¢ºãªåäœã確èªãããŠããïŒ
ããäžã€ã®æ©èœã¯ïŒSageã®ãªãŒãã³ãœãŒã¹ç²Ÿç¥ããã衚ããã®ã ïŒ
``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`` 颿°ã¯ïŒå
¥åãçæç©ºé(ambient space)ã«åãããŠå倿ããããïŒãã㯠: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 function VectorSpace in module sage.modules.free_module:
VectorSpace(K, dimension_or_basis_keys=None, sparse=False, inner_product_matrix=None, *,
with_basis='standard', dimension=None, basis_keys=None, **args)
EXAMPLES:
The base can be complicated, as long as it is a field.
::
sage: V = VectorSpace(FractionField(PolynomialRing(ZZ,'x')),3)
sage: V
Vector space of dimension 3 over Fraction Field of Univariate Polynomial Ring in x
over Integer Ring
sage: V.basis()
[
(1, 0, 0),
(0, 1, 0),
--More--
``q`` ãšå
¥åããŠãã«ããçµãããšïŒäžæåã®ã»ãã·ã§ã³ç»é¢ããã®ãŸãŸåŸ©åž°ããïŒ
ã»ãã·ã§ã³ã«å¹²æžããããšããã ``function_name?`` ãšéã£ãŠïŒ ãã«ã衚瀺ã¯ã»ãã·ã§ã³ã®éªéãããªãïŒ
ãšããã䟿å©ãªã®ã¯ ``help(ã¢ãžã¥ãŒã«å)`` ãšå
¥åããããšã ïŒ
äŸãã°ãã¯ãã«ç©ºé㯠``sage.modules.free_module`` ã§å®çŸ©ãããŠããããïŒãã®ã¢ãžã¥ãŒã«å
šäœã«é¢ããããã¥ã¡ã³ããèŠãããã° ``help(sage.modules.free_module)`` ãšå®è¡ããã°ããïŒ
ãã«ãã䜿ã£ãŠããã¥ã¡ã³ããé²èЧããŠããéã¯ïŒ ``/`` ãšæãŠã°èªå¥æ€çŽ¢ ãã§ãããïŒ ``?`` ãšæãŠã°éæ¹åã«æ€çŽ¢ããããšãã§ããïŒ
ãªããžã§ã¯ãã®ä¿åãšèªã¿èŸŒã¿
=====================================
è¡åãïŒãããã¯ãã£ãšæéã®ãããè€éãªã¢ãžã¥ã©ãŒã·ã³ãã«ã®ç©ºéãæ±ã£ãŠããŠïŒåŸã§å©çšããããçµæãä¿åããŠãããããªã£ããšãããïŒ
ãããªå Žåã«ã¯ã©ãããã°ããã ãããïŒ
ãªããžã§ã¯ããä¿åããããã«åã³ã³ãã¥ãŒã¿ä»£æ°ã·ã¹ãã ãæäŸããŠããæ¹æ³ã¯ïŒä»¥äžã®éãã§ããïŒ
#. **ã»ãã·ã§ã³ã®ä¿å:** ã»ãã·ã§ã³å
šäœã®ä¿åãšèªã¿èŸŒã¿ã®ã¿å¯èœ(GAPïŒMagmaãªã©)ïŒ
#. **çµ±åå
¥åºå:** å
šãªããžã§ã¯ãã®å°åãåå©çšå¯èœãªåœ¢åŒã§è¡ãªããã(GAPãšPARI)ïŒ
#. **åå®è¡**: ã€ã³ã¿ãŒããªã¿ã«ããããã°ã©ã ã®åå®è¡ã容æã«ããŠãã(SingularïŒPARI)ïŒ
..
#. **Save your Game:** Only support saving and loading of complete
sessions (e.g., GAP, Magma).
#. **Unified Input/Output:** Make every object print in a way that
can be read back in (GP/PARI).
#. **Eval**: Make it easy to evaluate arbitrary code in the
interpreter (e.g., Singular, PARI).
Pythonã§åãSageã§ã¯ïŒå
šãŠã®ãªããžã§ã¯ãã®ã·ãªã¢ã«å(çŽåå)ãšããïŒä»ãšã¯ç°ãªãæ¹æ³ãæ¡çšãããŠããïŒ
ã€ãŸããªããžã§ã¯ããïŒãã®ååãåçŸå¯èœãªåœ¢åŒã§æååã«å€æããã®ã ïŒ
ããã¯PARIã®çµ±åå
¥åºåã®èãæ¹ã«è¿ããïŒãªããžã§ã¯ããè€éãªå°å圢åŒã§ç»é¢åºåããŠããå¿
èŠããªãã®ãå©ç¹ã ïŒ
ããã«ä¿åãšèªã¿èŸŒã¿ã¯(ã»ãšãã©ã®å Žå)å®å
šã«èªååãããŠããããïŒæ°ãã«ããã°ã©ã ãæžãå¿
èŠããªãïŒ
ããããæ©èœã¯Pythonã«æåããçµèŸŒãŸããŠãããã®ã ããã§ããïŒ
ã»ãŒå
šãŠã®Sageãªããžã§ã¯ã ``x`` ã¯ïŒ ã³ãã³ã ``save(x,ãã¡ã€ã«å)`` (ãããã¯å€ãã®å Žå ``x.save(ãã¡ã€ã«å)``)ã䜿ãã°å§çž®åœ¢åŒã§ãã£ã¹ã¯ã«ä¿åããããšãã§ããããã«ãªã£ãŠããïŒ
ä¿åãããªããžã§ã¯ããèªã¿æ»ãã«ã¯ïŒ ``load(ãã¡ã€ã«å)`` ãå®è¡ããïŒ
.. 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`` ã¯ïŒãªããžã§ã¯ãæ¬äœãšäžç·ã« :math:`a_n` ã®åé 100000åãä¿åããããïŒ153Kãã€ãã®å€§ããã«ãªãïŒ
.. 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 = libgap(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
ä¿åãããªããžã§ã¯ãã¯ïŒç°ãªãã¢ãŒããã¯ãã£äžã®ïŒç°ãªããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã§åãSageãžãããŒãããããšãã§ããïŒ
äŸãã°ïŒ32ããã OSXäžã§ä¿åããå€§èŠæš¡è¡åã64ãããçLinuxã®Sageãžèªã¿èŸŒã¿ïŒãã®é段圢åŒãæ±ããŠããå
ã®OS Xäžãžæ»ããšãã£ãããšãå¯èœã ïŒ
ããã«ïŒãªããžã§ã¯ãã®ä¿åãŸã§ã«äœ¿ã£ãã®ãšã¯éãããŒãžã§ã³ã®Sageã§ãªããžã§ã¯ããèªã¿èŸŒãããšãã§ããå Žåãå€ãïŒ
ãã ãïŒããã¯èªã¿æžãããããªããžã§ã¯ãã«é¢ããã³ãŒããããŒãžã§ã³éã§å€§ããã¯ç°ãªããªãããšãæ¡ä»¶ãšãªãïŒ
ãªããžã§ã¯ãã®ä¿åã«éããŠã¯ïŒãã®å±æ§ã®å
šãŠããªããžã§ã¯ããå®çŸ©ããŠãã(ãœãŒã¹ã³ãŒãã§ã¯ãªã)ã¯ã©ã¹ãšå
±ã«ä¿åãããïŒ
ãã®ã¯ã©ã¹ãæ°ããŒãžã§ã³ã®Sageã«ååšããªãå ŽåïŒé
äžã®ãªããžã§ã¯ããæ°ããŒãžã§ã³ã§ã¯èªã¿èŸŒãããšã¯ã§ããªãïŒ
ãããå€ãããŒãžã§ã³ã§èªã¿èŸŒãããšã¯ã§ããã¯ãã ããïŒ(``x.__dict__`` ã§)ãªããžã§ã¯ã ``x`` ã®ãã£ã¯ã·ã§ããªãçæããŠä¿åããŠããã°ïŒãããæ°ããããŒãžã§ã³ã§èªã¿èŸŒãããšãã§ããããšãããïŒ
ããã¹ã圢åŒã§ä¿åãã
--------------------------
ãªããžã§ã¯ãã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(ã»ãã·ã§ã³å)`` ã¯ïŒçŸã»ãã·ã§ã³äžã«å®çŸ©ãããå
šãŠã®å€æ°ããã³ãã³ãã§æå®ãã ``ã»ãã·ã§ã³å`` ã«ãã£ã¯ã·ã§ããªãšããŠä¿åããïŒ
(ä¿åãæ³å®ããŠããªã倿°ãããå ŽåããŸãã«èŠããããïŒããããæã¯ãã£ã¯ã·ã§ããªã«ä¿åãããã«çµãã ãã ïŒ)
ä¿åå
㯠``.sobj`` ãã¡ã€ã«ãšãªãïŒä»ã®ä¿åæžã¿ãªããžã§ã¯ããšå
šãåãããã«èªã¿èŸŒãããšãã§ããïŒ
ã»ãã·ã§ã³äžã«ä¿åãããªããžã§ã¯ããåã³ããŒããããšïŒå€æ°åãããŒïŒãªããžã§ã¯ããå€ãšãããã£ã¯ã·ã§ããªãçæãããããšã«ãªãïŒ
å®è¡äžã®ã»ãã·ã§ã³ã« ``ã»ãã·ã§ã³å`` ã«å®çŸ©ããã倿°ãããŒãããã«ã¯ïŒ ``load_session(ã»ãã·ã§ã³å)`` ã³ãã³ãã䜿ãïŒ
ãã®ã³ãã³ãã¯çŸã»ãã·ã§ã³ãšããŒããããåŽã®ã»ãã·ã§ã³å
容ãå䜵ããã®ã§ãã£ãŠïŒçŸã»ãã·ã§ã³ã§å®çŸ©ãã倿°ãæ¶å»ãããããã§ã¯ãªãïŒ
ãŸã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
次ã«ãã®ã»ãã·ã§ã³ããã¡ã€ã«ã«ä¿åãïŒå
ã«å®çŸ©ãã倿°ãæ®ããŠããïŒ
``.sobj`` ãã¡ã€ã«ã確èªãããšïŒãã®å€§ããã¯3Kãã€ãã»ã©ãšãªã£ãŠããïŒ
.. 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