jsMath

# Leveraging the Internet

## The SAGE Notebook

2 + 323
 325 325

## Math typesetting (via jsmath)

jsmath(r'\int_{0}^{2\pi} \frac{\sin(x^2)}{\cos(\theta x)} dx')
 Z02Ùsin(x2)cos(Òx)dx Z02Ùsin(x2)cos(Òx)dx
show(maxima('sin(x^2)').integrate(x))
 8pÙÒ°p2i+p2ÑerfÒ2(p2i+p2)xÓ+°p2iÀp2ÑerfÒ2(p2iÀp2)xÓÓ 8pÙÒ°p2i+p2ÑerfÒ2(p2i+p2)xÓ+°p2iÀp2ÑerfÒ2(p2iÀp2)xÓÓ

## Moin Moin Wiki included standard with SAGE

Trivial to setup wiki pre-configured with math typesetting standard.
wiki()
 Serving on localhost:9000 localhost - - [19/Jan/2007 16:13:19] "GET / HTTP/1.1" 404 - localhost - - [19/Jan/2007 16:13:20] "GET /MyStartingPage?action=edit HTTP/1.1" 200 - localhost - - [19/Jan/2007 16:13:38] "POST /MyStartingPage HTTP/1.1" 200 - Serving on localhost:9000 localhost - - [19/Jan/2007 16:13:19] "GET / HTTP/1.1" 404 - localhost - - [19/Jan/2007 16:13:20] "GET /MyStartingPage?action=edit HTTP/1.1" 200 - localhost - - [19/Jan/2007 16:13:38] "POST /MyStartingPage HTTP/1.1" 200 -

## Twisted

http://twistedmatrix.com/trac/
import twisted
help(twisted)
 Help on package twisted: NAME twisted - Twisted: The Framework Of Your Internet. FILE /Users/was/s/local/lib/python2.5/site-packages/twisted/__init__.py PACKAGE CONTENTS _version application (package) conch (package) copyright cred (package) enterprise (package) im internet (package) lore (package) mail (package) manhole (package) names (package) news (package) persisted (package) plugin plugins (package) protocols (package) python (package) runner (package) scripts (package) spread (package) tap (package) test (package) trial (package) web (package) web2 (package) words (package) DATA __version__ = '2.5.0' version = Version('twisted', 2, 5, 0) VERSION 2.5.0 Help on package twisted: NAME twisted - Twisted: The Framework Of Your Internet. FILE /Users/was/s/local/lib/python2.5/site-packages/twisted/__init__.py PACKAGE CONTENTS _version application (package) conch (package) copyright cred (package) enterprise (package) im internet (package) lore (package) mail (package) manhole (package) names (package) news (package) persisted (package) plugin plugins (package) protocols (package) python (package) runner (package) scripts (package) spread (package) tap (package) test (package) trial (package) web (package) web2 (package) words (package) DATA __version__ = '2.5.0' version = Version('twisted', 2, 5, 0) VERSION 2.5.0

## OpenSSL

The inclusion of OpenSSL will be the basis for security for the SAGE notebook and other SAGE related networking work. Also, it will be very useful for security education and research.
import OpenSSL
help(OpenSSL)
 Help on package OpenSSL: NAME OpenSSL - pyOpenSSL - A simple wrapper around the OpenSSL library FILE /Users/was/s/local/lib/python2.5/site-packages/OpenSSL/__init__.py PACKAGE CONTENTS SSL crypto rand tsafe version DATA __version__ = '0.6' VERSION 0.6 Help on package OpenSSL: NAME OpenSSL - pyOpenSSL - A simple wrapper around the OpenSSL library FILE /Users/was/s/local/lib/python2.5/site-packages/OpenSSL/__init__.py PACKAGE CONTENTS SSL crypto rand tsafe version DATA __version__ = '0.6' VERSION 0.6

# Combinatorics and Geometry

## gfan -- Tropical Geometry

R.<x,y,z> = QQ[]
I = ideal(y^2*z - x^3 - x*z^2)
show(I.groebner_fan().reduced_groebner_bases())
 [[À1y2z+xz2+x3]; [y2zÀxz2Àx3]; [À1y2z+xz2+x3]];   [[À1y2z+xz2+x3]; [y2zÀxz2Àx3]; [À1y2z+xz2+x3]];

## Polymake

sage: P = polymake.convex_hull([[1,0,0,0], [1,0,0,1], [1,0,1,0], [1,0,1,1],  [1,1,0,0], [1,1,0,1], [1,1,1,0], [1,1,1,1]])     # optional: needs polymake
sage: P.vertices()
 [(1, 0, 0, 0), (1, 0, 0, 1), (1, 0, 1, 0), (1, 0, 1, 1), (1, 1, 0, 0), (1, 1, 0, 1), (1, 1, 1, 0), (1, 1, 1, 1)] [(1, 0, 0, 0), (1, 0, 0, 1), (1, 0, 1, 0), (1, 0, 1, 1), (1, 1, 0, 0), (1, 1, 0, 1), (1, 1, 1, 0), (1, 1, 1, 1)]

## Lattice Polytopes

L = LatticePolytope(matrix(P.vertices()))
L.npoints()
 Exception (click to the left for traceback): ... Output: Traceback (most recent call last): File "", line 1, in File "/Users/was/talks/2007-01-19-sage/2.0/sage_notebook/worksheets/_scratch_/code/9.py", line 5, in L.npoints() File "/Users/was/talks/2007-01-19-sage/2.0/sage_notebook/worksheets/_scratch_/cells/816/sage_wiki/", line 1, in File "/Users/was/s/local/lib/python2.5/site-packages/sage/geometry/lattice_polytope.py", line 770, in npoints return self.points().ncols() File "/Users/was/s/local/lib/python2.5/site-packages/sage/geometry/lattice_polytope.py", line 872, in points self._points = read_palp_matrix(self.poly_x("p")) File "/Users/was/s/local/lib/python2.5/site-packages/sage/geometry/lattice_polytope.py", line 957, in poly_x return self._palp("poly.x -f" + keys) File "/Users/was/s/local/lib/python2.5/site-packages/sage/geometry/lattice_polytope.py", line 334, in _palp self, self.vertices(), result) ValueError: Error executing "poly.x -fp" for the given polytope! Polytope: A lattice polytope: 8-dimensional, 4 vertices. Vertices: [1 0 0 0] [1 0 0 1] [1 0 1 0] [1 0 1 1] [1 1 0 0] [1 1 0 1] [1 1 1 0] [1 1 1 1] Output: 
L.is_reflexive()
 False False
k = graphs.CubeGraph(5)
print k
show(k)
 5-Cube 5-Cube

# Number Theory

## Many more basic functions

sloane.A000110(23)
 44152005855084346 44152005855084346

## FLINT

print "Coming soon...  Will multiply polynomials very quickly."
 Coming soon... Will multiply polynomials very quickly. Coming soon... Will multiply polynomials very quickly.

## PARI

A stable 2.3.0 release.
gp.version()
 ((2, 3, 1), 'GP/PARI CALCULATOR Version 2.3.1 (released)') ((2, 3, 1), 'GP/PARI CALCULATOR Version 2.3.1 (released)')
gp.

# Linear Algebra

## SageX'ification

This was incredibly difficult! Required substantial improvements to Pyrex, design work, etc.
m = matrix(QQ,10,range(100))
type(m)
  

## Asymptotically Fast Algorithms

David Harvey, Robert Bradshaw, me -- lots of work to write down general practical algorithms; not just proofs of concept.
m.integer_kernel()
 Free module of degree 10 and rank 8 over Integer Ring Echelon basis matrix: [ 1 0 0 0 0 0 0 0 -9 8] [ 0 1 0 0 0 0 0 0 -8 7] [ 0 0 1 0 0 0 0 0 -7 6] [ 0 0 0 1 0 0 0 0 -6 5] [ 0 0 0 0 1 0 0 0 -5 4] [ 0 0 0 0 0 1 0 0 -4 3] [ 0 0 0 0 0 0 1 0 -3 2] [ 0 0 0 0 0 0 0 1 -2 1] Free module of degree 10 and rank 8 over Integer Ring Echelon basis matrix: [ 1 0 0 0 0 0 0 0 -9 8] [ 0 1 0 0 0 0 0 0 -8 7] [ 0 0 1 0 0 0 0 0 -7 6] [ 0 0 0 1 0 0 0 0 -6 5] [ 0 0 0 0 1 0 0 0 -5 4] [ 0 0 0 0 0 1 0 0 -4 3] [ 0 0 0 0 0 0 1 0 -3 2] [ 0 0 0 0 0 0 0 1 -2 1]

## Numerical Linear Algebra -- several new choices

Numpy -- work of Travis Oliphant
import numpy
numpy.random.
GSL integration into SAGE -- work mainly of Josh Kantor
n=1000
m = matrix(RDF,n,range(n^2))
print type(m)
time n = m*m  
  Time: CPU 4.89 s, Wall: 5.40 s  Time: CPU 4.89 s, Wall: 5.40 s

# Developer Tools

## Arithmetic Architecture

1. Came out of SAGE Days 2
2. Has huge impact on speed of SAGE.
3. Make using SAGE, adding classes, and understanding implicit coercion much clearer.
4. Was incredibly hard to implement, but is now done.
a = 3; b = Mod(8,13)
parent(a * b), parent(b*a)
 (Ring of integers modulo 13, Ring of integers modulo 13) (Ring of integers modulo 13, Ring of integers modulo 13)
a._mul_

## Pyrex --> SageX

%sagex

v  = [i*i for i from 0 <= i < 1000]
v[2] += 5
print v[:10]
 [0, 1, 9, 9, 16, 25, 36, 49, 64, 81] [0, 1, 9, 9, 16, 25, 36, 49, 64, 81]

## Darcs --> Mercurial

1. Darcs does not scale well; gets slow. Darcs is cool.
2. Mercurial scales very well; is fast. Is much much different than Darcs.
hg_sage.

## Trac -- bug and feature tracker

http://www.sagemath.org:9002/sage_trac

# Graphics

## 2d Mathematica-like graphics

def f(x):
return x + sin(x)*cos(x)

show(plot(f, -3, 2, hue=0.7))

def f(x,y):
return cos(x^2 + y^2)
show(contour_plot(f, (-4, 4), (-4, 4), contours=50, cmap="Spectral"))

## 3d Raytracer included

sage: t = Tachyon(xres=512,yres=512, camera_center=(2,0.5,0.5), look_at=(0.5,0.5,0.5), raydepth=4)
sage: t.light((4,3,2), 0.2, (1,1,1))
sage: t.texture('t0', ambient=0.1, diffuse=0.9, specular=0.5, opacity=1.0, color=(1.0,0,0))
sage: t.texture('t1', ambient=0.1, diffuse=0.9, specular=0.3, opacity=1.0, color=(0,1.0,0))
sage: t.texture('t2', ambient=0.2, diffuse=0.7, specular=0.5, opacity=0.7, color=(0,0,1.0))
sage: k=0
sage: for i in range(100):
...    k += 1
...    t.sphere((random(),random(), random()), random()/10, 't%s'%(k%3))
...
sage: t.save('sage.png')

# Cryptography

## Hart's Optimized Portable Quadratic Sieve

time qsieve(next_prime(10^22)*next_prime(10^25))
 ([10000000000000000000009, 10000000000000000000000013], '') CPU time: 0.02 s, Wall time: 0.81 s ([10000000000000000000009, 10000000000000000000000013], '') CPU time: 0.02 s, Wall time: 0.81 s

## OpenSSL

import OpenSSL
help(OpenSSL)
 Help on package OpenSSL: NAME OpenSSL - pyOpenSSL - A simple wrapper around the OpenSSL library FILE /Users/was/s/local/lib/python2.5/site-packages/OpenSSL/__init__.py PACKAGE CONTENTS SSL crypto rand tsafe version DATA __version__ = '0.6' VERSION 0.6 Help on package OpenSSL: NAME OpenSSL - pyOpenSSL - A simple wrapper around the OpenSSL library FILE /Users/was/s/local/lib/python2.5/site-packages/OpenSSL/__init__.py PACKAGE CONTENTS SSL crypto rand tsafe version DATA __version__ = '0.6' VERSION 0.6

## David Kohel's Crypto Package

sage: S = AlphabeticStrings()
sage: E = SubstitutionCryptosystem(S)
sage: E
Substitution cryptosystem on Free alphabetic string monoid on A-Z
sage: K = S([ 25-i for i in range(26) ])
sage: K
ZYXWVUTSRQPONMLKJIHGFEDCBA
sage: e = E(K)
sage: m = S("THECATINTHEHAT")
sage: e(m)
GSVXZGRMGSVSZG
 GSVXZGRMGSVSZG GSVXZGRMGSVSZG

# Clear Decisions about Platform Support, etc

## Supported Platforms

1. Linux on AMD, x86, and Itanium: as a "monolithic build" only
2. OS/X on PPC and Intel: as a "monolithic build" only
3. Microsoft Windows: via Cygwin
4. Solaris: will be attempted in March

## Binary Distribution

http://sage.math.washington.edu/SAGEbin/
1. Currently a precompiled tarball.
2. Anybody can easily make a binary of their personal SAGE install with their optional packages preinstalled by typing
  sage -bdist name

3. RPMS, DEBS, MSI's, DPKG will come when the time is right, i.e., when we are ready to have way more users than developers; this will be by the end of March.