SAGE Day 9 -- The Sage Math Software System
system:sage

<center>
<font color="#000099"><h1>The Sage Project: Creating A Viable Free Open Source Alternative to Magma, Maple, Mathematica and Matlab</h1></font>
<h2>William Stein</h2>
<h2>Sage Days 9</h2>
<br><br>
<img src="irmacs.png">
<br><br>
<img width=356 src="sage_logo.png">

<br>
<!-- <font color="#333">
Sage: Can We Create a Viable Free Open Source Alternative to Magma, Maple, Mathematica and Matlab?
</font>!-->

</center>

<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><hr>
<center>
<font color="#000099"><h1>Acknowledgement:</h1></font></center>

<center><table border=1 cellpadding=10 bgcolor="#fafafa" width=50%><tr><td>
<b>Thank Organizers:</b>  Thanks for the generous support from ACCELERATE BC, Irmacs, etc.,
and to the other organizers -- Nils Bruin, Bill Casselman, David Austin, and Robert Bradshaw.
</td></tr></table></center>




<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><hr>
<font color="#000099"><h1  align='center'>What is the History of Sage?</h1></font>
<center>
<img src="sage_logo.png">
</center>
<center><table border=1 cellpadding=10 bgcolor="#fafafa" width=75%><tr><td>
<ol>
<li> <b>Berkeley 1995-1998:</b> Doing my Ph.D. in Number Theory (Modular Forms) under Hendrik Lenstra, and wrote a massive
amount of open source C++ code; Allan Steel and David Kohel convinced me in 1998 to <font color="red">switch to Magma</font>.
<br><br>
<li> <b>Harvard 1998-2003:</b> I developed a lot of code in Magma, and eagerly convinced many people in Number Theory
to use Magma, since Magma is much better at almost everything I needed than any other software on the planet. 
<br><br>
... (interlude) ...
</ol>
</td></tr></table></center>

<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><hr>
<font color="#000099"><h1  align='center'>Linus Torvalds on Open Source</h1></font>

<table align=center border=1 cellpadding=10 bgcolor="#fafafa" width=70%><tr><td>

I think, fundamentally, open source does tend to be more stable
software. It's the right way to do things. I compare it to science
versus witchcraft. In science, the whole system builds on people looking
at other people's results and building on top of them. In witchcraft,
somebody had a small secret and guarded it -- but never allowed others
to really understand it and build on it.

<br><br><font color="darkred">Traditional software is like witchcraft.</b></font>
In history, witchcraft just
died out. The same will happen in software. When problems get serious
enough, you can't have one person or one company guarding their
secrets. You have to have everybody share in knowledge.

<br><br>
 -- Linus Torvalds
</td></tr></table>

<br><br>
<center>
<table border=1 cellpadding=5><tr><td>
<img width=800 src="steel.png">
</td></tr></table>
</center>


<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><hr>
<font color="#000099"><h1  align='center'>J. Neubuser on Open Source</h1></font>

<center>
<font size=+1><table border=1 cellpadding=10 bgcolor="#fafafa" width=70%><tr><td>

"You can read Sylows Theorem and its proof in Hupperts book in the 
library [...] then you can use Sylows Theorem for the rest of your life 
free of charge, but for many computer algebra systems license fees 
have to be paid regularly [...]. You press buttons and you get answers 
in the same way as you get the bright pictures from your television set 
but you cannot control how they were made in either case. 

<br><br>
<font color="#700"><b>With this situation two of the most basic rules of conduct in 
mathematics are violated:</b></font> In mathematics information is passed 
on free of charge and everything is laid open for checking. Not 
applying these rules to computer algebra systems that are made for 
mathematical research [...] means moving in a most undesirable 
direction. Most important: Can we expect somebody to believe a 
result of a program that he is not allowed to see? Moreover: Do we 
really want to charge colleagues in Moldava several years of their 
salary for a computer algebra system?"
<br><br>
 J. Neubuser in 1993, who started GAP, which won last night's 
Jenk's prize that "recognizes outstanding software engineering contributions 
in the field of computer algebra and encourages future excellence in 
such research and development".

</td></tr></table></font>
<br><br>



</center>



<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><hr>
<font color="#000099"><h1  align='center'>Wolfram: Viable Non-commercial Math Software is Impossible</h1></font>

<center>
<table border=1 cellpadding=10 bgcolor="#fafafa" width=70%><tr><td>


<font size=+1>
<br><br>

<b>Wolfram:</b> There's another thing, quite honestly, that that community has a hard time with. They sort of hate
one aspect of what I have done, which is to take intellectual
developments and make a company out of them and sell things to people.

<br><br>
<font color="#333"><b>DDJ:</b> Probably not surprising, if mathematicians are the most puristic
of scientists.</font>
<br><br>


<b>Wolfram:</b> My own view of that, which has hardened over the years, is, my
god, that's the right thing to do. If you look at what's happened with
TeX, for example, which went in the other direction...well,
Mathematica could not have been brought to where it is today if it had
not been done as a commercial effort. The amount of money that has to
be spent to do all the details of development, you just <b><font color="#550000">can't support
that in any other way than this unique American idea of the
entrepreneurial company.</font></b>


<br><br>
      -- Stephen Wolfram, 1993, Doctor Dobbs Journal Interview

<br><br>
</font>
<hr>
<br><br><a href="http://reference.wolfram.com/mathematica/tutorial/WhyYouDoNotUsuallyNeedToKnowAboutInternals.html">Mathematica Tutorial</a>:

"You should realize at the outset that while knowing about the internals of Mathematica may be of intellectual interest, it is usually much less important in practice than one might at first suppose.
 [...] 
<br><br>Particularly in more advanced applications of Mathematica, it may sometimes seem worthwhile to try to analyze internal algorithms in order to predict which way of doing a given computation will be the most efficient. And there are indeed occasionally major improvements that you will be able to make in specific computations as a result of such analyses.
<br><br>
But most often the analyses will not be worthwhile. For the internals of Mathematica are quite complicated, and even given a basic description of the algorithm used for a particular purpose, it is usually extremely difficult to reach a reliable conclusion about how the detailed implementation of this algorithm will actually behave in particular circumstances.
<br><br>
A typical problem is that Mathematica has many internal optimizations..."

</td></tr></table>
<br><br>


<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><hr>
<font color="#000099"><h1  align='center'>John Cannon's: Viable Non-commercial Math Software <i><b>is</b></i> Possible</h1></font>

<br><br>
John Cannon (the 2006 Jenk's prize winner) proved Stephen Wolfram wrong with Magma, which
is <b><i>not</i></b> developed via "this unique American idea of the entrepreneurial company."
<br><br>

<center>
<img src="magma.gif">
</center>
<br><br><br>
<center><table border=1 cellpadding=10 bgcolor="#fafafa" width=75%><tr><td>

<font size=+2><pre>
 To: pari-dev@list.cr.yp.to
    * Subject: Magma and Pari
    * From: john@maths.usyd.edu.au (John Cannon)
    * Date: Sun, 12 Mar 2000 15:35:37 +1100 (EST)

>then spent quite a lot of time implementing more efficient
>algorithms wherever they could. [ that's actually what you pay 
> Magma for: so that they can pay their developpers... ]

The implementation of almost all modules in Magma is paid for by 
research grants. The license charge covers the costs of maintaining
and distributing Magma. To get research grants we have to show that
research funds wont be spent on such support activities.

 -- John Cannon

</pre></font>

</td></tr></table></center>


<br><br>
<center>
<font color="#333">
Magma -- both the software and the development model -- was a major inspiration for Sage...
</font>
</center>




<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><hr>
<font color="#000099"><h1  align='center'>Sage is Essentially Doomed</h1></font>

<center>
<table border=1 cellpadding=10 bgcolor="#fafafa" width=70%><tr><td>

Richard Fateman in December 2005 posted his opinion of Sage to sci.math.symbolic:

<font size=+2>
<br><br>
"By avoiding applications (say, to engineering design, finance,
  education, scientific visualization, etc etc) the activity [Sage] is
  essentially doomed. Why?  Government funding for people or projects
  will be a small percentage of the funding for pure mathematics.
  That's not much. And the future is pretty grim."

<br><br>
      -- Richard Fateman


</font>

</td></tr></table>
<br><br>


</center>




<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><hr>
<font color="#000099"><h1  align='center'>What is the History of Sage?</h1></font>
<center>
<img src="sage_logo.png">
</center>
<center><table border=1 cellpadding=10 bgcolor="#fafafa" width=75%><tr><td>

<ol>
<li> <b>Berkeley 1995-2000:</b> I did my Ph.D. in Number Theory (Modular Forms) under Hendrik Lenstra, and wrote a massive
amount of C++ code, then moved entirely to Magma.  
<br><br>
<li> <b>Harvard 2000-2003:</b> I developed a lot of code in Magma, and convinced many people in my area
to use Magma.
<br><br>
<li> <b>Harvard 2003-2005:</b>
I realized that I had made a <font color='red'><b>major mistake</b></font> in embracing Magma as my core research tool:
<br>
Magma is proprietary, <br>the development model is closed,<br>no way to write compiled code for Magma,
<br>
Magma is expensive which is bad for students and profs,<br> and the language itself
lacked many features (e.g., user defined classes) that I had requested
repeatedly for over 5 years;<br>
and yet the <b>design</b> of much of Magma is frickin' brilliant...

<br><br>
<li> <b>Harvard late 2004:</b> I get tenure at UCSD and start investigating nontrivial options.
<br><br>
<li> <b>Harvard, January 2005:</b> I release Sage-0.1 and a long lonely year of very hard work follows.
<br><br>
<li> <b>UC San Diego, February 2006:</b> Sage-1.0 and Sage Days 1.  Get some help from David Joyner and David Kohel.
<br><br>
<li> <b>University of Washington, October 2006:</b> Sage Days 2; Start build a developer community that now numbers
well over 100 and is writing <font color="#700"><b>massive amounts of new very high quality code</b></font>.
<br><br>
<li> <b>November 2007:</b> Sage wins first prize in Scientific Category of Trophees du Libre (3000 euros, a laptop, etc.)
</ol>

</td></tr></table></center>






<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><hr>
<font color="#000099"><h1  align='center'>What is Sage?</h1></font>
<center>
<img src="sage_logo.png">
</center>
<center>
<table border=1 cellpadding=10 bgcolor="#fafafa" width=70%><tr><td>
<font size=+1>
<br><br>
<ol>
<li> A <b>completely free distribution</b> of the world's best open source mathematical software that builds easily from
source on Linux and OS X (and soon on Solaris and Microsoft Windows).  
Basically Sage <font color='red'><b>includes nearly everything</b></font> you need standard.
<br><br>
<li> Over three hundred thousand lines of <b>new code and documentation</b> that implements large amounts
of new functionality and provides a graphical interface.  A massive automated test suite. 
<br><br>
<li> <b>Unified interfaces to Magma, Mathematica, Maple,</b> Matlab, Axiom, Mupad, Singular, Macaulay2, etc., so it is 
easier for you to use all these programs together (for example, when migrating to Sage or making sure your new Sage code
is faster than anything else out there).
</ol>
</font>
</td></tr></table>
</center>

<br><br>


<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><hr>

<font color="#000099"><h1  align='center'>Some Examples</h1></font>

{{{id=2|
2 + 3
///
5
}}}

{{{id=108|
4/5 + 7/8 + x^(pi + e + e)
///
x^(pi + 2*e) + 67/40
}}}

{{{id=3|
var('x,y')
plot3d(sin(x*cos(y)), (x,-2,5),(y,-2,5), adaptive=True, spin=True, opacity=0.7)
///
}}}

{{{id=72|
# Yoda! -- over 50,000 triangles.
from scipy import io
x = io.loadmat(DATA + 'yodapose.mat')
from sage.plot.plot3d.index_face_set import IndexFaceSet
V = x['V']; F3=x['F3']-1; F4=x['F4']-1
Y = IndexFaceSet(F3,V,color=Color('#00aa00')) + IndexFaceSet(F4,V,color=Color('#00aa00'))
Y = Y.rotateX(-1)
///
}}}

{{{id=69|
Y.show(aspect_ratio=[1,1,1], frame=False, figsize=4)
///
}}}

{{{id=102|
var('x')
show(integrate(sin(x)*cos(pi*x) + pi^3))
///
<html><div class="math">\frac{-\left( \cos \left( {\left( \pi + 1 \right) x} \right) \right)}{{2 \left( \pi + 1 \right)}} - \frac{\cos \left( {\left( 1 - \pi \right) x} \right)}{{2 \left( 1 - \pi \right)}} + {{\pi}^{3}  x}</div></html>
}}}

{{{id=70|
@interact
def gfan_browse(p1 = input_box('x^3+y^2',type = str, label='polynomial 1: '), 
                p2 = input_box('y^3+z^2',type = str, label='polynomial 2: '), 
                p3 = input_box('z^3+x^2',type = str, label='polynomial 3: ')):
    R.<x,y,z> = PolynomialRing(QQ,3)
    try:
        p1 = R(p1); p2 = R(p2); p3 = R(p3)
    except TypeError:
        print "Unable to parse input."
        return
    i1 = ideal(p1,p2,p3)
    alarm(2)
    try:
        gf1 = i1.groebner_fan()
        testr = gf1.render()    
        html('Groebner fan of the ideal generated by: $%s, %s, %s$'%(
               latex(p1), latex(p2), latex(p3)))
        show(testr, axes = False, figsize=[8,8*(3^(.5))/2])
    except:
        print "Computation took more than 2 seconds... and I know you are impatient, so stopping"
///

<html><div padding=6 id='div-interact-70'> <table width=800px height=400px bgcolor='#c5c5c5'
                 cellpadding=15><tr><td bgcolor='#f9f9f9' valign=top align=left><table><tr><td align=right><font color="black">polynomial 1: &nbsp;</font></td><td><input type='text' value='x^3+y^2' size=80 onchange='interact(70, "sage.server.notebook.interact.update(70, \"p1\", 16, sage.server.notebook.interact.standard_b64decode(\""+encode64(this.value)+"\"), globals())")'></input></td></tr>
<tr><td align=right><font color="black">polynomial 2: &nbsp;</font></td><td><input type='text' value='y^3+z^2' size=80 onchange='interact(70, "sage.server.notebook.interact.update(70, \"p2\", 17, sage.server.notebook.interact.standard_b64decode(\""+encode64(this.value)+"\"), globals())")'></input></td></tr>
<tr><td align=right><font color="black">polynomial 3: &nbsp;</font></td><td><input type='text' value='z^3+x^2' size=80 onchange='interact(70, "sage.server.notebook.interact.update(70, \"p3\", 18, sage.server.notebook.interact.standard_b64decode(\""+encode64(this.value)+"\"), globals())")'></input></td></tr>
</table><div id='cell-interact-70'><?__SAGE__START>
        <table border=0 bgcolor='#white' width=100% height=100%>
        <tr><td bgcolor=white align=left valign=top><pre><?__SAGE__TEXT></pre></td></tr>
        <tr><td  align=left valign=top><?__SAGE__HTML></td></tr>
        </table><?__SAGE__END></div></td>
                 </tr></table></div>
                 </html>
CPU time: 0.00 s,  Wall time: 0.02 s
}}}

{{{id=101|
R.<x> = PolynomialRing(IntegerModRing(389*997))
p = x^20 + 387832*x^19 + 3*x^2 + 2*x + 387828
p.small_roots(beta=0.1)
///
[1]
}}}

{{{id=100|
p.small_roots??
///
}}}

{{{id=131|

///
}}}

{{{id=4|

///
}}}

<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><hr>

<font color="#000099"><h1  align='center'>Every Single Copy of Sage Includes...</h1></font>

<table width=80% bgcolor="#fafafa" color="#222" align=center><tr><td>
 <ol>
  <li><a target="_blank"
     href="http://math-atlas.sourceforge.net/">ATLAS</a>: Automatically Tuned Linear Algebra
     Software</li>

  <li><a target="_blank"
     href="http://www.netlib.org/blas">BLAS</a>: Basic Fortan 77 linear algebra routines</li>

  <li><a target="_blank"
     href="http://www.bzip.org/">Bzip2</a>: High-quality data compressor</li>

  <li><a target="_blank"
     href="http://www.ifor.math.ethz.ch/%7Efukuda/cdd_home">Cddlib</a>: Double Description Method
     of Motzkin</li>


  <li><a target="_blank"
     href="http://clisp.cons.org/">Common Lisp</a>: Multiparadigm and general-purpose programming
     language</li>

  <li><a target="_blank"
     href="http://abel.ee.ucla.edu/cvxopt">CVXOPT</a>: Convex optimization, linear programming,
     least squares, etc.</li>

  <li><a target="_blank"
     href="http://www.cython.org">Cython</a>: C-Extensions for Python</li>

  <li><a target="_blank"
     href="http://www.netlib.org/f2c/">F2c</a>: Converts Fortran 77 to C code</li>

  <li><a target="_blank"
     href="http://www.flintlib.org/">Flint</a>: Fast Library for Number Theory</li>

  <li><a target="_blank"
     href="http://perso.ens-lyon.fr/damien.stehle/english.html#software">FpLLL</a>: Euclidian
     lattice reduction</li>

  <li><a target="_blank"
     href="http://www.freetype.org/">FreeType</a>: A Free, High-Quality, and Portable Font
     Engine</li>

  <li><a target="_blank"

     href="http://www.g95.org">G95</a>: Open source Fortran 95 compiler</li>

  <li><a target="_blank"
     href="http://www-groups.dcs.st-and.ac.uk/%7Egap/">GAP</a>: Groups, Algorithms,
     Programming</li>

  <li><a target="_blank"
     href="http://www.libgd.org/Main_Page">GD</a>: Dynamic graphics generation tool</li>

  <li><a target="_blank"
     href="http://www.math.u-bordeaux.fr/%7Eliu/G2R/">Genus2reduction</a>: Curve data
     computation</li>

  <li><a target="_blank"
     href="http://www.math.tu-berlin.de/%7Ejensen/software/gfan/gfan.html">Gfan</a>: Grbner fans
     and tropical varieties</li>

  <li><a target="_blank"
     href="http://ljk.imag.fr/CASYS/LOGICIELS/givaro/">Givaro</a>: C++ library for arithmetic and
     algebra</li>

  <li><a target="_blank"
     href="http://www.swox.com/gmp/">GMP</a>: GNU Multiple Precision Arithmetic Library</li>

  <li><a target="_blank"






     href="http://gforge.inria.fr/projects/ecm/">GMP-ECM</a>: Elliptic Curve Method for Integer
     Factorization</li>

  <li><a target="_blank"
     href="http://www.gnu.org/software/gnutls/">GNU TLS</a>: Secure networking</li>

  <li><a target="_blank"
     href="http://www.gnu.org/software/gsl/">GSL</a>: Gnu Scientific Library</li>

  <li><a target="_blank"
     href="http://www.math.union.edu/%7Edpvc/jsMath/">JsMath</a>: JavaScript implementation of
     LaTeX</li>

  <li><a target="_blank"
     href="http://www.cs.uwaterloo.ca/%7Ez4chen/iml.html">IML</a>: Integer Matrix Library</li>

  <li><a target="_blank"
     href="http://ipython.scipy.org/">IPython</a>: Interactive Python shell</li>

  <li><a target="_blank"
     href="http://www.netlib.org/lapack/">LAPACK</a>: Fortan 77 linear algebra library</li>

  <li><a target="_blank"
     href="http://pmmac03.math.uwaterloo.ca/%7Emrubinst/L_function_public/CODE/">Lcalc</a>:
     L-functions calculator</li>

  <li><a target="_blank"
     href="http://directory.fsf.org/project/libgcrypt/">Libgcrypt</a>: General purpose
     cryptographic library</li>


  <li><a target="_blank"
     href="http://www.gnupg.org/related_software/libgpg-error/">Libgpg-error</a>: Common error
     values for GnuPG components</li>

  <li><a target="_blank"
     href="http://www.linalg.org/">Linbox</a>: C++ linear algebra library</li>

  <li><a href="http://m4ri.sagemath.org/"
     target="_blank">M4RI</a>: Linear Algebra over GF(2)</li>

  <li><a target="_blank"
     href="http://matplotlib.sourceforge.net/">Matplotlib</a>: Python plotting library</li>

  <li><a target="_blank"
     href="http://maxima.sourceforge.net/">Maxima</a>: computer algebra system</li>

  <li><a target="_blank"
     href="http://www.selenic.com/mercurial/wiki/index.cgi">Mercurial</a>: Revision control
     system</li>

  <li><a target="_blank"
     href="http://moinmoin.wikiwikiweb.de/">MoinMoin Wiki</a></li>

  <li><a target="_blank"
     href="http://perso.ens-lyon.fr/nathalie.revol/software.html">MPFI</a>: Multiple Precision
     Floating-point Interval library</li>

  <li><a target="_blank"
     href="http://www.mpfr.org/">MPFR</a>: C library for multiple-precision floating-point
     computations with correct rounding</li>

  <li>ECLib:Cremona's Programs for Elliptic curves</li>


  <li><a target="_blank"
     href="https://networkx.lanl.gov/wiki">NetworkX</a>: Graph theory</li>

  <li><a target="_blank"
     href="http://www.shoup.net/ntl/">NTL</a>: Number theory C++ library</li>

  <li><a target="_blank"
     href="http://numpy.scipy.org/">Numpy</a>: Numerical linear algebra</li>

  <li><a target="_blank"
     href="http://www.gnu.org/software/gnutls/">OpenCDK</a>: Open Crypto Development Kit</li>

  <li><a target="_blank"
     href="http://hep.itp.tuwien.ac.at/%7Ekreuzer/CY/CYpalp.html">PALP</a>: A Package for Analyzing
     Lattice Polytopes</li>

  <li><a target="_blank"
     href="http://pari.math.u-bordeaux.fr/">PARI/GP</a>: Number theory calculator</li>

  <li><a target="_blank"
     href="http://pexpect.sourceforge.net/">Pexpect</a>: Pseudo-tty control for Python</li>

  <li><a target="_blank"
     href="http://www.libpng.org/pub/png/libpng.html">PNG</a>: Bitmap image support</li>

  <li><a target="_blank"
     href="http://polybori.sourceforge.net/">PolyBoRi</a>: Polynomials Over Boolean Rings</li>

  <li><a target="_blank"
     href="http://www.amk.ca/python/code/crypto">PyCrypto</a>: Python Cryptography Toolkit</li>

  <li><a target="_blank"
     href="http://www.python.org/">Python</a>: Interpreted language</li>

  <li><a target="_blank"
     href="http://www.cs.berkeley.edu/%7Eyozo/">Qd</a>: Quad-double/Double-double Computation
     Package</li>

  <li><a target="_blank"
     href="http://www.r-project.org/">R</a>: Statistical Computing</li>

  <li><a target="_blank"
     href="http://cnswww.cns.cwru.edu/%7Echet/readline/rltop.html">Readline</a>: Line-editing</li>

  <li><a target="_blank"
     href="http://rpy.sourceforge.net/">Rpy</a>: Python interface to R</li>

  <li><a target="_blank"
     href="http://www.scipy.org/">Scipy</a>: Python library for scientific computation</li>


  <li><a target="_blank"
     href="http://www.singular.uni-kl.de/">Singular</a>: fast commutative and noncommutative
     algebra</li>

  <li><a target="_blank"
     href="http://www.scons.org/">Scons</a>: Software construction tool</li>

  <li><a target="_blank"
     href="http://www.sqlite.org/">SQLite</a>: Relation database</li>

  <li><a target="_blank"
     href="http://www.maths.bris.ac.uk/%7Emamjw/">Sympow</a>: L-function calculator</li>

  <li><a target="_blank"
     href="http://www.mathe2.uni-bayreuth.de/axel/symneu_engl.html">Symmetrica</a>: Representation
     theory</li>

  <li><a target="_blank"
     href="http://code.google.com/p/sympy/">Sympy</a>: Python library for symbolic computation</li>

  <li><a target="_blank"
     href="http://jedi.ks.uiuc.edu/%7Ejohns/raytracer/">Tachyon</a>: lightweight 3d ray tracer</li>

  <li><a target="_blank"
     href="http://www.catb.org/%7Eesr/terminfo/">Termcap</a>: Simplifies the process of writing
     portable text mode applications</li>

  <li><a target="_blank"
     href="http://twistedmatrix.com/trac/">Twisted</a>: Python networking library</li>

  <li><a target="_blank"
     href="http://www.scipy.org/Weave">Weave</a>: Tools for including C/C++ code within Python</li>

  <li><a target="_blank"
     href="http://www.zlib.net/">Zlib</a>: Data compression library</li>

  <li><a target="_blank"
     href="http://www.zope.org/Wikis/ZODB/">ZODB</a>: Object-oriented database</li>
 </ol>
</td></tr></table>

<br><br>
This is over <font color='darkblue'><b>over five million</b></font> lines of source code.
<b>You</b> can build this on almost any Linux or OS X box out there as follows:
<font size=+3><pre>
@ tar xf sage-3.0.5.tar
@ cd sage-3.0.5
@ make
...
real    105m8.635s
SAGE build/upgrade complete!

@ ./sage
----------------------------------------------------------------------
| SAGE Version 3.0.5, Release Date: 2008-07-11                       |
| Type notebook() for the GUI, and license() for information.        |
----------------------------------------------------------------------


sage: notebook()
</pre></font>

<table border=1 align=center><tr><td>
<img width=450 src="nb.png">
</td></tr></table>



<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><hr>
<font color="#000099"><h1 align=center>Debianization of Sage</h1></font>
<center>
I want <font size=+2><tt>apt-get install sagemath</tt></font>!
</center>

<table width=50% align=center><tr><td>
<font size=+2><pre>
From: Tim Abbot <tabbott@mit.edu>
Date: Tue, Jul 22, 2008 at 4:44 AM

I figured I'd give everyone an update on how things are going with the
Sage packages.  I believe (but am not certain) that all of the Sage
dependencies that I want to get into Lenny will make it, though I'm still
waiting on final review for 5 of them that had copyright problems in the
past.

On the other hand, Debian is freezing everything starting in around 5 
or 6 days.  So, I need to have a presentable Sage package in the very 
near future.

There are currently a few showstopper problems:

 * [M4Ri problems...]

 * [Linbox problems...]

 -Tim Abbott
</pre></font></td></tr></table>
<center>
<font color="#333">
Sage has got tons of math
software into Debian that might <i>never</i> otherwise got in.
</font>
</center>


<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><hr>
<br><br><br>
<font color="#000099" size=+4><h1 align='center'>Questions?</h1></font>

<center>Ask me anything!</center>

{{{id=6|
var('x')
///
x
}}}

{{{id=99|
f = integrate(sin(x^2)); show(f)
///
<html><div class="math">\frac{{\sqrt{ \pi } \left( {\left( {\sqrt{ 2 } i} + \sqrt{ 2 } \right) \text{erf} \left( \frac{{\left( {\sqrt{ 2 } i} + \sqrt{ 2 } \right) x}}{2} \right)} + {\left( {\sqrt{ 2 } i} - \sqrt{ 2 } \right) \text{erf} \left( \frac{{\left( {\sqrt{ 2 } i} - \sqrt{ 2 } \right) x}}{2} \right)} \right)}}{8}</div></html>
}}}

{{{id=98|
latex(f)
///
\frac{{\sqrt{ \pi } \left( {\left( {\sqrt{ 2 } i} + \sqrt{ 2 } \right) \text{erf} \left( \frac{{\left( {\sqrt{ 2 } i} + \sqrt{ 2 } \right) x}}{2} \right)} + {\left( {\sqrt{ 2 } i} - \sqrt{ 2 } \right) \text{erf} \left( \frac{{\left( {\sqrt{ 2 } i} - \sqrt{ 2 } \right) x}}{2} \right)} \right)}}{8}
}}}

{{{id=95|
a = random_matrix(QQ,5)^(-1); a
///
[-14/11 -24/11  10/11 -30/11   4/11]
[ 10/11  14/11  -4/11  12/11  -6/11]
[ -9/11 -17/11   8/11 -24/11  12/11]
[ 13/22   8/11  -7/11  10/11  -5/11]
[ -6/11 -15/11   9/11 -16/11   8/11]
}}}

{{{id=109|
time qsieve(next_prime(10^30)*next_prime(10^31))
///

([1000000000000000000000000000057, 10000000000000000000000000000033], '')
CPU time: 0.04 s,  Wall time: 13.27 s
}}}

{{{id=110|
print ecm.factor(next_prime(10^10)*next_prime(10^70))
///
[10000000019, 10000000000000000000000000000000000000000000000000000000000000000000033]
}}}

{{{id=111|

///
}}}

{{{id=16|
factor(8203980982304982349284098230498203984)
///
2^4 * 3 * 37 * 97 * 2659 * 11731 * 1146097 * 1332095009845129219
}}}

<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><hr>
<font color="#000099"><h1 align='center'>Who is Sage?</h1></font>
<center>
<font size=+2><b>Sage is an international project with over <font color='darkred'>100 developers</font></b> across
the globe!</font>
<br>
<br>
<a href="http://sagemath.org/development-map.html" target="_new"><img src="map.png"></a>


</center>

<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><hr>
<font color="#000099"><h1 align=center>Sage Days Workshops</h1></font>
<br><br>
<table align=center border=1 cellpadding=20 bgcolor="#fafafa" color="#222" width=75%><tr><td>
<ol>
<li> February 2006: Sage Days 1 at UC San Diego
<li> October 2006: Sage Days 2 at University of Washington
<li> February 2007: Sage Days 3 at UC Los Angeles (IPAM)
<li> June 2007: Sage Days 4 at University of Washington
<li> October 2007: Sage Days 5 at the Clay Mathematics Institute
<li> November 2007: Sage Days 6 at Bristol, UK
<li> February 2008: Sage Days 7 at UC Los Angeles (IPAM)
<li> March 2008: Sage Days 8 at Austin, Texas (Enthought)
<li> June 2008: Sage Days 8.5 at University of Washington
<li> August 2008: Sage Days 9 in Vancouver (SFU)
<li> October 2008: Sage Days 10 in Nancy, France (INRIA)
<li> November 2008: Sage Days 11 in Austin, Texas (UT Austin)
<li> January 2009: Sage Days 12 in San Diego, CA
<li> March 2009: Sage Days 13 in Athens, Georgia (UGA)
</ol>
</td></tr></table>
<center>
<img src="sagedays2moment.png">
</center>

<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><hr>
<font color="#000099"><h1 align=center>Funding</h1></font>

We have received substantial funding from NSF, Microsoft, Google, DoD, several universities
and institutes.
<br>
<center>
 <img height=100 src="msr.png"> <img height=100 src="nsf.png"> <img height=100 src="google.png">
 <img height=100 src="dod.png">
</center>

<br><br><br><br>
<center><b>There are <font color='darkred'>several funded summer employees</font> right now:</b></center>
<br>
<table align=center border=1 cellpadding=20 bgcolor="#fafafa" color="#222" width=80%><tr><td>
<ol>
  <li>

      Elliott Brossard -- (funded by NASA/Sage Foundation) interactive plotting, calc 101 

<li> Timothy Clemans -- (funded by Sage Foundation) Sage notebook
  <li>


      Gary Furnish -- (funded by Google/NSF) symbolic Calculus 
   <li> Chris Gorecki -- (funded by Microsoft) port of Sage to Windows
   <li>

      Mike Hansen -- (funded by Google) combinatorial species
   <li>

      Emily Kirkman -- (funded by Google) graph theory, 2d graphics
   <li>

      Robert Miller -- (funded by Google) backtracking algorithms
   <li>

      Brett Nakashima -- (funded by VIGRE/NSF) quantitative finance
   <li>

      Yi Qiang -- (funded by Google) distributed Sage
  <li>

      Chris Swierczewski -- (funded by Glenn Tarbox) quantitative finance
  <li>

      Igor Tolkov -- (funded by Google Summer of Code) improving @interact
</ol>

</table>

</center>

<br><br>
<center><b><font color='darkred'>Fulltime Employees</font></b></center>
<br>
<table align=center border=1 cellpadding=20 bgcolor="#fafafa" color="#222" width=80%><tr><td>
<ol>
  <li> Michael Abshoff -- (funded by Microsoft and DoD); porting sage to Solaris and Windows; the Sage release manager

<br><br>
 <li> Clement Pernet -- (funded by NSF); The Sage Postdoc; lead Linbox developer

</ol>
</table>
</center>

<br><br><br><br>

<table align=center width=80%><tr><td>
Also, <b><i>many</i></b> researchers use Sage to support their research 
and implement new algorithms, and they contribute their code to Sage. 
</td></tr></table>


<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><hr>
<font color="#000099"><h1 align=center>Python</h1></font>

<center><img src="python-logo.gif"></center>
<font size=+1>
<table width=80% align=center bgcolor="#fafafa" color="#222"><tr><td>
Instead of using a custom language like all other major math software
systems, Sage uses the mainstream object oriented programming
language Python, which is considered one of the worlds top 6 most
popular languages. 

<br><br>
<ul>
<li> "Python is fast enough for our site and allows us to
  <i>produce maintainable features in record times</i>, with a minimum
  of developers," said Cuong Do, Software Architect, 
    <font color="blue">YouTube.com</font>.
<br><br><br>

<li> "Google has made no secret of the fact they use Python a lot
  for a number of internal projects. Even knowing that, once <i>I
   was an employee, I was amazed at how much Python code there
    actually is in the Google source code system</i>.", said Guido van
  Rossum, <font color="blue">Google</font>, creator of Python.
<br><br><br>

<li> "Python is everywhere at ILM. It's used to extend the capabilities of our applications, as well as providing the glue between them. Every CG image we create has involved Python somewhere in the process," said Philip Peterson, Principal Engineer, Research & Development, <font color="blue">Industrial Light & Magic</font>.


</ul>
</td></tr></table></font>


<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><hr>
<font color="#000099"><h1 align=center>Cython: Compiled Python</h1></font>

<center>

<img src="cython.png">
</center>


<table width=80% align=center><tr><td>
<ol>

<li> In order for Sage to be very fast and make reuse of existing C/C++ libraries easy, we use Cython,
which is a Python-to-C compiler and language for writing fast compiled extensions to Python.
<br><br>

<li> Cython is a language that makes writing C extensions for the Python language as easy as Python itself. 
<br><br>
<li> The Cython language is very close to the Python language, but Cython additionally supports calling C functions and declaring C types on variables and class attributes. This allows the compiler to generate very efficient C code from Cython code.
<br><br>
<li> This makes Cython the ideal language for wrapping for external C libraries, and for fast C modules that speed up the execution of Python code. 
</ol>
</td></tr></table>

{{{id=48|
def mymean(n):
    s = float(0)
    for m in range(n):
        s += m
    return float(s) / n
///
}}}

{{{id=49|
time mymean(10^6)
///
}}}

{{{id=47|
%cython
def mymean2(int n):
    cdef double s = 0
    cdef int m
    for m from 0 <= m < n:
        s += m
    return s / n
///
}}}

{{{id=52|
time mymean2(10^6)
///
}}}

{{{id=53|
timeit('mymean2(10^6)')
///
}}}

{{{id=55|
0.16/(1.19*10^(-3))
///
}}}

{{{id=54|

///
}}}

<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><hr>
<font color="#000099"><h1 align=center>Sage Interfaces</h1>

<table width=80% align=center><tr><td>
Sage has  pseudo-tty based interfaces to everything
that make it is possible to make extensive use of Maple, Mathematica,
Magma, Matlab, GAP, Maxima, Singular, PARI, and many other systems
from Sage.
</td></tr></table>

{{{id=57|
x = var('x')
f = sin(x^2) + sqrt(3)/pi^e
show(f)
///

<html><div class="math">\sin \left( {x}^{2}  \right) + \frac{\sqrt{ 3 }}{{\pi}^{e} }</div></html>
}}}

{{{id=132|
m = mathematica(f)  # requires mathematica!!
m
///

Sqrt[3]/Pi^E + Sin[x^2]
}}}

{{{id=7|

///
}}}

<br><br>
<font color="#333">Note: It's officially a license violation to use Mathematica
from Sage via the notebook, since the EULA for Mathematica 
explicitly disallows any use of Mathematica via http. </font>
<br><br>

{{{id=8|
os.system('ps ax |grep Mathematica.app')
///

 1749 s006  S+     0:00.01 sh -c ps ax |grep Mathematica.app
 1751 s006  S+     0:00.00 grep Mathematica.app
 1747 s009  S+     0:00.05 /Applications/Mathematica.app/Contents/MacOS/MathKernel
0
}}}

{{{id=60|
type(m)
///

<class 'sage.interfaces.mathematica.MathematicaElement'>
}}}

{{{id=112|
m.name()
///

'sage0'
}}}

{{{id=9|
m.Integrate(x)
///

(Sqrt[3]*x)/Pi^E + Sqrt[Pi/2]*FresnelS[Sqrt[2/Pi]*x]
}}}

{{{id=56|
# there is a bug in the maple interface where it never works
# at Simon Frasier University!  I haven't been able to debug it
# until this workshop, since I haven't been here in a while.
m = maple(f); show(m)
///

<html><div class="math">{\it sage3}</div></html>
}}}

{{{id=58|
m.integrate(x)
///
}}}

{{{id=59|
m = maxima(f); show(m)
///

<html><div class="math">\sin x^2+{{\sqrt{3}}\over{\pi^{e}}}</div></html>
}}}

{{{id=10|
show(m.integrate())
///

<html><div class="math">{{\sqrt{\pi}\,\left(\left(\sqrt{2}\,i+\sqrt{2}\right)\,\mathrm{erf}  \left({{\left(\sqrt{2}\,i+\sqrt{2}\right)\,x}\over{2}}\right)+\left(  \sqrt{2}\,i-\sqrt{2}\right)\,\mathrm{erf}\left({{\left(\sqrt{2}\,i-  \sqrt{2}\right)\,x}\over{2}}\right)\right)}\over{8}}+{{\sqrt{3}\,x  }\over{\pi^{e}}}</div></html>
}}}

{{{id=63|
r = octave('rand(4)'); r                  # I do not have matlab on laptop, but it's the same
///



 0.558769 0.261113 0.177883 0.989534
 0.604335 0.0213031 0.908614 0.970141
 0.206653 0.744935 0.0509978 0.563303
 0.329074 0.948453 0.296885 0.691544
}}}

{{{id=62|
r.eig()
///



 2.14615
 -0.84845
 0.146992
 -0.12208
}}}

{{{id=61|

///
}}}

{{{id=64|

///
}}}

{{{id=11|

///
}}}

<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><hr>
<br><br><br>
<font color="#000099" size=+4><h1 align='center'>Questions?</h1></font>

<center>Ask me anything!</center>

{{{id=24|

///
}}}

{{{id=28|

///
}}}

{{{id=32|

///
}}}

<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><hr>
<font color="#000099"><h1 align=center>Combinatorics</h1></font>

<center><img src="combinat.png"></center>


<table width=80% align=center><tr><td>
<ol>
<li> Sage is very strong in algebraic combinatorics. 
<b>The MuPAD-Combinat project</b> -- founded by  Nicolas Thiery and Florent Hivert -- has officially decided to switch over to Sage,
and have already ported much of their code over.   Mike Hansen has done a massive amount of work on this.

<br><br><br>
<li>
Mike Hansen is porting Aldor-Combinat to Sage.

<br><br><br>

<li> Sage has a <b>massive amount of graph theory code</b>, including the only open source implementation of 
computation of automorphism groups (Robert Miller's), a large database (Jason Grout and Emily Kirkman),
and much much more. 
<br><br><br>

<li>
Sage includes Gap, Gfan, and NetworkX. 

</ol>
</td></tr></table>

{{{id=13|
G = graphs.CubeGraph(4); G
///
}}}

{{{id=67|
G.automorphism_group()
///
}}}

{{{id=14|
show(G)
///
}}}

{{{id=65|
G.plot3d(spin=True)
///
}}}

{{{id=68|

///
}}}

{{{id=15|

///
}}}

<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><hr>

<font color="#000099"><h1 align=center>Number Theory</h1></font>


<center><img src="number_theory.png"></center>

<table width=80% align=center><tr><td>
<ol>

<li> 
Sage has a wide range of number theory, including algebraic number fields,
modular forms, special functions, way more elliptic curve functionality
than any other open source program, and many elliptic and hyperelliptic curve
functions that are available in no other programs. 
<br><br>

<li>
Sage tightly builds on PARI, NTL, lcalc, Dokchiter, all of Cremona's code (both for curves and modular
symbols), sympow, genus2reduction, and other
number theory programs and libraries. 

</ol>
</td></tr></table>

{{{id=17|
show(factor(29308203480928340982340820934820983402348))
///
}}}

{{{id=71|
E = EllipticCurve('5077a')
show(E)
print "Integral Points:"
print E.integral_points()   # will be in sage-3.1 (thanks Nagel, Mardaus, and Cremona!!)
plot(E, thickness=3, rgbcolor='orange').show()
///
}}}

{{{id=19|

///
}}}

<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><hr>
<font color="#000099"><h1 align=center>Exact Linear Algebra</h1></font>


<table width=80% align=center><tr><td>
<ol>

<li> 
Sage has optimized exact dense and sparse linear algebra over the rationals, integers, finite fields (especially GF(2)).  

<li>
Sage contains a large amount of new linear algebra code 
tightly integrated with Linbox, IML, NTL, Numpy, and ATLAS.


</ol>
</td></tr></table>

{{{id=22|
a = random_matrix(ZZ,200, x=-2^16,y=2^16)  # 16-bit entries
set_verbose(2)
s = cputime()
d = a.determinant()      # Uses Linbox, ATLAS, IML, and new Sage code.
print d
print "time: ", cputime(s)
set_verbose(0)
///
}}}

{{{id=74|
magma.quit()
#b = magma('MatrixAlgebra(IntegerRing(),300)![Random(-2^16, 2^16) : i in [1..200^2]]')
b = magma(a)
t = magma.cputime()
d2 = b.Determinant()
print 'Time: ', magma.cputime(t)
///
}}}

{{{id=103|
d == d2
///
}}}

{{{id=106|
b = mathematica(a)
///
}}}

{{{id=107|
mathematica.eval('Timing[Det[%s];]'%b.name())
///
}}}

{{{id=23|

///
}}}

<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><hr>
<font color="#000099"><h1 align=center>Cryptography</h1></font>

<table width=80% align=center><tr><td>
<ol>

<li> 
Sage is well suited for cryptography research because of its exact linear algebra (Linbox, M4RI), commutative
algebra (PolyBori), support for crypto protocols (PyCrypto), number theory, and general extendability. 


</ol>
</td></tr></table>

{{{id=25|
# Let's crack a small-scale AES variant!

sr = mq.SR(2,1,1,4, gf2=True); sr
///
}}}

{{{id=78|
F, s = sr.polynomial_system()
F, s
///
}}}

{{{id=79|
show(F.groebner_basis())
///
}}}

{{{id=80|

///
}}}

{{{id=27|

///
}}}

<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><hr>
<font color="#000099"><h1 align=center>Numerical Computation and Statistics</h1></font>

<table width=80% align=center><tr><td>
<ol>

<li> 
Sage includes R (and rpy), scipy.stats, and some new code for quantative finance. 


</ol>
</td></tr></table>

{{{id=30|
import scipy.stats
scipy.stats.std([1..1000])
///
}}}

{{{id=82|
finance.TimeSeries([1..1000]).standard_deviation()
///
}}}

{{{id=85|
v = finance.TimeSeries(10^6).randomize('normal')
v.plot_histogram()
///
}}}

{{{id=87|
v.sums().plot()
///
}}}

{{{id=88|

///
}}}

{{{id=31|

///
}}}

{{{id=86|

///
}}}

<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><hr>
<font color="#000099"><h1 align=center>Get Your Code Into Sage!</h1></font>


<table width=80% align=center><tr><td>
<ol>
<li> Sage has an <b><i>extremely open and friendly</i></b> development model.  

<br><br><br>

<li> Every single patch that goes into the Sage library is <b><i>formally refereed</i></b>, like is done
with a journal.   Doctests and comments must be up to snuff.

<br><br><br>
<li> All bugs are <font color="darkred">publicly listed</font>, the
referee process is public, the latest version of Sage is available. In fact,
you can browse the developers home directories from the web here!
<center>
<a target="_new" href="http://sage.math.washington.edu/home">http://sage.math.washington.edu/home</a>
</center>

</ol></td></tr></table>




<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><hr>
<br><br><br>
<font color="#000099" size=+4><h1 align='center'>Questions?</h1></font>
<center>Ask me anything!</center>

{{{id=5|
R.<x,y,z> = QQ[]
///
}}}

{{{id=118|
f = (x+y+z+1)^20; f
///
WARNING: Output truncated!  
<html><a target='_new' href='/home/admin/221/cells/118/full_output.txt' class='file_link'>full_output.txt</a></html>



x^20 + 20*x^19*y + 190*x^18*y^2 + 1140*x^17*y^3 + 4845*x^16*y^4 + 15504*x^15*y^5 + 38760*x^14*y^6 + 77520*x^13*y^7 + 125970*x^12*y^8 + 167960*x^11*y^9 + 184756*x^10*y^10 + 167960*x^9*y^11 + 125970*x^8*y^12 + 77520*x^7*y^13 + 38760*x^6*y^14 + 15504*x^5*y^15 + 4845*x^4*y^16 + 1140*x^3*y^17 + 190*x^2*y^18 + 20*x*y^19 + y^20 + 20*x^19*z + 380*x^18*y*z + 3420*x^17*y^2*z + 19380*x^16*y^3*z + 77520*x^15*y^4*z + 232560*x^14*y^5*z + 542640*x^13*y^6*z + 1007760*x^12*y^7*z + 1511640*x^11*y^8*z + 1847560*x^10*y^9*z + 1847560*x^9*y^10*z + 1511640*x^8*y^11*z + 1007760*x^7*y^12*z + 542640*x^6*y^13*z + 232560*x^5*y^14*z + 77520*x^4*y^15*z + 19380*x^3*y^16*z + 3420*x^2*y^17*z + 380*x*y^18*z + 20*y^19*z + 190*x^18*z^2 + 3420*x^17*y*z^2 + 29070*x^16*y^2*z^2 + 155040*x^15*y^3*z^2 + 581400*x^14*y^4*z^2 + 1627920*x^13*y^5*z^2 + 3527160*x^12*y^6*z^2 + 6046560*x^11*y^7*z^2 + 8314020*x^10*y^8*z^2 + 9237800*x^9*y^9*z^2 + 8314020*x^8*y^10*z^2 + 6046560*x^7*y^11*z^2 + 3527160*x^6*y^12*z^2 + 1627920*x^5*y^13*z^2 + 581400*x^4*y^14*z^2 + 155040*x^3*y^15*z^2 + 29070*x^2*y^16*z^2 + 3420*x*y^17*z^2 + 190*y^18*z^2 + 1140*x^17*z^3 + 19380*x^16*y*z^3 + 155040*x^15*y^2*z^3 + 775200*x^14*y^3*z^3 + 2713200*x^13*y^4*z^3 + 7054320*x^12*y^5*z^3 + 14108640*x^11*y^6*z^3 + 22170720*x^10*y^7*z^3 + 27713400*x^9*y^8*z^3 + 27713400*x^8*y^9*z^3 + 22170720*x^7*y^10*z^3 + 14108640*x^6*y^11*z^3 + 7054320*x^5*y^12*z^3 + 2713200*x^4*y^13*z^3 + 775200*x^3*y^14*z^3 + 155040*x^2*y^15*z^3 + 19380*x*y^16*z^3 + 1140*y^17*z^3 + 4845*x^16*z^4 + 77520*x^15*y*z^4 + 581400*x^14*y^2*z^4 + 2713200*x^13*y^3*z^4 + 8817900*x^12*y^4*z^4 + 21162960*x^11*y^5*z^4 + 38798760*x^10*y^6*z^4 + 55426800*x^9*y^7*z^4 + 62355150*x^8*y^8*z^4 + 55426800*x^7*y^9*z^4 + 38798760*x^6*y^10*z^4 + 21162960*x^5*y^11*z^4 + 8817900*x^4*y^12*z^4 + 2713200*x^3*y^13*z^4 + 581400*x^2*y^14*z^4 + 77520*x*y^15*z^4 + 4845*y^16*z^4 + 15504*x^15*z^5 + 232560*x^14*y*z^5 + 1627920*x^13*y^2*z^5 + 7054320*x^12*y^3*z^5 + 21162960*x^11*y^4*z^5 + 46558512*x^10*y^5*z^5 + 77597520*x^9*y^6*z^5 + 99768240*x^8*y^7*z^5 + 99768240*x^7*y^8*z^5 + 77597520*x^6*y^9*z^5 + 46558512*x^5*y^10*z^5 + 21162960*x^4*y^11*z^5 + 7054320*x^3*y^12*z^5 + 1627920*x^2*y^13*z^5 + 232560*x*y^14*z^5 + 15504*y^15*z^5 + 38760*x^14*z^6 + 542640*x^13*y*z^6 + 3527160*x^12*y^2*z^6 + 14108640*x^11*y^3*z^6 + 38798760*x^10*y^4*z^6 + 77597520*x^9*y^5*z^6 + 116396280*x^8*y^6*z^6 + 133024320*x^7*y^7*z^6 + 116396280*x^6*y^8*z^6 + 77597520*x^5*y^9*z^6 + 38798760*x^4*y^10*z^6 + 14108640*x^3*y^11*z^6 + 3527160*x^2*y^12*z^6 + 542640*x*y^13*z^6 + 38760*y^14*z^6 + 77520*x^13*z^7 + 1007760*x^12*y*z^7 + 6046560*x^11*y^2*z^7 + 22170720*x^10*y^3*z^7 + 55426800*x^9*y^4*z^7 + 99768240*x^8*y^5*z^7 + 133024320*x^7*y^6*z^7 + 133024320*x^6*y^7*z^7 + 99768240*x^5*y^8*z^7 + 55426800*x^4*y^9*z^7 + 22170720*x^3*y^10*z^7 + 6046560*x^2*y^11*z^7 + 1007760*x*y^12*z^7 + 77520*y^13*z^7 + 125970*x^12*z^8 + 1511640*x^11*y*z^8 + 8314020*x^10*y^2*z^8 + 27713400*x^9*y^3*z^8 + 62355150*x^8*y^4*z^8 + 99768240*x^7*y^5*z^8 + 116396280*x^6*y^6*z^8 + 99768240*x^5*y^7*z^8 + 62355150*x^4*y^8*z^8 + 27713400*x^3*y^9*z^8 + 8314020*x^2*y^10*z^8 + 1511640*x*y^11*z^8 + 125970*y^12*z^8 + 167960*x^11*z^9 + 1847560*x^10*y*z^9 + 9237800*x^9*y^2*z^9 + 27713400*x^8*y^3*z^9 + 55426800*x^7*y^4*z^9 + 77597520*x^6*y^5*z^9 + 77597520*x^5*y^6*z^9 + 55426800*x^4*y^7*z^9 + 27713400*x^3*y^8*z^9 + 9237800*x^2*y^9*z^9 + 1847560*x*y^10*z^9 + 167960*y^11*z^9 + 184756*x^10*z^10 + 1847560*x^9*y*z^10 + 8314020*x^8*y^2*z^10 + 22170720*x^7*y^3*z^10 + 38798760*x^6*y^4*z^10 + 46558512*x^5*y^5*z^10 + 38798760*x^4*y^6*z^10 + 22170720*x^3*y^7*z^10 + 8314020*x^2*y^8*z^10 + 1847560*x*y^9*z^10 + 184756*y^10*z^10 + 167960*x^9*z^11 + 1511640*x^8*y*z^11 + 6046560*x^7*y^2*z^11 + 14108640*x^6*y^3*z^11 + 21162960*x^5*y^4*z^11 + 21162960*x^4*y^5*z^11 + 14108640*x^3*y^6*z^11 + 6046560*x^2*y^7*z^11 + 1511640*x*y^8*z^11 + 167960*y^9*z^11 + 125970*x^8*z^12 + 1007760*x^7*y*z^12 + 3527160*x^6*y^2*z^12 + 7054320*x^5*y^3*z^12 + 8817900*x^4*y^4*z^12 + 7054320*x^3*y^5*z^12 + 3527160*x^2*y^6*z^12 + 1007760*x*y^7*z^12 + 125970*y^8*z^12 + 77520*x^7*z^13 + 542640*x^6*y*z^13 + 1627920*x^5*y^2*z^13 + 2713200*x^4*y^3*z^13 + 2713200*x^3*y^4*z^13 + 1627920*x^2*y^5*z^13 + 542640*x*y^6*z^13 + 77520*y^7*z^13 + 38760*x^6*z^14 + 232560*x^5*y*z^14 + 581400*x^4*y^2*z^14 + 775200*x^3*y^3*z^14 + 581400*x^2*y^4*z^14 + 232560*x*y^5*z^14 + 38760*y^6*z^14 + 15504*x^5*z^15 + 77520*x^4*y*z^15 + 155040*x^3*y^2*z^15 + 155040*x^2*y^3*z^15 + 77520*x*y^4*z^15 + 15504*y^5*z^15 + 4845*x^4*z^16 + 19380*x^3*y*z^16 + 29070*x^2*y^2*z^16 + 19380*x*y^3*z^16 + 4845*y^4*z^16 + 1140*x^3*z^17 + 3420*x^2*y*z^17 + 3420*x*y^2*z^17 + 1140*y^3*z^17 + 190*x^2*z^18 + 380*x*y*z^18 + 190*y^2*z^18 + 20*x*z^19 + 20*y*z^19 + z^20 + 20*x^19 + 380*x^18*y + 3420*x^17*y^2 + 19380*x^16*y^3 + 77520*x^15*y^4 + 232560*x^14*y^5 + 542640*x^13*y^6 + 1007760*x^12*y^7 + 1511640*x^11*y^8 + 1847560*x^10*y^9 + 1847560*x^9*y^10 + 1511640*x^8*y^11 + 1007760*x^7*y^12 + 542640*x^6*y^13 + 232560*x^5*y^14 + 77520*x^4*y^15 + 19380*x^3*y^16 + 3420*x^2*y^17 + 380*x*y^18 + 20*y^19 + 380*x^18*z + 6840*x^17*y*z + 58140*x^16*y^2*z + 310080*x^15*y^3*z + 1162800*x^14*y^4*z + 3255840*x^13*y^5*z + 7054320*x^12*y^6*z + 12093120*x^11*y^7*z + 16628040*x^10*y^8*z + 18475600*x^9*y^9*z + 16628040*x^8*y^10*z + 12093120*x^7*y^11*z + 7054320*x^6*y^12*z + 3255840*x^5*y^13*z + 1162800*x^4*y^14*z + 310080*x^3*y^15*z + 58140*x^2*y^16*z + 6840*x*y^17*z + 380*y^18*z + 3420*x^17*z^2 + 58140*x^16*y*z^2 + 465120*x^15*y^2*z^2 + 2325600*x^14*y^3*z^2 + 8139600*x^13*y^4*z^2 + 21162960*x^12*y^5*z^2 + 42325920*x^11*y^6*z^2 + 66512160*x^10*y^7*z^2 + 83140200*x^9*y^8*z^2 + 83140200*x^8*y^9*z^2 + 66512160*x^7*y^10*z^2 + 42325920*x^6*y^11*z^2 + 21162960*x^5*y^12*z^2 + 8139600*x^4*y^13*z^2 + 2325600*x^3*y^14*z^2 + 465120*x^2*y^15*z^2 + 58140*x*y^16*z^2 + 3420*y^17*z^2 + 19380*x^16*z^3 + 310080*x^15*y*z^3 + 2325600*x^14*y^2*z^3 + 10852800*x^13*y^3*z^3 + 35271600*x^12*y^4*z^3 + 84651840*x^11*y^5*z^3 + 155195040*x^10*y^6*z^3 + 221707200*x^9*y^7*z^3 + 249420600*x^8*y^8*z^3 + 221707200*x^7*y^9*z^3 + 155195040*x^6*y^10*z^3 + 84651840*x^5*y^11*z^3 + 35271600*x^4*y^12*z^3 + 10852800*x^3*y^13*z^3 + 2325600*x^2*y^14*z^3 + 310080*x*y^15*z^3 + 19380*y^16*z^3 + 77520*x^15*z^4 + 1162800*x^14*y*z^4 + 8139600*x^13*y^2*z^4 + 35271600*x^12*y^3*z^4 + 105814800*x^11*y^4*z^4 + 232792560*x^10*y^5*z^4 + 387987600*x^9*y^6*z^4 + 498841200*x^8*y^7*z^4 + 498841200*x^7*y^8*z^4 + 387987600*x^6*y^9*z^4 + 232792560*x^5*y^10*z^4 + 105814800*x^4*y^11*z^4 + 35271600*x^3*y^12*z^4 + 8139600*x^2*y^13*z^4 + 1162800*x*y^14*z^4 + 77520*y^15*z^4 + 232560*x^14*z^5 + 3255840*x^13*y*z^5 + 21162960*x^12*y^2*z^5 + 84651840*x^11*y^3*z^5 + 232792560*x^10*y^4*z^5 + 465585120*x^9*y^5*z^5 + 698377680*x^8*y^6*z^5 + 798145920*x^7*y^7*z^5 + 698377680*x^6*y^8*z^5 + 465585120*x^5*y^9*z^5 + 232792560*x^4*y^10*z^5 + 84651840*x^3*y^11*z^5 + 21162960*x^2*y^12*z^5 + 3255840*x*y^13*z^5 + 232560*y^14*z^5 + 542640*x^13*z^6 + 7054320*x^12*y*z^6 + 42325920*x^11*y^2*z^6 + 155195040*x^10*y^3*z^6 + 387987600*x^9*y^4*z^6 + 698377680*x^8*y^5*z^6 + 931170240*x^7*y^6*z^6 + 931170240*x^6*y^7*z^6 + 698377680*x^5*y^8*z^6 + 387987600*x^4*y^9*z^6 + 155195040*x^3*y^10*z^6 + 42325920*x^2*y^11*z^6 + 7054320*x*y^12*z^6 + 542640*y^13*z^6 + 1007760*x^12*z^7 + 12093120*x^11*y*z^7 + 66512160*x^10*y^2*z^7 + 221707200*x^9*y^3*z^7 + 498841200*x^8*y^4*z^7 + 798145920*x^7*y^5*z^7 + 931170240*x^6*y^6*z^7 + 798145920*x^5*y^7*z^7 + 498841200*x^4*y^8*z^7 + 221707200*x^3*y^9*z^7 + 66512160*x^2*y^10*z^7 + 12093120*x*y^11*z^7 + 1007760*y^12*z^7 + 1511640*x^11*z^8 + 16628040*x^10*y*z^8 + 83140200*x^9*y^2*z^8 + 249420600*x^8*y^3*z^8 + 498841200*x^7*y^4*z^8 + 698377680*x^6*y^5*z^8 + 698377680*x^5*y^6*z^8 + 498841200*x^4*y^7*z^8 + 249420600*x^3*y^8*z^8 + 83140200*x^2*y^9*z^8 + 16628040*x*y^10*z^8 + 1511640*y^11*z^8 + 1847560*x^10*z^9 + 18475600*x^9*y*z^9 + 83140200*x^8*y^2*z^9 + 221707200*x^7*y^3*z^9 + 387987600*x^6*y^4*z^9 + 465585120*x^5*y^5*z^9 + 387987600*x^4*y^6*z^9 + 221707200*x^3*y^7*z^9 + 83140200*x^2*y^8*z^9 + 18475600*x*y^9*z^9 + 1847560*y^10*z^9 + 1847560*x^9*z^10 + 16628040*x^8*y*z^10 + 66512160*x^7*y^2*z^10 + 155195040*x^6*y^3*z^10 + 232792560*x^5*y^4*z^10 + 232792560*x^4*y^5*z^10 + 155195040*x^3*y^6*z^10 + 66512160*x^2*y^7*z^10 + 16628040*x*y^8*z^10 + 1847560*y^9*z^10 + 1511640*x^8*z^11 + 12093120*x^7*y*z^11 + 42325920*x^6*y^2*z^11 + 84651840*x^5*y^3*z^11 + 105814800*x^4*y^4*z^11 + 84651840*x^3*y^5*z^11 + 42325920*x^2*y^6*z^11 + 12093120*x*y^7*z^11 + 1511640*y^8*z^11 + 1007760*x^7*z^12 + 7054320*x^6*y*z^12 + 21162960*x^5*y^2*z^12 + 35271600*x^4*y^3*z^12 + 35271600*x^3*y^4*z^12 + 21162960*x^2*y^5*z^12 + 7054320*x*y^6*z^12 + 1007760*y^7*z^12 + 542640*x^6*z^13 + 3255840*x^5*y*z^13 + 8139600*x^4*y^2*z^13 + 10852800*x^3*y^3*z^13 + 8139600*x^2*y^4*z^13 + 3255840*x*y^5*z^13 + 542640*y^6*z^13 + 232560*x^5*z^14 + 1162800*x^4*y*z^14 + 2325600*x^3*y^2*z^14 + 2325600*x^2*y^3*z^14 + 1162800*x*y^4*z^14 + 232560*y^5*z^14 + 77520*x^4*z^15 + 310080*x^3*y*z^15 + 465120*x^2*y^2*z^15 + 310080*x*y^3*z^15 + 77520*y^4*z^15 + 19380*x^3*z^16 + 58140*x^2*y*z^16 + 58140*x*y^2*z^16 + 19380*y^3*z^16 + 3420*x^2*z^17 + 6840*x*y*z^17 + 3420*y^2*z^17 + 380*x*z^18 + 380*y*z^18 + 20*z^19 + 190*x^18 + 3420*x^17*y + 29070*x^16*y^2 + 155040*x^15*y^3 + 581400*x^14*y^4 + 1627920*x^13*y^5 + 3527160*x^12*y^6 + 6046560*x^11*y^7 + 8314020*x^10*y^8 + 9237800*x^9*y^9 + 8314020*x^8*y^10 + 6046560*x^7*y^11 + 3527160*x^6*y^12 + 1627920*x^5*y^13 + 581400*x^4*y^14 + 155040*x^3*y^15 + 29070*x^2*y^16 + 3420*x*y^17 + 190*y^18 + 3420*x^17*z + 58140*x^16*y*z + 465120*x^15*y^2*z + 2325600*x^14*y^3*z + 8139600*x^13*y^4*z + 21162960*x^12*y^5*z + 42325920*x^11*y^6*z + 66512160*x^10*y^7*z + 83140200*x^9*y^8*z + 83140200*x^8*y^9*z + 66512160*x^7*y^10*z + 42325920*x^6*y^11*z + 21162960*x^5*y^12*z + 8139600*x^4*y^13*z + 2325600*x^3*y^14*z + 465120*x^2*y^15*z + 58140*x*y^16*z + 3420*y^17*z + 29070*x^16*z^2 + 465120*x^15*y*z^2 + 3488400*x^14*y^2*z^2 + 16279200*x^13*y^3*z^2 + 52907400*x^12*y^4*z^2 + 126977760*x^11*y^5*z^2 + 232792560*x^10*y^6*z^2 + 332560800*x^9*y^7*z^2 + 374130900*x^8*y^8*z^2 + 332560800*x^7*y^9*z^2 + 232792560*x^6*y^10*z^2 + 126977760*x^5*y^11*z^2 + 52907400*x^4*y^12*z^2 + 16279200*x^3*y^13*z^2 + 3488400*x^2*y^14*z^2 + 465120*x*y^15*z^2 + 29070*y^16*z^2 + 155040*x^15*z^3 + 2325600*x^14*y*z^3 + 16279200*x^13*y^2*z^3 + 70543200*x^12*y^3*z^3 + 211629600*x^11*y^4*z^3 + 465585120*x^10*y^5*z^3 + 775975200*x^9*y^6*z^3 + 997682400*x^8*y^7*z^3 + 997682400*x^7*y^8*z^3 + 775975200*x^6*y^9*z^3 + 465585120*x^5*y^10*z^3 + 211629600*x^4*y^11*z^3 + 70543200*x^3*y^12*z^3 + 16279200*x^2*y^13*z^3 + 2325600*x*y^14*z^3 + 155040*y^15*z^3 + 581400*x^14*z^4 + 8139600*x^13*y*z^4 + 52907400*x^12*y^2*z^4 + 211629600*x^11*y^3*z^4 + 581981400*x^10*y^4*z^4 + 1163962800*x^9*y^5*z^4 + 1745944200*x^8*y^6*z^4 + 1995364800*x^7*y^7*z^4 + 1745944200*x^6*y^8*z^4 + 1163962800*x^5*y^9*z^4 + 581981400*x^4*y^10*z^4 + 211629600*x^3*y^11*z^4 + 52907400*x^2*y^12*z^4 + 8139600*x*y^13*z^4 + 581400*y^14*z^4 + 1627920*x^13*z^5 + 21162960*x^12*y*z^5 + 126977760*x^11*y^2*z^5 + 465585120*x^10*y^3*z^5 + 1163962800*x^9*y^4*z^5 + 2095133040*x^8*y^5*z^5 + 2793510720*x^7*y^6*z^5 + 2793510720*x^6*y^7*z^5 + 2095133040*x^5*y^8*z^5 + 1163962800*x^4*y^9*z^5 + 465585120*x^3*y^10*z^5 + 126977760*x^2*y^11*z^5 + 21162960*x*y^12*z^5 + 1627920*y^13*z^5 + 3527160*x^12*z^6 + 42325920*x^11*y*z^6 + 232792560*x^10*y^2*z^6 + 775975200*x^9*y^3*z^6 + 1745944200*x^8*y^4*z^6 + 2793510720*x^7*y^5*z^6 + 3259095840*x^6*y^6*z^6 + 2793510720*x^5*y^7*z^6 + 1745944200*x^4*y^8*z^6 + 775975200*x^3*y^9*z^6 + 232792560*x^2*y^10*z^6 + 42325920*x*y^11*z^6 + 3527160*y^12*z^6 + 6046560*x^11*z^7 + 66512160*x^10*y*z^7 + 332560800*x^9*y^2*z^7 + 997682400*x^8*y^3*z^7 + 1995364800*x^7*y^4*z^7 + 2793510720*x^6*y^5*z^7 + 2793510720*x^5*y^6*z^7 + 1995364800*x^4*y^7*z^7 + 997682400*x^3*y^8*z^7 + 332560800*x^2*y^9*z^7 + 66512160*x*y^10*z^7 + 6046560*y^11*z^7 + 8314020*x^10*z^8 + 83140200*x^9*y*z^8 + 374130900*x^8*y^2*z^8 + 997682400*x^7*y^3*z^8 + 1745944200*x^6*y^4*z^8 + 2095133040*x^5*y^5*z^8 + 1745944200*x^4*y^6*z^8 + 997682400*x^3*y^7*z^8 + 374130900*x^2*y^8*z^8 + 83140200*x*y^9*z^8 + 8314020*y^10*z^8 + 9237800*x^9*z^9 + 83140200*x^8*y*z^9 + 332560800*x^7*y^2*z^9 + 775975200*x^6*y^3*z^9 + 1163962800*x^5*y^4*z^9 + 1163962800*x^4*y^5*z^9 + 775975200*x^3*y^6*z^9 + 332560800*x^2*y^7*z^9 + 83140200*x*y^8*z^9 + 9237800*y^9*z^9 + 8314020*x^8*z^10 + 66512160*x^7*y*z^10 + 232792560*x^6*y^2*z^10 + 465585120*x^5*y^3*z^10 + 581981400*x^4*y^4*z^10 + 465585120*x^3*y^5*z^10 + 232792560*x^2*y^6*z^10 + 66512160*x*y^7*z^10 + 8314020*y^8*z^10 + 6046560*x^7*z^11 + 42325920*x^6*y*z^11 + 126977760*x^5*y^2*z^11 + 211629600*x^4*y^3*z^11 + 211629600*x^3*y^4*z^11 + 126977760*x^2*y^5*z^11 + 42325920*x*y^6*z^11 + 6046560*y^7*z^11 + 3527160*x^6*z^12 + 21162960*x^5*y*z^12 + 52907400*x^4*y^2*z^12 + 70543200*x^3*y^3*z^12 + 52907400*x^2*y^4*z^12 + 21162960*x*y^5*z^12 + 3527160*y^6*z^12 + 1627920*x^5*z^13 + 8139600*x^4*y*z^13 + 16279200*x^3*y^2*z^13 + 16279200*x^2*y^3*z^13 + 8139600*x*y^4*z^13 + 1627920*y^5*z^13 + 581400*x^4*z^14 + 2325600*x^3*y*z^14 + 3488400*x^2*y^2*z^14 + 2325600*x*y^3*z^14 + 581400*y^4*z^14 + 155040*x^3*z^15 + 465120*x^2*y*z^15 + 465120*x*y^2*z^15 + 155040*y^3*z^15 + 29070*x^2*z^16 + 58140*x*y*z^16 + 29070*y^2*z^16 + 3420*x*z^17 + 3420*y*z^17 + 190*z^18 + 1140*x^17 + 19380*x^16*y + 155040*x^15*y^2 + 775200*x^14*y^3 + 2713200*x^13*y^4 + 7054320*x^12*y^5 + 14108640*x^11*y^6 + 22170720*x^10*y^7 + 27713400*x^9*y^8 + 27713400*x^8*y^9 + 22170720*x^7*y^10 + 14108640*x^6*y^11 + 7054320*x^5*y^12 + 2713200*x^4*y^13 + 775200*x^3*y^14 + 155040*x^2*y^15 + 19380*x*y^16 + 1140*y^17 + 19380*x^16*z + 310080*x^15*y*z + 2325600*x^14*y^2*z + 10852800*x^13*y^3*z + 35271600*x^12*y^4*z + 84651840*x^11*y^5*z + 155195040*x^10*y^6*z + 221707200*x^9*y^7*z + 249420600*x^8*y^8*z + 221707200*x^7*y^9*z + 155195040*x^6*y^10*z + 84651840*x^5*y^11*z + 35271600*x^4*y^12*z + 10852800*x^3*y^13*z + 2325600*x^2*y^14*z + 310080*x*y^15*z + 19380*y^16*z + 155040*x^15*z^2 + 2325600*x^14*y*z^2 + 16279200*x^13*y^2*z^2 + 70543200*x^12*y^3*z^2 + 211629600*x^11*y^4*z^2 + 465585120*x^10*y^5*z^2 + 775975200*x^9*y^6*z^2 + 997682400*x^8*y^7*z^2 + 997682400*x^7*y^8*z^2 + 775975200*x^6*y^9*z^2 + 465585120*x^5*y^10*z^2 + 211629600*x^4*y^11*z^2 + 70543200*x^3*y^12*z^2 + 16279200*x^2*y^13*z^2 + 2325600*x*y^14*z^2 + 155040*y^15*z^2 + 775200*x^14*z^3 + 10852800*x^13*y*z^3 + 70543200*x^12*y^2*z^3 + 282172800*x^11*y^3*z^3 + 775975200*x^10*y^4*z^3 + 1551950400*x^9*y^5*z^3 + 2327925600*x^8*y^6*z^3 + 2660486400*x^7*y^7*z^3 + 2327925600*x^6*y^8*z^3 + 1551950400*x^5*y^9*z^3 + 775975200*x^4*y^10*z^3 + 282172800*x^3*y^11*z^3 + 70543200*x^2*y^12*z^3 + 10852800*x*y^13*z^3 + 775200*y^14*z^3 + 2713200*x^13*z^4 + 35271600*x^12*y*z^4 + 211629600*x^11*y^2*z^4 + 775975200*x^10*y^3*z^4 + 1939938000*x^9*y^4*z^4 + 3491888400*x^8*y^5*z^4 + 4655851200*x^7*y^6*z^4 + 4655851200*x^6*y^7*z^4 + 3491888400*x^5*y^8*z^4 + 1939938000*x^4*y^9*z^4 + 775975200*x^3*y^10*z^4 + 211629600*x^2*y^11*z^4 + 35271600*x*y^12*z^4 + 2713200*y^13*z^4 + 7054320*x^12*z^5 + 84651840*x^11*y*z^5 + 465585120*x^10*y^2*z^5 + 1551950400*x^9*y^3*z^5 + 3491888400*x^8*y^4*z^5 + 5587021440*x^7*y^5*z^5 + 6518191680*x^6*y^6*z^5 + 5587021440*x^5*y^7*z^5 + 3491888400*x^4*y^8*z^5 + 1551950400*x^3*y^9*z^5 + 465585120*x^2*y^10*z^5 + 84651840*x*y^11*z^5 + 7054320*y^12*z^5 + 14108640*x^11*z^6 + 155195040*x^10*y*z^6 + 775975200*x^9*y^2*z^6 + 2327925600*x^8*y^3*z^6 + 4655851200*x^7*y^4*z^6 + 6518191680*x^6*y^5*z^6 + 6518191680*x^5*y^6*z^6 + 4655851200*x^4*y^7*z^6 + 2327925600*x^3*y^8*z^6 + 775975200*x^2*y^9*z^6 + 155195040*x*y^10*z^6 + 14108640*y^11*z^6 + 22170720*x^10*z^7 + 221707200*x^9*y*z^7 + 997682400*x^8*y^2*z^7 + 2660486400*x^7*y^3*z^7 + 4655851200*x^6*y^4*z^7 + 5587021440*x^5*y^5*z^7 + 4655851200*x^4*y^6*z^7 + 2660486400*x^3*y^7*z^7 + 997682400*x^2*y^8*z^7 + 221707200*x*y^9*z^7 + 22170720*y^10*z^7 + 27713400*x^9*z^8 + 249420600*x^8*y*z^8 + 997682400*x^7*y^2*z^8 + 2327925600*x^6*y^3*z^8 + 3491888400*x^5*y^4*z^8 + 

...

2560*y^14*z + 1627920*x^13*z^2 + 21162960*x^12*y*z^2 + 126977760*x^11*y^2*z^2 + 465585120*x^10*y^3*z^2 + 1163962800*x^9*y^4*z^2 + 2095133040*x^8*y^5*z^2 + 2793510720*x^7*y^6*z^2 + 2793510720*x^6*y^7*z^2 + 2095133040*x^5*y^8*z^2 + 1163962800*x^4*y^9*z^2 + 465585120*x^3*y^10*z^2 + 126977760*x^2*y^11*z^2 + 21162960*x*y^12*z^2 + 1627920*y^13*z^2 + 7054320*x^12*z^3 + 84651840*x^11*y*z^3 + 465585120*x^10*y^2*z^3 + 1551950400*x^9*y^3*z^3 + 3491888400*x^8*y^4*z^3 + 5587021440*x^7*y^5*z^3 + 6518191680*x^6*y^6*z^3 + 5587021440*x^5*y^7*z^3 + 3491888400*x^4*y^8*z^3 + 1551950400*x^3*y^9*z^3 + 465585120*x^2*y^10*z^3 + 84651840*x*y^11*z^3 + 7054320*y^12*z^3 + 21162960*x^11*z^4 + 232792560*x^10*y*z^4 + 1163962800*x^9*y^2*z^4 + 3491888400*x^8*y^3*z^4 + 6983776800*x^7*y^4*z^4 + 9777287520*x^6*y^5*z^4 + 9777287520*x^5*y^6*z^4 + 6983776800*x^4*y^7*z^4 + 3491888400*x^3*y^8*z^4 + 1163962800*x^2*y^9*z^4 + 232792560*x*y^10*z^4 + 21162960*y^11*z^4 + 46558512*x^10*z^5 + 465585120*x^9*y*z^5 + 2095133040*x^8*y^2*z^5 + 5587021440*x^7*y^3*z^5 + 9777287520*x^6*y^4*z^5 + 11732745024*x^5*y^5*z^5 + 9777287520*x^4*y^6*z^5 + 5587021440*x^3*y^7*z^5 + 2095133040*x^2*y^8*z^5 + 465585120*x*y^9*z^5 + 46558512*y^10*z^5 + 77597520*x^9*z^6 + 698377680*x^8*y*z^6 + 2793510720*x^7*y^2*z^6 + 6518191680*x^6*y^3*z^6 + 9777287520*x^5*y^4*z^6 + 9777287520*x^4*y^5*z^6 + 6518191680*x^3*y^6*z^6 + 2793510720*x^2*y^7*z^6 + 698377680*x*y^8*z^6 + 77597520*y^9*z^6 + 99768240*x^8*z^7 + 798145920*x^7*y*z^7 + 2793510720*x^6*y^2*z^7 + 5587021440*x^5*y^3*z^7 + 6983776800*x^4*y^4*z^7 + 5587021440*x^3*y^5*z^7 + 2793510720*x^2*y^6*z^7 + 798145920*x*y^7*z^7 + 99768240*y^8*z^7 + 99768240*x^7*z^8 + 698377680*x^6*y*z^8 + 2095133040*x^5*y^2*z^8 + 3491888400*x^4*y^3*z^8 + 3491888400*x^3*y^4*z^8 + 2095133040*x^2*y^5*z^8 + 698377680*x*y^6*z^8 + 99768240*y^7*z^8 + 77597520*x^6*z^9 + 465585120*x^5*y*z^9 + 1163962800*x^4*y^2*z^9 + 1551950400*x^3*y^3*z^9 + 1163962800*x^2*y^4*z^9 + 465585120*x*y^5*z^9 + 77597520*y^6*z^9 + 46558512*x^5*z^10 + 232792560*x^4*y*z^10 + 465585120*x^3*y^2*z^10 + 465585120*x^2*y^3*z^10 + 232792560*x*y^4*z^10 + 46558512*y^5*z^10 + 21162960*x^4*z^11 + 84651840*x^3*y*z^11 + 126977760*x^2*y^2*z^11 + 84651840*x*y^3*z^11 + 21162960*y^4*z^11 + 7054320*x^3*z^12 + 21162960*x^2*y*z^12 + 21162960*x*y^2*z^12 + 7054320*y^3*z^12 + 1627920*x^2*z^13 + 3255840*x*y*z^13 + 1627920*y^2*z^13 + 232560*x*z^14 + 232560*y*z^14 + 15504*z^15 + 38760*x^14 + 542640*x^13*y + 3527160*x^12*y^2 + 14108640*x^11*y^3 + 38798760*x^10*y^4 + 77597520*x^9*y^5 + 116396280*x^8*y^6 + 133024320*x^7*y^7 + 116396280*x^6*y^8 + 77597520*x^5*y^9 + 38798760*x^4*y^10 + 14108640*x^3*y^11 + 3527160*x^2*y^12 + 542640*x*y^13 + 38760*y^14 + 542640*x^13*z + 7054320*x^12*y*z + 42325920*x^11*y^2*z + 155195040*x^10*y^3*z + 387987600*x^9*y^4*z + 698377680*x^8*y^5*z + 931170240*x^7*y^6*z + 931170240*x^6*y^7*z + 698377680*x^5*y^8*z + 387987600*x^4*y^9*z + 155195040*x^3*y^10*z + 42325920*x^2*y^11*z + 7054320*x*y^12*z + 542640*y^13*z + 3527160*x^12*z^2 + 42325920*x^11*y*z^2 + 232792560*x^10*y^2*z^2 + 775975200*x^9*y^3*z^2 + 1745944200*x^8*y^4*z^2 + 2793510720*x^7*y^5*z^2 + 3259095840*x^6*y^6*z^2 + 2793510720*x^5*y^7*z^2 + 1745944200*x^4*y^8*z^2 + 775975200*x^3*y^9*z^2 + 232792560*x^2*y^10*z^2 + 42325920*x*y^11*z^2 + 3527160*y^12*z^2 + 14108640*x^11*z^3 + 155195040*x^10*y*z^3 + 775975200*x^9*y^2*z^3 + 2327925600*x^8*y^3*z^3 + 4655851200*x^7*y^4*z^3 + 6518191680*x^6*y^5*z^3 + 6518191680*x^5*y^6*z^3 + 4655851200*x^4*y^7*z^3 + 2327925600*x^3*y^8*z^3 + 775975200*x^2*y^9*z^3 + 155195040*x*y^10*z^3 + 14108640*y^11*z^3 + 38798760*x^10*z^4 + 387987600*x^9*y*z^4 + 1745944200*x^8*y^2*z^4 + 4655851200*x^7*y^3*z^4 + 8147739600*x^6*y^4*z^4 + 9777287520*x^5*y^5*z^4 + 8147739600*x^4*y^6*z^4 + 4655851200*x^3*y^7*z^4 + 1745944200*x^2*y^8*z^4 + 387987600*x*y^9*z^4 + 38798760*y^10*z^4 + 77597520*x^9*z^5 + 698377680*x^8*y*z^5 + 2793510720*x^7*y^2*z^5 + 6518191680*x^6*y^3*z^5 + 9777287520*x^5*y^4*z^5 + 9777287520*x^4*y^5*z^5 + 6518191680*x^3*y^6*z^5 + 2793510720*x^2*y^7*z^5 + 698377680*x*y^8*z^5 + 77597520*y^9*z^5 + 116396280*x^8*z^6 + 931170240*x^7*y*z^6 + 3259095840*x^6*y^2*z^6 + 6518191680*x^5*y^3*z^6 + 8147739600*x^4*y^4*z^6 + 6518191680*x^3*y^5*z^6 + 3259095840*x^2*y^6*z^6 + 931170240*x*y^7*z^6 + 116396280*y^8*z^6 + 133024320*x^7*z^7 + 931170240*x^6*y*z^7 + 2793510720*x^5*y^2*z^7 + 4655851200*x^4*y^3*z^7 + 4655851200*x^3*y^4*z^7 + 2793510720*x^2*y^5*z^7 + 931170240*x*y^6*z^7 + 133024320*y^7*z^7 + 116396280*x^6*z^8 + 698377680*x^5*y*z^8 + 1745944200*x^4*y^2*z^8 + 2327925600*x^3*y^3*z^8 + 1745944200*x^2*y^4*z^8 + 698377680*x*y^5*z^8 + 116396280*y^6*z^8 + 77597520*x^5*z^9 + 387987600*x^4*y*z^9 + 775975200*x^3*y^2*z^9 + 775975200*x^2*y^3*z^9 + 387987600*x*y^4*z^9 + 77597520*y^5*z^9 + 38798760*x^4*z^10 + 155195040*x^3*y*z^10 + 232792560*x^2*y^2*z^10 + 155195040*x*y^3*z^10 + 38798760*y^4*z^10 + 14108640*x^3*z^11 + 42325920*x^2*y*z^11 + 42325920*x*y^2*z^11 + 14108640*y^3*z^11 + 3527160*x^2*z^12 + 7054320*x*y*z^12 + 3527160*y^2*z^12 + 542640*x*z^13 + 542640*y*z^13 + 38760*z^14 + 77520*x^13 + 1007760*x^12*y + 6046560*x^11*y^2 + 22170720*x^10*y^3 + 55426800*x^9*y^4 + 99768240*x^8*y^5 + 133024320*x^7*y^6 + 133024320*x^6*y^7 + 99768240*x^5*y^8 + 55426800*x^4*y^9 + 22170720*x^3*y^10 + 6046560*x^2*y^11 + 1007760*x*y^12 + 77520*y^13 + 1007760*x^12*z + 12093120*x^11*y*z + 66512160*x^10*y^2*z + 221707200*x^9*y^3*z + 498841200*x^8*y^4*z + 798145920*x^7*y^5*z + 931170240*x^6*y^6*z + 798145920*x^5*y^7*z + 498841200*x^4*y^8*z + 221707200*x^3*y^9*z + 66512160*x^2*y^10*z + 12093120*x*y^11*z + 1007760*y^12*z + 6046560*x^11*z^2 + 66512160*x^10*y*z^2 + 332560800*x^9*y^2*z^2 + 997682400*x^8*y^3*z^2 + 1995364800*x^7*y^4*z^2 + 2793510720*x^6*y^5*z^2 + 2793510720*x^5*y^6*z^2 + 1995364800*x^4*y^7*z^2 + 997682400*x^3*y^8*z^2 + 332560800*x^2*y^9*z^2 + 66512160*x*y^10*z^2 + 6046560*y^11*z^2 + 22170720*x^10*z^3 + 221707200*x^9*y*z^3 + 997682400*x^8*y^2*z^3 + 2660486400*x^7*y^3*z^3 + 4655851200*x^6*y^4*z^3 + 5587021440*x^5*y^5*z^3 + 4655851200*x^4*y^6*z^3 + 2660486400*x^3*y^7*z^3 + 997682400*x^2*y^8*z^3 + 221707200*x*y^9*z^3 + 22170720*y^10*z^3 + 55426800*x^9*z^4 + 498841200*x^8*y*z^4 + 1995364800*x^7*y^2*z^4 + 4655851200*x^6*y^3*z^4 + 6983776800*x^5*y^4*z^4 + 6983776800*x^4*y^5*z^4 + 4655851200*x^3*y^6*z^4 + 1995364800*x^2*y^7*z^4 + 498841200*x*y^8*z^4 + 55426800*y^9*z^4 + 99768240*x^8*z^5 + 798145920*x^7*y*z^5 + 2793510720*x^6*y^2*z^5 + 5587021440*x^5*y^3*z^5 + 6983776800*x^4*y^4*z^5 + 5587021440*x^3*y^5*z^5 + 2793510720*x^2*y^6*z^5 + 798145920*x*y^7*z^5 + 99768240*y^8*z^5 + 133024320*x^7*z^6 + 931170240*x^6*y*z^6 + 2793510720*x^5*y^2*z^6 + 4655851200*x^4*y^3*z^6 + 4655851200*x^3*y^4*z^6 + 2793510720*x^2*y^5*z^6 + 931170240*x*y^6*z^6 + 133024320*y^7*z^6 + 133024320*x^6*z^7 + 798145920*x^5*y*z^7 + 1995364800*x^4*y^2*z^7 + 2660486400*x^3*y^3*z^7 + 1995364800*x^2*y^4*z^7 + 798145920*x*y^5*z^7 + 133024320*y^6*z^7 + 99768240*x^5*z^8 + 498841200*x^4*y*z^8 + 997682400*x^3*y^2*z^8 + 997682400*x^2*y^3*z^8 + 498841200*x*y^4*z^8 + 99768240*y^5*z^8 + 55426800*x^4*z^9 + 221707200*x^3*y*z^9 + 332560800*x^2*y^2*z^9 + 221707200*x*y^3*z^9 + 55426800*y^4*z^9 + 22170720*x^3*z^10 + 66512160*x^2*y*z^10 + 66512160*x*y^2*z^10 + 22170720*y^3*z^10 + 6046560*x^2*z^11 + 12093120*x*y*z^11 + 6046560*y^2*z^11 + 1007760*x*z^12 + 1007760*y*z^12 + 77520*z^13 + 125970*x^12 + 1511640*x^11*y + 8314020*x^10*y^2 + 27713400*x^9*y^3 + 62355150*x^8*y^4 + 99768240*x^7*y^5 + 116396280*x^6*y^6 + 99768240*x^5*y^7 + 62355150*x^4*y^8 + 27713400*x^3*y^9 + 8314020*x^2*y^10 + 1511640*x*y^11 + 125970*y^12 + 1511640*x^11*z + 16628040*x^10*y*z + 83140200*x^9*y^2*z + 249420600*x^8*y^3*z + 498841200*x^7*y^4*z + 698377680*x^6*y^5*z + 698377680*x^5*y^6*z + 498841200*x^4*y^7*z + 249420600*x^3*y^8*z + 83140200*x^2*y^9*z + 16628040*x*y^10*z + 1511640*y^11*z + 8314020*x^10*z^2 + 83140200*x^9*y*z^2 + 374130900*x^8*y^2*z^2 + 997682400*x^7*y^3*z^2 + 1745944200*x^6*y^4*z^2 + 2095133040*x^5*y^5*z^2 + 1745944200*x^4*y^6*z^2 + 997682400*x^3*y^7*z^2 + 374130900*x^2*y^8*z^2 + 83140200*x*y^9*z^2 + 8314020*y^10*z^2 + 27713400*x^9*z^3 + 249420600*x^8*y*z^3 + 997682400*x^7*y^2*z^3 + 2327925600*x^6*y^3*z^3 + 3491888400*x^5*y^4*z^3 + 3491888400*x^4*y^5*z^3 + 2327925600*x^3*y^6*z^3 + 997682400*x^2*y^7*z^3 + 249420600*x*y^8*z^3 + 27713400*y^9*z^3 + 62355150*x^8*z^4 + 498841200*x^7*y*z^4 + 1745944200*x^6*y^2*z^4 + 3491888400*x^5*y^3*z^4 + 4364860500*x^4*y^4*z^4 + 3491888400*x^3*y^5*z^4 + 1745944200*x^2*y^6*z^4 + 498841200*x*y^7*z^4 + 62355150*y^8*z^4 + 99768240*x^7*z^5 + 698377680*x^6*y*z^5 + 2095133040*x^5*y^2*z^5 + 3491888400*x^4*y^3*z^5 + 3491888400*x^3*y^4*z^5 + 2095133040*x^2*y^5*z^5 + 698377680*x*y^6*z^5 + 99768240*y^7*z^5 + 116396280*x^6*z^6 + 698377680*x^5*y*z^6 + 1745944200*x^4*y^2*z^6 + 2327925600*x^3*y^3*z^6 + 1745944200*x^2*y^4*z^6 + 698377680*x*y^5*z^6 + 116396280*y^6*z^6 + 99768240*x^5*z^7 + 498841200*x^4*y*z^7 + 997682400*x^3*y^2*z^7 + 997682400*x^2*y^3*z^7 + 498841200*x*y^4*z^7 + 99768240*y^5*z^7 + 62355150*x^4*z^8 + 249420600*x^3*y*z^8 + 374130900*x^2*y^2*z^8 + 249420600*x*y^3*z^8 + 62355150*y^4*z^8 + 27713400*x^3*z^9 + 83140200*x^2*y*z^9 + 83140200*x*y^2*z^9 + 27713400*y^3*z^9 + 8314020*x^2*z^10 + 16628040*x*y*z^10 + 8314020*y^2*z^10 + 1511640*x*z^11 + 1511640*y*z^11 + 125970*z^12 + 167960*x^11 + 1847560*x^10*y + 9237800*x^9*y^2 + 27713400*x^8*y^3 + 55426800*x^7*y^4 + 77597520*x^6*y^5 + 77597520*x^5*y^6 + 55426800*x^4*y^7 + 27713400*x^3*y^8 + 9237800*x^2*y^9 + 1847560*x*y^10 + 167960*y^11 + 1847560*x^10*z + 18475600*x^9*y*z + 83140200*x^8*y^2*z + 221707200*x^7*y^3*z + 387987600*x^6*y^4*z + 465585120*x^5*y^5*z + 387987600*x^4*y^6*z + 221707200*x^3*y^7*z + 83140200*x^2*y^8*z + 18475600*x*y^9*z + 1847560*y^10*z + 9237800*x^9*z^2 + 83140200*x^8*y*z^2 + 332560800*x^7*y^2*z^2 + 775975200*x^6*y^3*z^2 + 1163962800*x^5*y^4*z^2 + 1163962800*x^4*y^5*z^2 + 775975200*x^3*y^6*z^2 + 332560800*x^2*y^7*z^2 + 83140200*x*y^8*z^2 + 9237800*y^9*z^2 + 27713400*x^8*z^3 + 221707200*x^7*y*z^3 + 775975200*x^6*y^2*z^3 + 1551950400*x^5*y^3*z^3 + 1939938000*x^4*y^4*z^3 + 1551950400*x^3*y^5*z^3 + 775975200*x^2*y^6*z^3 + 221707200*x*y^7*z^3 + 27713400*y^8*z^3 + 55426800*x^7*z^4 + 387987600*x^6*y*z^4 + 1163962800*x^5*y^2*z^4 + 1939938000*x^4*y^3*z^4 + 1939938000*x^3*y^4*z^4 + 1163962800*x^2*y^5*z^4 + 387987600*x*y^6*z^4 + 55426800*y^7*z^4 + 77597520*x^6*z^5 + 465585120*x^5*y*z^5 + 1163962800*x^4*y^2*z^5 + 1551950400*x^3*y^3*z^5 + 1163962800*x^2*y^4*z^5 + 465585120*x*y^5*z^5 + 77597520*y^6*z^5 + 77597520*x^5*z^6 + 387987600*x^4*y*z^6 + 775975200*x^3*y^2*z^6 + 775975200*x^2*y^3*z^6 + 387987600*x*y^4*z^6 + 77597520*y^5*z^6 + 55426800*x^4*z^7 + 221707200*x^3*y*z^7 + 332560800*x^2*y^2*z^7 + 221707200*x*y^3*z^7 + 55426800*y^4*z^7 + 27713400*x^3*z^8 + 83140200*x^2*y*z^8 + 83140200*x*y^2*z^8 + 27713400*y^3*z^8 + 9237800*x^2*z^9 + 18475600*x*y*z^9 + 9237800*y^2*z^9 + 1847560*x*z^10 + 1847560*y*z^10 + 167960*z^11 + 184756*x^10 + 1847560*x^9*y + 8314020*x^8*y^2 + 22170720*x^7*y^3 + 38798760*x^6*y^4 + 46558512*x^5*y^5 + 38798760*x^4*y^6 + 22170720*x^3*y^7 + 8314020*x^2*y^8 + 1847560*x*y^9 + 184756*y^10 + 1847560*x^9*z + 16628040*x^8*y*z + 66512160*x^7*y^2*z + 155195040*x^6*y^3*z + 232792560*x^5*y^4*z + 232792560*x^4*y^5*z + 155195040*x^3*y^6*z + 66512160*x^2*y^7*z + 16628040*x*y^8*z + 1847560*y^9*z + 8314020*x^8*z^2 + 66512160*x^7*y*z^2 + 232792560*x^6*y^2*z^2 + 465585120*x^5*y^3*z^2 + 581981400*x^4*y^4*z^2 + 465585120*x^3*y^5*z^2 + 232792560*x^2*y^6*z^2 + 66512160*x*y^7*z^2 + 8314020*y^8*z^2 + 22170720*x^7*z^3 + 155195040*x^6*y*z^3 + 465585120*x^5*y^2*z^3 + 775975200*x^4*y^3*z^3 + 775975200*x^3*y^4*z^3 + 465585120*x^2*y^5*z^3 + 155195040*x*y^6*z^3 + 22170720*y^7*z^3 + 38798760*x^6*z^4 + 232792560*x^5*y*z^4 + 581981400*x^4*y^2*z^4 + 775975200*x^3*y^3*z^4 + 581981400*x^2*y^4*z^4 + 232792560*x*y^5*z^4 + 38798760*y^6*z^4 + 46558512*x^5*z^5 + 232792560*x^4*y*z^5 + 465585120*x^3*y^2*z^5 + 465585120*x^2*y^3*z^5 + 232792560*x*y^4*z^5 + 46558512*y^5*z^5 + 38798760*x^4*z^6 + 155195040*x^3*y*z^6 + 232792560*x^2*y^2*z^6 + 155195040*x*y^3*z^6 + 38798760*y^4*z^6 + 22170720*x^3*z^7 + 66512160*x^2*y*z^7 + 66512160*x*y^2*z^7 + 22170720*y^3*z^7 + 8314020*x^2*z^8 + 16628040*x*y*z^8 + 8314020*y^2*z^8 + 1847560*x*z^9 + 1847560*y*z^9 + 184756*z^10 + 167960*x^9 + 1511640*x^8*y + 6046560*x^7*y^2 + 14108640*x^6*y^3 + 21162960*x^5*y^4 + 21162960*x^4*y^5 + 14108640*x^3*y^6 + 6046560*x^2*y^7 + 1511640*x*y^8 + 167960*y^9 + 1511640*x^8*z + 12093120*x^7*y*z + 42325920*x^6*y^2*z + 84651840*x^5*y^3*z + 105814800*x^4*y^4*z + 84651840*x^3*y^5*z + 42325920*x^2*y^6*z + 12093120*x*y^7*z + 1511640*y^8*z + 6046560*x^7*z^2 + 42325920*x^6*y*z^2 + 126977760*x^5*y^2*z^2 + 211629600*x^4*y^3*z^2 + 211629600*x^3*y^4*z^2 + 126977760*x^2*y^5*z^2 + 42325920*x*y^6*z^2 + 6046560*y^7*z^2 + 14108640*x^6*z^3 + 84651840*x^5*y*z^3 + 211629600*x^4*y^2*z^3 + 282172800*x^3*y^3*z^3 + 211629600*x^2*y^4*z^3 + 84651840*x*y^5*z^3 + 14108640*y^6*z^3 + 21162960*x^5*z^4 + 105814800*x^4*y*z^4 + 211629600*x^3*y^2*z^4 + 211629600*x^2*y^3*z^4 + 105814800*x*y^4*z^4 + 21162960*y^5*z^4 + 21162960*x^4*z^5 + 84651840*x^3*y*z^5 + 126977760*x^2*y^2*z^5 + 84651840*x*y^3*z^5 + 21162960*y^4*z^5 + 14108640*x^3*z^6 + 42325920*x^2*y*z^6 + 42325920*x*y^2*z^6 + 14108640*y^3*z^6 + 6046560*x^2*z^7 + 12093120*x*y*z^7 + 6046560*y^2*z^7 + 1511640*x*z^8 + 1511640*y*z^8 + 167960*z^9 + 125970*x^8 + 1007760*x^7*y + 3527160*x^6*y^2 + 7054320*x^5*y^3 + 8817900*x^4*y^4 + 7054320*x^3*y^5 + 3527160*x^2*y^6 + 1007760*x*y^7 + 125970*y^8 + 1007760*x^7*z + 7054320*x^6*y*z + 21162960*x^5*y^2*z + 35271600*x^4*y^3*z + 35271600*x^3*y^4*z + 21162960*x^2*y^5*z + 7054320*x*y^6*z + 1007760*y^7*z + 3527160*x^6*z^2 + 21162960*x^5*y*z^2 + 52907400*x^4*y^2*z^2 + 70543200*x^3*y^3*z^2 + 52907400*x^2*y^4*z^2 + 21162960*x*y^5*z^2 + 3527160*y^6*z^2 + 7054320*x^5*z^3 + 35271600*x^4*y*z^3 + 70543200*x^3*y^2*z^3 + 70543200*x^2*y^3*z^3 + 35271600*x*y^4*z^3 + 7054320*y^5*z^3 + 8817900*x^4*z^4 + 35271600*x^3*y*z^4 + 52907400*x^2*y^2*z^4 + 35271600*x*y^3*z^4 + 8817900*y^4*z^4 + 7054320*x^3*z^5 + 21162960*x^2*y*z^5 + 21162960*x*y^2*z^5 + 7054320*y^3*z^5 + 3527160*x^2*z^6 + 7054320*x*y*z^6 + 3527160*y^2*z^6 + 1007760*x*z^7 + 1007760*y*z^7 + 125970*z^8 + 77520*x^7 + 542640*x^6*y + 1627920*x^5*y^2 + 2713200*x^4*y^3 + 2713200*x^3*y^4 + 1627920*x^2*y^5 + 542640*x*y^6 + 77520*y^7 + 542640*x^6*z + 3255840*x^5*y*z + 8139600*x^4*y^2*z + 10852800*x^3*y^3*z + 8139600*x^2*y^4*z + 3255840*x*y^5*z + 542640*y^6*z + 1627920*x^5*z^2 + 8139600*x^4*y*z^2 + 16279200*x^3*y^2*z^2 + 16279200*x^2*y^3*z^2 + 8139600*x*y^4*z^2 + 1627920*y^5*z^2 + 2713200*x^4*z^3 + 10852800*x^3*y*z^3 + 16279200*x^2*y^2*z^3 + 10852800*x*y^3*z^3 + 2713200*y^4*z^3 + 2713200*x^3*z^4 + 8139600*x^2*y*z^4 + 8139600*x*y^2*z^4 + 2713200*y^3*z^4 + 1627920*x^2*z^5 + 3255840*x*y*z^5 + 1627920*y^2*z^5 + 542640*x*z^6 + 542640*y*z^6 + 77520*z^7 + 38760*x^6 + 232560*x^5*y + 581400*x^4*y^2 + 775200*x^3*y^3 + 581400*x^2*y^4 + 232560*x*y^5 + 38760*y^6 + 232560*x^5*z + 1162800*x^4*y*z + 2325600*x^3*y^2*z + 2325600*x^2*y^3*z + 1162800*x*y^4*z + 232560*y^5*z + 581400*x^4*z^2 + 2325600*x^3*y*z^2 + 3488400*x^2*y^2*z^2 + 2325600*x*y^3*z^2 + 581400*y^4*z^2 + 775200*x^3*z^3 + 2325600*x^2*y*z^3 + 2325600*x*y^2*z^3 + 775200*y^3*z^3 + 581400*x^2*z^4 + 1162800*x*y*z^4 + 581400*y^2*z^4 + 232560*x*z^5 + 232560*y*z^5 + 38760*z^6 + 15504*x^5 + 77520*x^4*y + 155040*x^3*y^2 + 155040*x^2*y^3 + 77520*x*y^4 + 15504*y^5 + 77520*x^4*z + 310080*x^3*y*z + 465120*x^2*y^2*z + 310080*x*y^3*z + 77520*y^4*z + 155040*x^3*z^2 + 465120*x^2*y*z^2 + 465120*x*y^2*z^2 + 155040*y^3*z^2 + 155040*x^2*z^3 + 310080*x*y*z^3 + 155040*y^2*z^3 + 77520*x*z^4 + 77520*y*z^4 + 15504*z^5 + 4845*x^4 + 19380*x^3*y + 29070*x^2*y^2 + 19380*x*y^3 + 4845*y^4 + 19380*x^3*z + 58140*x^2*y*z + 58140*x*y^2*z + 19380*y^3*z + 29070*x^2*z^2 + 58140*x*y*z^2 + 29070*y^2*z^2 + 19380*x*z^3 + 19380*y*z^3 + 4845*z^4 + 1140*x^3 + 3420*x^2*y + 3420*x*y^2 + 1140*y^3 + 3420*x^2*z + 6840*x*y*z + 3420*y^2*z + 3420*x*z^2 + 3420*y*z^2 + 1140*z^3 + 190*x^2 + 380*x*y + 190*y^2 + 380*x*z + 380*y*z + 190*z^2 + 20*x + 20*y + 20*z + 1
}}}

{{{id=33|
type(f)
///
<type 'sage.rings.polynomial.multi_polynomial_libsingular.MPolynomial_libsingular'>
}}}

{{{id=34|
f = x+y+z+1
///
}}}

{{{id=120|
timeit('f*f')
///
625 loops, best of 3: 1.33 µs per loop
}}}

{{{id=121|
g = singular(f); g
///
x+y+z+1
}}}

{{{id=127|
type(g)
///
<class 'sage.interfaces.singular.SingularElement'>
}}}

{{{id=123|
g.name()
///
'sage11'
}}}

{{{id=128|
timeit('g*g')
///
625 loops, best of 3: 392 µs per loop
}}}

{{{id=126|
392/1.33
///
294.736842105263
}}}

{{{id=129|
k.<a> = GF(37^2)
///
}}}

{{{id=130|
type(k)
///
<type 'sage.rings.finite_field_givaro.FiniteField_givaro'>
}}}

{{{id=125|
timeit('a*a')
///
625 loops, best of 3: 320 ns per loop
}}}

{{{id=124|

///
}}}

{{{id=122|

///
}}}

{{{id=119|

///
625 loops, best of 3: 1.32 µs per loop
}}}

{{{id=113|
I= sage.rings.ideal.Cyclic(R)
///
}}}

{{{id=114|
I
///
Ideal (x + y + z + w + m, x*y + y*z + z*w + x*m + w*m, x*y*z + y*z*w + x*y*m + x*w*m + z*w*m, x*y*z*w + x*y*z*m + x*y*w*m + x*z*w*m + y*z*w*m, x*y*z*w*m - 1) of Multivariate Polynomial Ring in x, y, z, w, m over Rational Field
}}}

{{{id=117|
search_src('groebner_basis')
///
<html><font color="black"><h2>Search Source Code: groebner_basis</h2></font><font color="darkpurple"><ol><li><a href="/src/crypto/mq/mpolynomialsystem.py"><tt>crypto/mq/mpolynomialsystem.py</tt></a>
<li><a href="/src/crypto/mq/sbox.py"><tt>crypto/mq/sbox.py</tt></a>
<li><a href="/src/crypto/mq/sr.py"><tt>crypto/mq/sr.py</tt></a>
<li><a href="/src/rings/ideal.py"><tt>rings/ideal.py</tt></a>
<li><a href="/src/rings/polynomial/groebner_fan.py"><tt>rings/polynomial/groebner_fan.py</tt></a>
<li><a href="/src/rings/polynomial/multi_polynomial_ideal.py"><tt>rings/polynomial/multi_polynomial_ideal.py</tt></a>
<li><a href="/src/rings/polynomial/multi_polynomial_ideal_libsingular.pyx"><tt>rings/polynomial/multi_polynomial_ideal_libsingular.pyx</tt></a>
<li><a href="/src/rings/polynomial/pbori.pyx"><tt>rings/polynomial/pbori.pyx</tt></a>
<li><a href="/src/rings/polynomial/toy_buchberger.py"><tt>rings/polynomial/toy_buchberger.py</tt></a>
<li><a href="/src/schemes/generic/affine_space.py"><tt>schemes/generic/affine_space.py</tt></a>
<li><a href="/src/schemes/generic/projective_space.py"><tt>schemes/generic/projective_space.py</tt></a>
</ol></font></html>
}}}

{{{id=115|
I.groebner_basis??
///
}}}

{{{id=116|

///
}}}