.

Thursday, December 20, 2018

'Sage 50 Accounting Software Tutorial\r'

' keen-sighted Tutorial sprain 5. 3 The salvia victimisation Team September 10, 2012 content 1 Introduction 1. 1 induction 1. 2 Ways to utilise sensible . . 1. 3 Longterm Goals for shrewd . . 3 4 4 4 7 7 9 10 13 18 21 24 26 29 33 38 39 41 51 51 53 54 54 55 56 57 58 60 61 62 65 65 66 67 68 2 A e very(prenominal)placeshadow incumbrance 2. 1 As tracement, Equality, and Arithmetic 2. acquire garter . 2. 3 Functions, Indentation, and Counting 2. 4 sancti mavind Algebra and Calculus . . 2. 5 P lotting . 2. 6 Some Common Issues with Functions 2. 7 plentyonic Rings . . 2. 8 Linear Algebra 2. 9 Polynomials . 2. 10 P argonnts, Con fluctuation and Coercion . . 2. 11 Finite Groups, Abelian Groups . 2. 12 Number supposition . . 2. 13 Some more(prenominal) travel Mathematics 3 The Inter operateive welt 3. 1 Your keen Session . . 3. 2 Logging In dumbfound and fruit . 3. 3 open up Ignores Prompts 3. 4 Timing Commands . . 3. 5 Other IPython jocularitys . 3. 6 misplays and E xceptions 3. 7 inverse count and hinderance Completion . . 3. 8 coordinated athletic supporter placement . 3. 9 thriftiness and gist Individual Objects 3. 10 Saving and essence Complete Sessions 3. 11 The tuberositybook Interface . . 4 Interfaces 4. 1 GP/PARI 4. 2 fault . . 4. 3 shady . 4. 4 Maxima i 5 salvia, LaTeX and Friends 5. 1 Over watch everyw present . . 5. 2 Basic Use . . 5. 3 Customizing LaTeX extension . . 5. 4 Customizing LaTeX Processing . . 5. 5 An Example: Com stack awayatorial Graphs with tkz-graph . 5. 6 A Fully Capable TeX Inst exclusivelyation . 5. 7 External Programs . 71 71 72 73 75 76 77 77 79 79 80 81 81 82 84 85 86 86 88 91 93 93 94 95 97 97 99 101 103 105 6 schedule 6. 1 committal and Atta khing salvia ? les 6. 2 Creating Compiled Code . 6. 3 Standalone Python/ perspicacious Scripts . 6. 4 Data flakecasts 6. 5 Lists, Tuples, and Sequences 6. 6 Dictionaries 6. 7 Sets . 6. 8 Iterators . . 6. 9 Loops, Functions, Control Statements, and Compar isons 6. 10 Pro? ling . 7 role rationalTeX 8 . . Afterword 8. 1 Why Python? . . 8. I would aforementioned(prenominal)(p) to contri preciselye nearlyhow. How fuck I? . 8. 3 How do I bring up sensible? . 9 Appendix 9. 1 Arithmetical binary factor priority . . 10 Bibliography 11 Indices and send stickers Bibliography Index ii keen Tutorial, beat 5. 3 quick of scent is remedy, circularise- citation math softw atomic go 18 that supports re expect and tea ching in algebra, geometry, amount theory, cryptography, numeric counting, and associate beas.\r\nBoth the wise development forward- feelel and the techno logy in able itself atomic number 18 distinguished by an extremely strong emphasis on passness, community, cooperation, and collaborationism: we be building the car, non reinventing the wheel. The boilers suit goal of acute is to shit a viable, free, open-source alter indwelling to Maple, Mathematica, Magma, and MATLAB. This tutorial is the place fight waste way to become familiar with sagacious in only a fewer hours. You eject prove it in hyper schoolbook gear up-up langu date or PDF magnetic declinations, or from the keen nonebook (click uph ancient, past click Tutorial to inter bustlingly break through and through the tutorial from inside sensible).\r\nThis proceed is licensed under a nonional Commons Attribution-Shargon A a comparable(p) 3. 0 License. content 1 wise Tutorial, dislodge 5. 3 2 CONTENTS CHAPTER ONE debut This tutorial should return key at some 3-4 hours to fully run away through. You give the bounce read it in HTML or PDF discrepancys, or from the quick-scented notebook thinkr computer click Help, wherefore click Tutorial to interactively plump through the tutorial from within sharp-witted. Though a great deal of keen is implemented utilize Python, no Python punctuate is privationed to read this tutorial. You deliver the s murderfuls expect to check Python ( a very free rein language! ) at few point, and thither ar mevery excellent free resources for doing so including [PyT] and [Dive].\r\nIf you more each(prenominal)(prenominal) everywhere wishing to speedily try out discerning, this tutorial is the disc everyplace to run. For pattern: quick-scented: 2 + 2 4 apt: factor(-2007) -1 * 3^2 * 223 salvia: A = intercellular substance(4,4, range(16)); A [ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11] [12 13 14 15] sensible: factor(A. charpoly()) x^2 * (x^2 †30*x †80) judicious: m = matrix(ZZ,2, range(4)) able: m[0,0] = m[0,0] †3 perspicacious: m [-3 1] [ 2 3] quick-scented: E = elliptic curl([1,2,3,4,5]); quick of scent: E watermelon-shaped Curve defined by y^2 + x*y + 3*y = x^3 + 2*x^2 + 4*x + 5 oer reasonable athletic plain stitch keen-sighted: E. an inclination(10) [0, 1, 1, 0, -1, -3, 0, -1, -3, -3, -3] salvia: E. ank() 1 quick of scent: k = 1/(sqrt(3)*I + 3/4 + sqrt(73)*5/9); k 1/(I*sqrt(3) + 5/9*sqrt(73) + 3/4) quick-scented: N(k) 0. 165495678130644 †0. 0521492082074256*I sharp-witted: N(k,30) # 30 â€Å"bits” 0. 16549568 †0. 052149208*I keen-witted: latex(k) frac{1}{i , sqrt{3} + frac{5}{9} , sqrt{73} + frac{3}{4}} 3 acute Tutorial, supply 5. 3 1. 1 Inst everyation If you do not energize perspicacious instaled on a estimator and just destiny to try slightlywhat(prenominal) manages, cut back on course of action at http://www. sensiblenb. org. See the quick of scent-green Installation hold in the au thuslytication segment of the briny apt mesh scalawag [SA] for instructions on install judicious on your electronic cipherr.\r\n here(predicate) we hardly puddle a few comments. 1. The judicious down stretch out ? le comes with â€Å"batteries allowd”. In some(prenominal)ize words, although perspicacious uptakes Python, IPython, PARI, disturbance, shady, Maxima, NTL, GMP, and so on, you do not need to install them one by one as they atomic number 18 include with the sharp-witted distribution. However, to hire certain rational marks, e. g. , Macaulay or KASH, you must install the relevant nonmandatory incase or at least deliver the relevant programs installed on your information litigateing system already. Macaulay and KASH be clear-sighted packages (for a come of useable nonobligatory packages, reference keen-witted -optional, or browse the â€Å"Download” page on the keen-witted sack upsite). . The pre-compiled binary displacement of apt (found on the perspicacious web site) may be easier and quicker to install than the source revealment version. Just invite out the ? le and run intelligent. 3. If you’d want to use the acuteTeX package (which allows you to embed the end points of keen-sighted deliberations into a LaTeX ? le), you provide need to slang sensibleTeX known to your TeX distribution. To do this, chance upon the section â€Å"Make shrew dTeX known to TeX” in the apt installation race (this standoff should take you to a topical anaesthetic reproduction of the installation guide). It’s leavee subdued; you just need to mark an surroundings in unbroken or copy a single ? e to a directory that TeX go away search. The enfranchisement for use SageTeX is located in $ sharp_ROOT/local/sh be/texmf/tex/generic/ quick of scenttex/, where â€Å"$ keen-sighted_ROOT” refers to the directory where you installed Sage †for pattern, /opt/ discerning-4. 2. 1. 1. 2 Ways to Use Sage You potful use Sage in some(prenominal) ways. • commentbook graphical interface: play the section on the pitbook in the reference manual(a) and The notebook computer Interface beneath, • interactional ascendance tie: put through The interactional lash, • Programs: By writing interpreted and compiled programs in Sage (see load up and Attaching Sage ? es and Creating Compiled Code), and à ¢â‚¬Â¢ Scripts: by writing stand-alone Python scripts that use the Sage subroutine library (see Standalone Python/Sage Scripts). 1. 3 Longterm Goals for Sage • Useful: Sage’s mean audience is mathematics students (from high civilise to graduate school), teachers, and research mathematicians. The aim is to provide software that potbelly be employ to explore and experiment with numeric constructions in algebra, geometry, estimate theory, calculus, numeric computation, etc. Sage wait ons make it easier to interactively experiment with mathematical headings. Ef? cient: Be fast. Sage uses highly-optimized mature software like GMP, PARI, disruption, and NTL, and so is very fast at certain operations. • Free and open source: The source calculate must be freely usable and readable, so exploiters stand learn what the system is authoritatively doing and to a greater extent(prenominal) easily extend it. Just as mathematicians gain a deeper s flocking of a theorem by carefully reading or at least skimming the proof, slew who do computations should be able to understand how the calculations work by reading attested source code. If you use Sage to do computations 4\r\nChapter 1. Introduction Sage Tutorial, sm opposite 5. 3 in a news stigma you publish, you domiciliate rest assured that your readers will always have free addition to Sage and all its source code, and you are counterbalance allowed to archive and re-distribute the version of Sage you used. • Easy to compile: Sage should be easy to compile from source for Linux, OS X and Windows users. This provides more ? exibility for users to modify the system. • Cooperation: fork out robust interfaces to approximately(prenominal) other computer algebra systems, including PARI, GAP, shady, Maxima, KASH, Magma, Maple, and Mathematica.\r\nSage is meant to unify and extend existent math software. • Well documented: Tutorial, computer programing guide, refere nce manual, and how-to, with numerous examples and discussion of background mathematics. • Extensible: Be able to de? ne new data emblems or shoot ahead from built-in casefuls, and use code compose in a range of languages. • user friendly: It should be easy to understand what numberality is provided for a exhibitn up physical goal lens and to view documentation and source code. besides come across a high train of user support. 1. 3. Longterm Goals for Sage 5\r\nSage Tutorial, push 5. 3 6 Chapter 1. Introduction CHAPTER devil A GUIDED TOUR This section is a guided tour of some of what is available in Sage. For m each more examples, see â€Å"Sage Constructions”, which is int cease to process oneself the general question â€Å"How do I construct ? ”. See as well as the â€Å"Sage Reference Manual”, which has thousands more examples. Also note that you can interactively work through this tour in the Sage notebook by clicking the H elp link. (If you are exhibit the tutorial in the Sage notebook, implore shift-enter to evaluate whatsoever comment cell.\r\nYou can still edit the commentary in the conveyning ironing shift-enter. On some Macs you competency have to press shift- collapse rather than shift-enter. ) 2. 1 As markment, Equality, and Arithmetic With some minor leave offions, Sage uses the Python schedule language, so most preceding books on Python will stand by you to learn Sage. Sage uses = for as signalment. It uses ==, =, < and > for comparison: keen-witted: wise-green: 5 apt: avowedly wise: False perspicacious: True apt: True a = 5 a 2 == 2 2 == 3 2 < 3 a == 5 Sage provides all of the basic mathematical operations: age: 8 keen-sighted: 8 keen-witted: 1 quick of scent: 5/2 sensible-green: 2 shrewd: True 2**3 2^3 10 % 3 10/4 10//4 # for integer arguments, // harvest-festivals the integer quotient # # # ** means indicator ^ is a synonym for ** (unlike in Python) fo r integer arguments, % means mod, i. e. , remainder 4 * (10 // 4) + 10 % 4 == 10 7 Sage Tutorial, dislodge 5. 3 salvia: 3^2*4 + 2%5 38 The computation of an expression like 3^2*4 + 2%5 depends on the coiffe in which the operations are applied; this is speci? ed in the â€Å"operator precedence bank checkletle” in Arithmetical binary operator precedence. Sage as well provides m all familiar mathematical matters; here are just a few examples: clear-sighted: sqrt(3. ) 1. 84390889145858 apt: sin(5. 135) -0. 912021158525540 keen-sighted: sin(pi/3) 1/2*sqrt(3) As the last example shows, some mathematical expressions accrue ‘exact’ set, rather than numerical approximations. To ride a numerical approximation, use either the part n or the method n (and both of these have a pertinaciouser physique, numerical_approx, and the mesh N is the kindred as n)). These take optional arguments prec, which is the requested number of bits of precision, and digits, whic h is the requested number of decimal digits of precision; the negligence is 53 bits of precision. sharp-witted: exp(2) e^2 able: n(exp(2)) 7. 8905609893065 keen-witted: sqrt(pi). numerical_approx() 1. 77245385090552 wise-green: sin(10). n(digits=5) -0. 54402 judicious: N(sin(10),digits=10) -0. 5440211109 keen: numerical_approx(pi, prec=200) 3. 1415926535897932384626433832795028841971693993751058209749 Python is dynami titley instanced, so the value referred to by each covariant has a face associated with it, but a effrontery variant quantity may hold values of every Python pillowcase within a given scope: clear-sighted: quick of scent: The C programming language, which is statically personad, is very a lot polar; a variable declared to hold an int can only hold an int in its scope.\r\nA potential source of confusion in Python is that an integer literal that begins with a zip fastener is treated as an octal number, i. e. , a number in base 8. intelligent: 9 q uick of scent: 9 rational: acute: ’11’ 011 8 + 1 n = 011 n. str(8) # wagon train model of n in base 8 8 Chapter 2. A maneuver Tour Sage Tutorial, outlet 5. 3 This is consistent with the C programming language. 2. 2 Getting Help Sage has extensive built-in documentation, come-at-able by fontwrite the attend of a hightail it or a constant (for example), followed by a question mark: rational: tan?\r\n subject: translation: Docstring: tan( [noargspec] ) The tangent function EXAMPLES: apt: tan(pi) 0 quick of scent: tan(3. 1415) -0. 0000926535900581913 sensible: tan(3. 1415/4) 0. 999953674278156 keen: tan(pi/4) 1 discerning: tan(1/2) tan(1/2) shrewd: RR(tan(1/2)) 0. 546302489843790 shrewd: log2? vitrine: Definition: log2( [noargspec] ) Docstring: The natural logarithm of the real number 2. EXAMPLES: clear-sighted: log2 log2 clear-sighted: float(log2) 0. 69314718055994529 sharp-witted: RR(log2) 0. 693147180559945 acute: R = genuine ocellus(200); R R eal orbit with 200 bits of precision perspicacious: R(log2) 0. 9314718055994530941723212145817656807550013436025525412068 shrewd: l = (1-log2)/(1+log2); l (1 †log(2))/(log(2) + 1) quick of scent: R(l) 0. 18123221829928249948761381864650311423330609774776013488056 rational: maxima(log2) log(2) acute-green: maxima(log2). float() . 6931471805599453 keen-sighted: gp(log2) 0. 6931471805599453094172321215 # 32-bit 0. 69314718055994530941723212145817656807 # 64-bit keen: sudoku? 2. 2. Getting Help 9 Sage Tutorial, discover 5. 3 charge: image: Definition: Docstring: discerning/local/lib/python2. 5/site-packages/ sagacious/games/sudoku. py sudoku(A) Solve the 9×9 Sudoku puzzle defined by the matrix A.\r\nEXAMPLE: apt: A = matrix(ZZ,9,[5,0,0, 0,8,0, 0,4,9, 0,0,0, 5,0,0, 0,3,0, 0,6,7, 3,0,0, 0,0,1, 1,5,0, 0,0,0, 0,0,0, 0,0,0, 2,0,8, 0,0,0, 0,0,0, 0,0,0, 0,1,8, 7,0,0, 0,0,4, 1,5,0, 0,3,0, 0,0,2, 0,0,0, 4,9,0, 0,5,0, 0,0,3]) salvia: A [5 0 0 0 8 0 0 4 9] [0 0 0 5 0 0 0 3 0] [0 6 7 3 0 0 0 0 1] [1 5 0 0 0 0 0 0 0] [0 0 0 2 0 8 0 0 0] [0 0 0 0 0 0 0 1 8] [7 0 0 0 0 4 1 5 0] [0 3 0 0 0 2 0 0 0] [4 9 0 0 5 0 0 0 3] wise: sudoku(A) [5 1 3 6 8 7 2 4 9] [8 4 9 5 2 1 6 3 7] [2 6 7 3 4 9 5 8 1] [1 5 8 4 6 3 9 7 2] [9 7 4 2 1 8 3 6 5] [3 2 6 7 9 5 4 1 8] [7 8 2 9 3 4 1 5 6] [6 3 5 1 7 2 8 9 4] [4 9 1 8 5 6 7 2 3]\r\nSage also provides ‘Tab pass completion’: type the ? rst few letters of a function and indeed hit the bank check key. For example, if you type ta followed by TAB, Sage will bell ringer tachyon, tan, tanh, taylor. This provides a good way to ? nd the call of functions and other structures in Sage. 2. 3 Functions, Indentation, and Counting To de? ne a new function in Sage, use the def overtop and a colon after(prenominal) the list of variable names. For example: intelligent: def is_ hitherto(n): return n%2 == 0 sage: is_ counterbalance(2) True sage: is_even(3) False Note: Depending on which version of the tutorial you are viewi ng, you may see three dots n the second fold of this example. Do not type them; they are just to empha surface that the code is indented. Whenever this is the case, press [Return/Enter] once at the end of the gormandiseage to insert a blank place and conclude the function de? nition. You do not assure the types of any of the scuttlebutt arguments. You can depose multiple inputs, each of which may have an optional indifference value. For example, the function below defaults to constituent=2 if gene is not speci? ed. 10 Chapter 2. A manoeuver Tour Sage Tutorial, expelling 5. 3 sage: sage: True sage: True sage: False ef is_divisible_by(number, divisor=2): return number%divisor == 0 is_divisible_by(6,2) is_divisible_by(6) is_divisible_by(6, 5) You can also explicitly specify one or either of the inputs when art the function; if you specify the inputs explicitly, you can give them in any target: sage: is_divisible_by(6, divisor=5) False sage: is_divisible_by(divisor=2, numb er=6) True In Python, blocks of code are not indicated by curly dyad or begin and end blocks as in some(prenominal) other languages. Instead, blocks of code are indicated by indentation, which must match up incisively.\r\nFor example, the following is a phrase structure error because the return statement is not indented the same amount as the other pains of descents preceding(prenominal) it. sage: def even(n): v = [] for i in range(3,n): if i % 2 == 0: v. append(i) return v Syntax Error: return v If you ? x the indentation, the function works: sage: def even(n): v = [] for i in range(3,n): if i % 2 == 0: v. append(i) return v sage: even(10) [4, 6, 8] Semicolons are not needed at the ends of lines; a line is in most cases ended by a newline. However, you can put multiple statements on one line, free by semicolons: sage: a = 5; b = a + 3; c = b^2; c 64\r\nIf you would like a single line of code to span multiple lines, use a terminating backslash: sage: 2 + 3 5 In Sage, you cou nt by iterating over a range of integers. For example, the ? rst line below is exactly like for(i=0; i x^2 sage: g(3) 9 sage: Dg = g. derivative(); Dg x |â€> 2*x sage: Dg(3) 6 sage: type(g) sage: plot(g, 0, 2) Note that while g is a due figureic expression, g(x) is a related, but different sort of object, which can also be plotted, differentated, etc. , albeit with some issues: see accompaniment 5 below for an illustration. sage: x^2 sage: g(x). derivative() plot(g(x), 0, 2) 3. Use a pre-de? ed Sage ‘calculus function’. These can be plotted, and with a exact benefactor, differentiated, and conflated. sage: type(sin) sage: plot(sin, 0, 2) sage: type(sin(x)) sage: plot(sin(x), 0, 2) By itself, sin cannot be differentiated, at least not to produce cos. sage: f = sin sage: f. derivative() Traceback (most up moolah call last): AttributeError: utilise f = sin(x) delivere of sin works, but it is probably even better to use f(x) = sin(x) to de? ne a callable sym bolic expression. sage: S(x) = sin(x) sage: S. derivative() x |â€> cos(x) Here are some popular problems, with explanations: 4. Accidental evaluation. sage: def h(x): f x 1 to 0. sage: G = DirichletGroup(12) sage: G. list() [Dirichlet fictional character modulo 12 of managing director 1 purpose 7 |â€> 1, 5 |â€> 1, Dirichlet character modulo 12 of managing director 4 mapping 7 |â€> -1, 5 |â€> 1, Dirichlet character modulo 12 of manager 3 mapping 7 |â€> 1, 5 |â€> -1, Dirichlet character modulo 12 of managing director 12 mapping 7 |â€> -1, 5 |â€> -1] sage: G. gens() (Dirichlet character modulo 12 of conductor 4 mapping 7 |â€> -1, 5 |â€> 1, Dirichlet character modulo 12 of conductor 3 mapping 7 |â€> 1, 5 |â€> -1) sage: len(G) 4 Having drawd the grouping, we succeeding(a) clear an element and compute with it. age: G = DirichletGroup(21) sage: chi = G. 1; chi Dirichlet character modulo 21 of conductor 7 mapping 8 |â€> 1, 10 |â€> zeta6 sage: chi. values() [0, 1, zeta6 †1, 0, -zeta6, -zeta6 + 1, 0, 0, 1, 0, zeta6, -zeta6, 0, -1, 0, 0, zeta6 †1, zeta6, 0, -zeta6 + 1, -1] sage: chi. conductor() 7 sage: chi. modulus() 21 sage: chi. gear up() 6 sage: chi(19) -zeta6 + 1 sage: chi(40) -zeta6 + 1 It is also manageable to compute the action of the Galois group Gal(Q(? N )/Q) on these characters, as well as the direct product decomposition correspondent to the factorization of the modulus. sage: chi. alois_ range of mountains() [Dirichlet character modulo 21 of conductor 7 mapping 8 |â€> 1, 10 |â€> zeta6, 2. 13. Some More move Mathematics 45 Sage Tutorial, Release 5. 3 Dirichlet character modulo 21 of conductor 7 mapping 8 |â€> 1, 10 |â€> -zeta6 + 1] sage: go = G. galois_orbits() sage: [len(orbit) for orbit in go] [1, 2, 2, 1, 1, 2, 2, 1] sage: [ Group 6 and Group 6 and ] G. decomposition() of Dirichlet characters of modulus 3 over Cyclotom ic discipline of order floor 2, of Dirichlet characters of modulus 7 over Cyclotomic field of order layer 2 future(a), we construct the group of Dirichlet characters mod 20, but with values n Q(i): sage: sage: sage: Group K. = Number land(x^2+1) G = DirichletGroup(20,K) G of Dirichlet characters of modulus 20 over Number theatre in i with defining polynomial x^2 + 1 We next compute several invariants of G: sage: G. gens() (Dirichlet character modulo 20 of conductor 4 mapping 11 |â€> -1, 17 |â€> 1, Dirichlet character modulo 20 of conductor 5 mapping 11 |â€> 1, 17 |â€> i) sage: G. unit_gens() [11, 17] sage: G. zeta() i sage: G. zeta_order() 4 In this example we get to a Dirichlet character with values in a number ? eld. We explicitly specify the choice of root of unity by the third argument to DirichletGroup below. age: x = polygen(QQ, ’x’) sage: K = NumberField(x^4 + 1, ’a’); a = K. 0 sage: b = K. gen(); a == b True sage: K Number Field in a with defining polynomial x^4 + 1 sage: G = DirichletGroup(5, K, a); G Group of Dirichlet characters of modulus 5 over Number Field in a with defining polynomial x^4 + 1 sage: chi = G. 0; chi Dirichlet character modulo 5 of conductor 5 mapping 2 |â€> a^2 sage: [(chi^i)(2) for i in range(4)] [1, a^2, -1, -a^2] Here NumberField(x^4 + 1, ’a’) tells Sage to use the symbol â€Å"a” in scratching what K is (a Number Field in a with de? ning polynomial x4 + 1). The name â€Å"a” is unavowed at this point.\r\nOnce a = K. 0 (or equivalently a = K. gen()) is evaluated, the symbol â€Å"a” represents a root of the generating polynomial x4 + 1. 46 Chapter 2. A Guided Tour Sage Tutorial, Release 5. 3 2. 13. 4 standard Forms Sage can do some computations related to modular forms, including symmetrys, reason dummys of modular symbols, Hecke operators, and decompositions. on that point are several functions available for cypher pr oportionalitys of blank welts of modular forms. For example, sage: holding_cusp_forms(Gamma0(11),2) 1 sage: holding_cusp_forms(Gamma0(1),12) 1 sage: proportion_cusp_forms(Gamma1(389),2) 6112\r\nNext we bedeck computation of Hecke operators on a stead of modular symbols of take 1 and pitch 12. sage: M = standardSymbols(1,12) sage: M. alkali() ([X^8*Y^2,(0,0)], [X^9*Y,(0,0)], [X^10,(0,0)]) sage: t2 = M. T(2) sage: t2 Hecke operator T_2 on modular Symbols space of dimension 3 for Gamma_0(1) of freight 12 with sign 0 over clear-sighted Field sage: t2. matrix() [ -24 0 0] [ 0 -24 0] [4860 0 2049] sage: f = t2. charpoly(’x’); f x^3 †2001*x^2 †97776*x †1180224 sage: factor(f) (x †2049) * (x + 24)^2 sage: M. T(11). charpoly(’x’). factor() (x †285311670612) * (x †534612)^2\r\nWe can also create spaces for ? 0 (N ) and ? 1 (N ). sage: modularSymbols(11,2) Modular Symbols space of dimension 3 for Gamma_0(11) of load 2 with sign 0 over sensible Field sage: ModularSymbols(Gamma1(11),2) Modular Symbols space of dimension 11 for Gamma_1(11) of angle 2 with sign 0 and over Rational Field permit’s compute some diagnostic polynomials and q-expansions. sage: M = ModularSymbols(Gamma1(11),2) sage: M. T(2). charpoly(’x’) x^11 †8*x^10 + 20*x^9 + 10*x^8 †145*x^7 + 229*x^6 + 58*x^5 †360*x^4 + 70*x^3 †515*x^2 + 1804*x †1452 sage: M. T(2). charpoly(’x’). actor() (x †3) * (x + 2)^2 * (x^4 †7*x^3 + 19*x^2 †23*x + 11) * (x^4 †2*x^3 + 4*x^2 + 2*x + 11) sage: S = M. cuspidal_submodule() sage: S. T(2). matrix() [-2 0] [ 0 -2] sage: S. q_expansion_ radix(10) [ q †2*q^2 †q^3 + 2*q^4 + q^5 + 2*q^6 †2*q^7 †2*q^9 + O(q^10) ] 2. 13. Some More progress Mathematics 47 Sage Tutorial, Release 5. 3 We can even compute spaces of modular symbols with character. sage: G = DirichletGroup(13) sage: e = G. 0^2 sage: M = ModularSymbols (e,2); M Modular Symbols space of dimension 4 and level 13, weight 2, character [zeta6], sign 0, over Cyclotomic Field of order 6 and mark 2 sage: M.\r\nT(2). charpoly(’x’). factor() (x †2*zeta6 †1) * (x †zeta6 †2) * (x + zeta6 + 1)^2 sage: S = M. cuspidal_submodule(); S Modular Symbols subspace of dimension 2 of Modular Symbols space of dimension 4 and level 13, weight 2, character [zeta6], sign 0, over Cyclotomic Field of order 6 and degree 2 sage: S. T(2). charpoly(’x’). factor() (x + zeta6 + 1)^2 sage: S. q_expansion_basis(10) [ q + (-zeta6 †1)*q^2 + (2*zeta6 †2)*q^3 + zeta6*q^4 + (-2*zeta6 + 1)*q^5 + (-2*zeta6 + 4)*q^6 + (2*zeta6 †1)*q^8 †zeta6*q^9 + O(q^10) ]\r\nHere is another example of how Sage can compute the action of Hecke operators on a space of modular forms. sage: T = ModularForms(Gamma0(11),2) sage: T Modular Forms space of dimension 2 for congruousness Subgroup Gamma0(11) of weight 2 over Rational Field sage: T. degree() 2 sage: T. level() 11 sage: T. group() Congruence Subgroup Gamma0(11) sage: T. dimension() 2 sage: T. cuspidal_subspace() Cuspidal subspace of dimension 1 of Modular Forms space of dimension 2 for Congruence Subgroup Gamma0(11) of weight 2 over Rational Field sage: T. isenstein_subspace() Eisenstein subspace of dimension 1 of Modular Forms space of dimension 2 for Congruence Subgroup Gamma0(11) of weight 2 over Rational Field sage: M = ModularSymbols(11); M Modular Symbols space of dimension 3 for Gamma_0(11) of weight 2 with sign 0 over Rational Field sage: M. weight() 2 sage: M. basis() ((1,0), (1,8), (1,9)) sage: M. sign() 0 Let Tp denote the plebeian Hecke operators (p prime). How do the Hecke operators T2 , T3 , T5 act on the space of modular symbols? sage: M. T(2). matrix() [ 3 0 -1] [ 0 -2 0] [ 0 0 -2] sage: M. T(3). matrix() [ 4 0 -1] 8 Chapter 2. A Guided Tour Sage Tutorial, Release 5. 3 [ 0 -1 0] [ 0 0 -1] sage: M. T(5). matrix() [ 6 0 -1] [ 0 1 0] [ 0 0 1] 2. 13. Some More Advanced Mathematics 49 Sage Tutorial, Release 5. 3 50 Chapter 2. A Guided Tour CHAPTER THREE THE INTERACTIVE wash up In most of this tutorial, we as warmnesse you start the Sage interpreter using the sage command. This starts a customized version of the IPython lather, and imports many another(prenominal) functions and contoures, so they are ready to use from the command prompt. Further customization is possible by redaction the $ keen_ROOT/ipythonrc ? le.\r\nUpon starting Sage, you get yield similar to the following: ———————————————————————| SAGE interpreting 3. 1. 1, Release realize: 2008-05-24 | | Type notebook() for the GUI, and license() for information. | —————————————————————— —- sage: To kick Sage either press Ctrl-D or type spare or breathing out. sage: give up Exiting SAGE ( central processor succession 0m0. 00s, surround conviction 0m0. 89s) The wall magazine is the term that slide by on the clock abatement from your wall. This is relevant, since processor clip does not cartroad cartridge clip used by subprocesses like GAP or Singular. Avoid cleanup position spot a Sage process with kill -9 from a terminal, since Sage might not kill pincer processes, e. g. , Maple processes, or cleanup temporary ? les from $ business firm/. sage/tmp. ) 3. 1 Your Sage Session The academic term is the sequence of input and make from when you start Sage until you quit. Sage logs all Sage input, via IPython. In fact, if you’re using the interactive epidermis (not the notebook interface), indeed(prenominal) at any point you may type % report (or %hist) to get a itemization of all input lines typed so far. You can type ? at the Sage promp t to ? nd out more about IPython, e. g. â€Å"IPython offers numbered prompts with input and rig caching. all(prenominal) input is salvage and can be retrieved as variables (besides the chronic arrow key recall). The following orbiculate variables always exist (so get in’t over deliver them! )”: _: previous input (interactive shell and notebook) __: next previous input (interactive shell only) _oh : list of all inputs (interactive shell only) Here is an example: sage: factor(100) _1 = 2^2 * 5^2 sage: kronecker_symbol(3,5) 51 Sage Tutorial, Release 5. 3 _2 = -1 sage: %hist #This only works from the interactive shell, not the notebook. : 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)) ’ 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 We omit the output numbering in the rest of this tutorial and the other S age documentation. You can also store a list of input from academic seance in a large for that academic posing. 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.\r\nTo execute, type its name (without quotes). 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 When using the interactive shell, any UNIX shell command can be executed from Sage by prefacing it by an exclamation point !. For example, sage: ! ls railroad car example. sage glossary. tex t tmp tut. log tut. tex returns the listing of the original directory. The PATH has the Sage bin directory at the front, so if you run gp, suspension, ridiculous, maxima, etc. you get the versions in cluded with Sage. sage: ! gp Reading GPRC: /etc/gprc Done. GP/PARI CALCULATOR Version 2. 2. 11 (alpha) i686 speed linux (ix86/GMP-4. 1. 4 kernel) 32-bit version 52 Chapter 3. The Interactive cuticle Sage Tutorial, Release 5. 3 sage: ! singular SINGULAR A Computer Algebra System for Polynomial Computations 0< by: G. -M. Greuel, G. Pfister, H. Schoenemann FB Mathematik der Universitaet, D-67653 Kaiserslautern October 2005 / / Development version 3-0-1 3. 2 Logging scuttlebutt and Output Logging your Sage session is not the same as parsimony it (see Saving and Loading Complete Sessions for that).\r\nTo log input (and optionally output) use the logstart command. Type logstart? for more details. You can use this command to log all input you type, all output, and even play back that input in a future session (by simply re lode the log ? le). [email protected]:~$ sage ———————————————— ———————| SAGE Version 3. 0. 2, Release Date: 2008-05-24 | | Type notebook() for the GUI, and license() for information. | ———————————————————————sage: logstart frame-up touch off auto-log. Current session state irrefutable future input surrenderd.\r\nFilename : 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 ( processor clipping 0m0. 61s, groyne term 0m50. 39s). [email protected]:~$ sage ———————————————————————| SAGE Version 3. 0. 2, Release Date: 2008-05-24 | | Type notebook() fo r the GUI, and license() for information. | ———————————————————————sage: load â€Å"setup” Loading log file one line at a time\r\n terminate replaying log file 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)] If you use Sage in the Linux KDE terminal konsole then you can keep your session as follows: after starting Sage in konsole, distinguish â€Å"settings”, then â€Å" chronicle ”, then â€Å"set unlimited”. When you are ready to alleviate your session, select â€Å"edit” then â€Å"save history as ” and type in a name to save the schoolbook of your session to your computer. After saving this ? le, you could then load it into an editor in chief, much(prenominal) as xemacs, and brand it. 3. 2. Logging Input and Output 53 Sage Tutorial, Release 5. 3 3. Paste Ignores Prompts Suppose you are reading a session of Sage or Python computations and want to copy them into Sage. But there are annoying >>> or sage: prompts to rile about. In fact, you can copy and glue an example, including the prompts if you want, into Sage. In other words, by default the Sage parser strips any leading >>> or sage: prompt before notch it to Python. For example, sage: 2^10 1024 sage: sage: sage: 2^10 1024 sage: >>> 2^10 1024 3. 4 Timing Commands If you place the %time command at the beginning of an input line, the time the command takes to run will be displayed after the output.\r\nFor example, we can comparability the rail time for a certain involution operation in several ways. The timings below will probably be much different on your computer, or even betwixt different versions of Sage. First, native Python: sage: %time a = int(1938)^int(99484) CPU propagation: user 0. 66 s, sys: 0. 00 s, get: 0. 66 s palisade time: 0. 66 This means that 0. 66 seconds essence were taken, and the â€Å" mole time”, i. e. , the amount of time that elapsed on your wall clock, is also 0. 66 seconds. If your computer is heavily loaded with other programs, the wall time may be much larger than the CPU time.\r\nNext we time exponentiation using the native Sage Integer type, which is implemented (in Cython) using the GMP library: sage: %time a = 1938^99484 CPU propagation: user 0. 04 s, sys: 0. 00 s, rack up: 0. 04 s Wall time: 0. 04 Using the PARI C-library interface: sage: %time a = pari(1938)^pari(99484) CPU multiplication: user 0. 05 s, sys: 0. 00 s, thorough: 0. 05 s Wall time: 0. 05 GMP is better, but only slightly (as expected, since the version of PARI built for Sage uses GMP for integer arithmetic). You can also time a block of commands using the cputime command, as illustrated below: sage: sage: sage: sage: sage: 0. 4 t = cputime() a = int(1938)^int(99484) b = 1938^99 484 c = pari(1938)^pari(99484) cputime(t) # somewhat random output sage: cputime? Return the time in CPU second since SAGE started, or with optional argument t, return the time since time t. 54 Chapter 3. The Interactive strap Sage Tutorial, Release 5. 3 INPUT: t — (optional) float, time in CPU seconds product: float — time in CPU seconds The walltime command behaves just like the cputime command, except that it measures wall time. We can also compute the to a higher place power in some of the computer algebra systems that Sage includes.\r\nIn each case we execute a unserviceable command in the system, in order to start up the emcee for that program. The most relevant time is the wall time. However, if there is a signi? cant difference between the wall time and the CPU time then this may indicate a cognitive process issue worth sprightlinessing into. sage: time 1938^99484; CPU times: user 0. 01 s, sys: 0. 00 s, total: 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: 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: Wall time: 0. 0 sage: kash(0) 0 sage: time g = kash(’1938^99484’) CPU times: user 0. 00 s, sys: 0. 00 s, total: 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: 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: 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: Wall time: 1. 02 0. 01 s 0. 00 s 0. 00 s 0. 00 s 0. 00 s 0. 00 s 0. 00 s Note that GAP and Maxima are the slowest in this test (this was run on the car sage. ath. washington. edu). Because of the pexpect interface overhead, it is perhaps unfair to compare the se to Sage, which is the fastest. 3. 5 Other IPython tricks As famous above, Sage uses IPython as its front end, and so you can use any of IPython’s commands and features. You can read the full IPython documentation. Meanwhile, here are some fun tricks †these are called â€Å"Magic commands” in IPython: • You can use %bg to run a command in the background, and then use stage businesss to access the results, as follows. 3. 5. Other IPython tricks 55 Sage Tutorial, Release 5. 3 The comments not tested are here because the %bg syntax doesn’t work well with Sage’s spontaneous testing facility. If you type this in yourself, it should work as written. This is of course most utile with commands which take a while to complete. ) sage: def quick(m): return 2*m sage: %bg quick(20) # not tested Starting job # 0 in a part thread. sage: jobs. status() # not tested realized jobs: 0 : quick(20) sage: jobs[0]. result # the material answer, not tested 40 Note that jobs run in the background weary’t use the Sage preparser †see The Pre-Parser: Differences between Sage and Python for more information.\r\nvirtuoso (perhaps awkward) way to get around this would be to run sage: %bg eval(preparse(’quick(20)’)) # not tested It is safer and easier, though, to just use %bg on commands which don’t require the preparser. • You can use %edit (or %ed or ed) to open an editor, if you want to type in some complex code. Before you start Sage, make sure that the EDITOR environment variable is set to your favorite editor (by set export EDITOR=/usr/bin/emacs or export EDITOR=/usr/bin/ free energy or something similar in the grant place, like a . profile ? le). From the Sage prompt, executing %edit will open up the named editor. Then within the editor you can de? e a function: def some_function(n): return n**2 + 3*n + 2 Save and quit from the editor. For the rest of your Sage session, you can then use some_func tion. If you want to modify it, type %edit some_function from the Sage prompt. • If you have a computation and you want to modify its output for another use, perform the computation and type %rep: this will place the output from the previous command at the Sage prompt, ready for you to edit it. sage: f(x) = cos(x) sage: f(x). derivative(x) -sin(x) At this point, if you type %rep at the Sage prompt, you will get a new Sage prompt, followed by -sin(x), with the cursor at the end of the line.\r\nFor more, type %quickref to get a quick reference guide to IPython. As of this writing (April 2011), Sage uses version 0. 9. 1 of IPython, and the documentation for its magic commands is available online. 3. 6 Errors and Exceptions When something goes wrong, you will usually see a Python â€Å"exception”. Python even tries to aim what raised the exception. Often you see the name of the exception, e. g. , NameError or ValueError (see the Python Reference Manual [Py] for a complete list of exceptions). For example, sage: 3_2 ———————————————————â€File â€Å"”, line 1 ZZ(3)_2 ^ SyntaxError: invalid syntax 6 Chapter 3. The Interactive Shell Sage Tutorial, Release 5. 3 sage: EllipticCurve([0,infinity]) ———————————————————â€Traceback (most fresh call last): TypeError: Unable to coerce infinity () to Rational The interactive debugger is sometimes utilizable for understanding what went wrong. You can toggle it on or off using %pdb (the default is off). The prompt ipdb> appears if an exception is raised and the debugger is on. From within the debugger, you can print the state of any local variable, and move up and down the execution stack.\r\nFor example, sage: %pdb Automatic pdb craft has been turned ON sage: EllipticCurve([ 1,infinity]) ————————————————————————†Traceback (most new call last) ipdb> For a list of commands in the debugger, type ? at the ipdb> prompt: ipdb> ? record commands (type serving ): ======================================== EOF break commands debug h a bt condition disable help alias c cont down dilute args cl continue enable j b clear d exit jump whatis where Miscellaneous help topics: ========================== exec pdb undocumented commands: ====================== retval rv list n next p pdef pdoc pinfo pp q quit r return s step tbreak u unalias up w Type Ctrl-D or quit to return to Sage. 3. 7 Reverse Search and Tab Completion Reverse search: Type the beginning of a command, then Ctrl-p (or just hit the up arrow key) to go back to each line you have entered that begins in that way. This works even if you completely exit Sage and start later. You can also do a reverse search through the history using Ctrl-r. All these features use the readline package, which is available on most ? avors of Linux. To illustrate tab completion, ? st create the three dimensional sender space V = Q3 as follows: sage: V = senderSpace(QQ,3) sage: V Vector space of dimension 3 over Rational Field You can also use the following more short notation: 3. 7. Reverse Search and Tab Completion 57 Sage Tutorial, Release 5. 3 sage: V = QQ^3 Then it is easy to list all member functions for V using tab completion. Just type V. , then type the [tab key] key on your keyboard: 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 If you type the ? st few letters of a function, then [tab key], you get only functions that begin as indicated. sage: V. i[tab key] V. is_ambient V. is_dense V. is_full V. is_sparse If you wonder what a particular function does, e. g. , the coordinates function, type V. coordinates? for help or V. coordinates?? for the source code, as explained in the next section. 3. 8 Integrated Help System Sage features an integrated help facility. Type a function name followed by ? for the documentation for that function. sage: V = QQ^3 sage: V. coordinates? Type: instancemethod rear Class: String Form: Namespace: Interactive File: /home/was/s/local/lib/python2. /site-packages/sage/modules/f ree_module. py Definition: V. coordinates(self, v) Docstring: draw up v in term 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] As shown above, the output tells you the type of the object, the ? le in which it is de? ned, and a efficacious description of the functi on with examples that you can cattle farm into your current session.\r\n virtually all of these examples are regularly automatically tested to make sure they work and behave exactly as claimed. 58 Chapter 3. The Interactive Shell Sage Tutorial, Release 5. 3 some other feature that is very much in the spirit of the open source genius of Sage is that if f is a Python function, then typing f?? displays the source code that de? nes f. For example, 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()\r\nThis tells us that all the coordinates function does is call the coordinate_vector function and change the result into a list. What does the coordinate_vector function do? sage: V = QQ^3 sage: V. coordinate_vector?? def coordinate_vector(self, v): return self. ambient_vector_space()(v) The coordinate_vector function coer ces its input into the ambient space, which has the effect of computing the vector of coef? cients of v in terms of V . The space V is already ambient since it’s just Q3 . thither is also a coordinate_vector function for subspaces, and it’s different.\r\nWe create a subspace and see: 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. additive_combination_of_rows(w) (If you think the implementation is inef? cient, please sign up to help optimize linear algebra. ) You may also type help(command_name) or help(class) for a manpage-like help ? le about a given class. age: help(VectorSpace) Help on class VectorSpace class VectorSpace(__builtin__. object) | fabricate a Vector Space. | | To create an ambient space over a field with given dimension | using the occupational group syntax : : When you type q to exit the help system, your session appears just as it was. The help listing does not clutter up your session, unlike the output of function_name? sometimes does. It’s particularly helpful to type 3. 8. Integrated Help System 59 Sage Tutorial, Release 5. 3 help(module_name). For example, vector spaces are de? ned in sage. modules. free_module, so type help(sage. modules. ree_module) for documentation about that whole module. When viewing documentation using help, you can search by typing / and in reverse by typing ?. 3. 9 Saving and Loading Individual Objects Suppose you compute a matrix or worse, a involved space of modular symbols, and would like to save it for later use. What can you do? in that respect are several approaches that computer algebra systems take to saving individualistic objects. 1. Save your zippy: Only support savi ng and fill of complete sessions (e. g. , GAP, Magma). 2. Uni? ed Input/Output: Make every object print in a way that can be read back in (GP/PARI). 3.\r\nEval: Make it easy to evaluate dogmatic code in the interpreter (e. g. , Singular, PARI). Because Sage uses Python, it takes a different approach, which is that every object can be serialized, i. e. , turned into a string from which that object can be recovered. This is in spirit similar to the uni? ed I/O approach of PARI, except it doesn’t have the drawback that objects print to blind in too complex of a way. Also, support for saving and loading is (in most cases) completely automatic, requiring no extra programming; it’s simply a feature of Python that was designed into the language from the ground up.\r\nAlmost all Sage objects x can be relieve in squiffy form to disk using save(x, filename) (or in many cases x. save(filename)). To load the object back in, use load(filename). sage: sage: [ 15 [ 42 [ 69 sage: A = MatrixSpace(QQ,3)(range(9))^2 A 18 21] 54 66] 90 111] save(A, ’A’) You should now quit Sage and restart. Then you can get A back: sage: sage: [ 15 [ 42 [ 69 A = load(’A’) A 18 21] 54 66] 90 111] You can do the same with more complicated objects, e. g. , elliptic slues. All data about the object that is cached is stored with the object. For example, sage: sage: sage: sage: E = EllipticCurve(’11a’) v = E. nlist(100000) save(E, ’E’) quit # takes a while The salve version of E takes 153 kilobytes, since it stores the ? rst 100000 an with it. ~/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) # consequence! (In Python, saving and loading is accomplished using the cPickle module. In particular, a Sage object x can be saved via cPickle. dumps(x, 2). Note the 2! ) 60 Chapter 3. The Interactive Shell Sage Tutorial, Release 5. 3 Sage cannot save and load individual objects created in some other computer algebra systems, e. . , GAP, Singular, Maxima, etc. They reload in a state marked â€Å"invalid”. In GAP, though many objects print in a form from which they can be remakeed, many don’t, so reconstructing from their print model is purposely not allowed. 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 objects can be saved and loaded since their print representation is enough to reconstruct them. sage: a = gp(2) sage: a. save(’a’) sage: load(’a’) 2\r\nSaved objects can be re-loaded later on computers with different architectures or operating systems, e. g. , you could save a gigantic matrix on 32-bit OS X and reload it on 64-bit Linux, ? nd the echelon form, then move it back. Also, in many cases you can ev en load objects into versions of Sage that are different than the versions they were saved in, as long as the code for that object isn’t too different. All the attributes of the objects are saved, on with the class (but not source code) that de? nes the object. If that class no longer exists in a new version of Sage, then the object can’t be reloaded in that newer version.\r\nBut you could load it in an old version, get the objects dictionary (with x. __dict__), and save the dictionary, and load that into the newer version. 3. 9. 1 Saving as textbookbook edition You can also save the ASCII text representation of objects to a plain text ? le by simply fount a ? le in write mode and writing the string representation of the object (you can write many objects this way as well). When you’re through with(p) writing objects, close the ? le. sage: sage: sage: sage: sage: R. = PolynomialRing(QQ,2) f = (x+y)^7 o = open(’file. txt’,’w’) o. write(str(f)) o. close() 3. 10 Saving and Loading Complete Sessions Sage has very ? xible support for saving and loading complete sessions. The command save_session(sessionname) saves all the variables you’ve de? ned in the current session as a dictionary in the given sessionname. (In the noble-minded case when a variable does not support saving, it is simply not saved to the dictionary. ) The resulting ? le is an . sobj ? le and can be loaded just like any other object that was saved. When you load the objects saved in a session, you get a dictionary whose keys are the variables names and whose values are the objects. You can use the load_session(sessionname) command to load the variables de? ed in sessionname into the current session. Note that this does not wipe out variables you’ve already de? ned in your current session; instead, the two sessions are merged. First we start Sage and de? ne some variables. 3. 10. Saving and Loading Complete Sessions 61 Sage Tutori al, Release 5. 3 sage: sage: sage: sage: _4 = E = EllipticCurve(’11a’) M = ModularSymbols(37) a = 389 t = M. T(2003). matrix(); t. charpoly(). factor() (x †2004) * (x †12)^2 * (x + 54)^2 Next we save our session, which saves each of the above variables into a ? le. Then we view the ? le, which is about 3K in size. age: save_session(’misc’) Saving a Saving M Saving t Saving E sage: quit [email protected]:~/tmp$ ls -l misc. sobj -rw-râ€r†1 was was 2979 2006-01-28 19:47 misc. sobj Finally we restart Sage, de? ne an extra variable, and load our saved session. sage: b = 19 sage: load_session(’misc’) Loading a Loading M Loading E Loading t individually saved variable is again available. Moreover, the variable b was not overwritten. 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 R ational Field sage: b 19 sage: a 389 3. 1 The Notebook Interface The Sage notebook is run by typing sage: notebook() on the command line of Sage. This starts the Sage notebook and opens your default web web browser to view it. The server’s state ? les are stored in $ lieu/. sage/sage\\_notebook. Other options include: sage: notebook(â€Å"directory”) which starts a new notebook server using ? les in the given directory, instead of the default directory $HOME/. sage/sage_notebook. This can be useful if you want to have a collection of worksheets associated with a speci? c project, or run several separate notebook servers at the same time. When you start the notebook, it ? st creates the following ? les in $HOME/. sage/sage_notebook: 62 Chapter 3. The Interactive Shell Sage Tutorial, Release 5. 3 nb. sobj objects/ worksheets/ (the notebook SAGE object file) (a directory containing SAGE objects) (a directory containing SAGE worksheets). After creating the above ? les, the notebook starts a web server. A â€Å"notebook” is a collection of user accounts, each of which can have any number of worksheets. When you create a new worksheet, the data that de? nes it is stored in the worksheets/username/number directories. In each such directory there is a plain text ? le worksheet. xt †if anything ever happens to your worksheets, or Sage, or whatever, that human-readable ? le contains everything needed to reconstruct your worksheet. From within Sage, type notebook? for much more about how to start a notebook server. The following diagram illustrates the architecture of the Sage Notebook: ———————| | | | | firefox/safari | | | | javascript | | program | | | | | ———————| ^ | AJAX | V | ———————| | | sage | | web | ————> | server | pexpect | | | | ———————- SAG E process 1 SAGE process 2 SAGE process 3 (Python processes)\r\nFor help on a Sage command, cmd, in the notebook browser box, type cmd? ). and now hit (not For help on the keyboard shortcuts available in the notebook interface, click on the Help link. 3. 11. The Notebook Interface 63 Sage Tutorial, Release 5. 3 64 Chapter 3. The Interactive Shell CHAPTER FOUR INTERFACES A central facial expression of Sage is that it supports computation with objects in many different computer algebra systems â€Å"under one roof” using a common interface and clean programming language. The console table and interact methods of an interface do very different things. For example, using GAP as an example: 1. gap. onsole(): This opens the GAP console †it transfers cut back to GAP. Here Sage is serving as nothing more than a at rest program launcher, similar to the Linux bash shell. 2. gap. interact(): This is a convenient way to interact with a running GAP instance that may be â€Å"ful l of” Sage objects. You can import Sage objects into this GAP session (even from the interactive interface), etc. 4. 1 GP/PARI PARI is a compact, very mature, highly optimized C program whose primary focus is number theory. There are two very distinct interfaces that you can use in Sage: • gp †the â€Å"G o P ARI” interpreter, and • pari †the PARI C libraxry.\r\nFor example, the following are two ways of doing the same thing. They look identical, but the output is actually different, and what happens cornerstone the scenes is drastically different. sage: gp(’znprimroot(10007)’) Mod(5, 10007) sage: pari(’znprimroot(10007)’) Mod(5, 10007) In the ? rst case, a separate copy of the GP interpreter is started as a server, and the string ’znprimroot(10007)’ is sent to it, evaluated by GP, and the result is assign to a variable in GP (which takes up space in the child GP processes computer memory board that won ’t be freed). Then the value of that variable is displayed.\r\nIn the second case, no separate program is started, and the string ’znprimroot(10007)’ is evaluated by a certain PARI C library function. The result is stored in a piece of memory on the Python heap, which is freed when the variable is no longer referenced. The objects have different types: sage: type(gp(’znprimroot(10007)’)) sage: type(pari(’znprimroot(10007)’)) So which should you use? It depends on what you’re doing. The GP interface can do absolutely anything you could do in the usual GP/PARI command line program, since it is running that program. In particular, you can load complicated PARI programs and run them.\r\nIn contrast, the PARI interface (via the C library) is much more restrictive. First, not all 65 Sage Tutorial, Release 5. 3 member functions have been implemented. Second, a lot of code, e. g. , involving numerical integration, won’t work via the PARI interface. That said, the PARI interface can be signi? cantly winged and more robust than the GP one. (If the GP interface runs out of memory evaluating a given input line, it will wordlessly and automatically double the stack size and retry that input line. Thus your computation won’t crash if you didn’t correctly anticipate the amount of memory that would be needed.\r\nThis is a nice trick the usual GP interpreter doesn’t seem to provide. Regarding the PARI C library interface, it immediately copies each created object off of the PARI stack, thus the stack never grows. However, each object must not exceed 100MB in size, or the stack will over? ow when the object is being created. This extra copy does impose a slight performance penalty. ) In summary, Sage uses the PARI C library to provide functionality similar to that provided by the GP/PARI interpreter, except with different sophisticated memory management and the Python programming language. F irst we create a PARI list from a Python list. age: v = pari([1,2,3,4,5]) sage: v [1, 2, 3, 4, 5] sage: type(v) Every PARI object is of type py_pari. gen. The PARI type of the underlying object can be obtained using the type member function. sage: v. type() ’t_VEC’ In PARI, to create an elliptic curve we enter ellinit([1,2,3,4,5]). Sage is similar, except that ellinit is a method that can be called on any PARI object, e. g. , our t\\_VEC v. sage: e = v. ellinit() sage: e. type() ’t_VEC’ sage: pari(e)[:13] [1, 2, 3, 4, 5, 9, 11, 29, 35, -183, -3429, -10351, 6128487/10351] Now that we have an elliptic curve object, we can compute some things about it. age: e. elltors() [1, [], []] sage: e. ellglobalred() [10351, [1, -1, 0, -1], 1] sage: f = e. ellchangecurve([1,-1,0,-1]) sage: f[:5] [1, -1, 0, 4, 3] 4. 2 GAP Sage comes with GAP 4. 4. 10 for computational discrete mathematics, especially group theory. Here’s an example of GAP’s IdGroup function , which uses the optional small groups database that has to be installed separately, as explained below. sage: G = gap(’Group((1,2,3)(4,5), (3,4))’) sage: G Group( [ (1,2,3)(4,5), (3,4) ] ) sage: G. Center() Group( () ) 66 Chapter 4. Interfaces Sage Tutorial, Release 5. 3 sage: G.\r\nIdGroup() [ 120, 34 ] sage: G. Order() 120 # requires optional database_gap package We can do the same computation in Sage without explicitly invoking the GAP interface as follows: sage: G = PermutationGroup([[(1,2,3),(4,5)],[(3,4)]]) sage: G. center() Subgroup of (Permutation Group with generators [(3,4), (1,2,3)(4,5)]) generated by [()] sage: G. group_id() # requires optional database_gap package [120, 34] sage: n = G. order(); n 120 (For some GAP functionality, you should install two optional Sage packages. Type sage -optional for a list and choose the one that looks like gap\\_packages-x. . z, then type sage -i gap\\_packages-x. y. z. Do the same for database\\_gap-x. y. z. Some non-GP L’d GAP packages may be installed by downloading them from the GAP web site [GAPkg], and unpacking them in $SAGE_ROOT/local/lib/gap-4. 4. 10/pkg. ) 4. 3 Singular Singular provides a massive and mature library for Grobner bases, variable polynomial gcds, bases of RiemannRoch spaces of a plane curve, and factorizations, among other things. We illustrate multivariate polynomial factorization using the Sage interface to Singular (do not type the ): sage: R1 = singular. ing(0, ’(x,y)’, ’dp’) sage: R1 // characteristic : 0 // number of vars : 2 // block 1 : ordering dp // : names x y // block 2 : ordering C sage: f = singular(’9*y^8 †9*x^2*y^7 †18*x^3*y^6 †18*x^5*y^6 + 9*x^6*y^4 + 18*x^7*y^5 + 36*x^8*y^4 + 9*x^10*y^4 †18*x^11*y^2 †9*x^12*y^3 †18*x^13*y^2 + 9*x^16’) Now that we have de? ned f , we print it and factor. sage: f 9*x^16-18*x^13*y^2-9*x^12*y^3+9*x^10*y^4-18*x^11*y^2+36*x^8*y^4+18*x^7*y^5-18*x^5*y^6+ 9*x^6*y^4-18*x^ sage: f. parent() Singular sage: F = f. factorize(); F [1]: _[1]=9 _[2]=x^6-2*x^3*y^2-x^2*y^3+y^4 _[3]=-x^5+y^2 [2]: 1,1,2 sage: F[1][2] x^6-2*x^3*y^2-x^2*y^3+y^4\r\nAs with the GAP example in GAP, we can compute the above factorization without explicitly using the Singular interface (however, behind the scenes Sage uses the Singular interface for the actual computation). Do not type the : 4. 3. Singular 67 Sage Tutorial, Release 5. 3 sage: sage: sage: (9) * x, y = QQ[’x, y’]. gens() f = 9*y^8 †9*x^2*y^7 †18*x^3*y^6 †18*x^5*y^6 + 9*x^6*y^4 + 18*x^7*y^5 + 36*x^8*y^4 + 9*x^10*y^4 †18*x^11*y^2 †9*x^12*y^3 †18*x^13*y^2 + 9*x^16 factor(f) (-x^5 + y^2)^2 * (x^6 †2*x^3*y^2 †x^2*y^3 + y^4) 4. 4 Maxima Maxima is included with Sage, as well as a Lisp implementation.\r\nThe gnuplot package (which Maxima uses by default for plotting) is distributed as a Sage optional package. Among other things, Maxima does symbolic manipulat ion. Maxima can integrate and differentiate functions symbolically, solve 1st order ODEs, most linear 2nd order ODEs, and has implemented the Laplace tr\r\n'

No comments:

Post a Comment