From 3a61b951df61f4175bcf61700454ed978b63b2ef Mon Sep 17 00:00:00 2001 From: Michael Orlitzky Date: Thu, 10 May 2012 09:29:56 -0400 Subject: [PATCH] Initial commit. --- README | 9 +++++++++ init.sage | 9 +++++++++ mjo/__init__.py | 1 + mjo/all.py | 7 +++++++ mjo/plot.py | 32 ++++++++++++++++++++++++++++++++ mjo/symbolic.py | 45 +++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 103 insertions(+) create mode 100644 README create mode 100644 init.sage create mode 100644 mjo/__init__.py create mode 100644 mjo/all.py create mode 100644 mjo/plot.py create mode 100644 mjo/symbolic.py diff --git a/README b/README new file mode 100644 index 0000000..47ccc9f --- /dev/null +++ b/README @@ -0,0 +1,9 @@ +My own personal library of Sage[1] code. + +It is intended to be loaded into every Sage session, or Python script +which imports the Sage library. Sage loads ~/.sage/init.sage upon +startup, so I've supplied a sample init.sage file which will load this +code from ~/src/sage/. + + +[1] http://www.sagemath.org/ diff --git a/init.sage b/init.sage new file mode 100644 index 0000000..3f3905c --- /dev/null +++ b/init.sage @@ -0,0 +1,9 @@ +import sys +import os +import site + +# Add '~/src/sage' to our path. +sitedir = os.path.expanduser('~/src/sage') +site.addsitedir(sitedir) + +from mjo.all import * diff --git a/mjo/__init__.py b/mjo/__init__.py new file mode 100644 index 0000000..8076a85 --- /dev/null +++ b/mjo/__init__.py @@ -0,0 +1 @@ +# <3 git diff --git a/mjo/all.py b/mjo/all.py new file mode 100644 index 0000000..c3f0ef8 --- /dev/null +++ b/mjo/all.py @@ -0,0 +1,7 @@ +""" +Import all of the other code, so that the user doesn't have to do it +in his script. Instead, he can just `from mjo.all import *`. +""" + +from plot import * +from symbolic import * diff --git a/mjo/plot.py b/mjo/plot.py new file mode 100644 index 0000000..d330123 --- /dev/null +++ b/mjo/plot.py @@ -0,0 +1,32 @@ +from sage.all import * + +# Save the default so that we can call it within mjo_plot. +sage_plot = plot + +def mjo_plot(*args, **kwargs): + """ + Replacement for the default plot function. + + - Use the 'latex' tick formatter. + + - If there's a legend, set the background color to 'white' and + give it a drop shadow. + + """ + plot_opts = { 'tick_formatter': 'latex' } + + legend_opts = { 'back_color': 'white', + 'shadow': True } + + # Merge the user's plot options with mine. The ones given as + # kwargs should override the defaults! + plot_opts.update(kwargs) + kwargs = plot_opts + p = sage_plot(*args, **kwargs) + p.set_legend_options(**legend_opts) + return p + +# Replace both the global `plot` and the one in the module. I am +# unclear about why this is necessary, and don't care too much. +sage.plot.plot.plot = mjo_plot +plot = mjo_plot diff --git a/mjo/symbolic.py b/mjo/symbolic.py new file mode 100644 index 0000000..e4c6d23 --- /dev/null +++ b/mjo/symbolic.py @@ -0,0 +1,45 @@ +from sage.all import * +from sage.interfaces.maxima_lib import maxima_lib +from sage.symbolic.expression import Expression + + +def set_simplification_domain(d): + """ + Set Maxima's simplification domain. + + INPUT: + + - d -- The domain, either 'real' or 'complex'. + + """ + cmd = 'domain: %s;' % d + result = maxima_lib._eval_line(cmd) + return result + + +def safe_simplify(expr): + """ + What should be a totally safe simplification operation that works + a little better than the plain simplify(). + + Uses a top-level function because we can't monkey-patch Cython + classes. + """ + expr = expr.simplify_factorial() + expr = expr.simplify_log() + return expr + + +def medium_simplify(expr): + """ + A reasonably-safe set of simplifications, much better than + simplify() and safer than simplify_full() + + Uses a top-level function because we can't monkey-patch Cython + classes. + """ + expr = expr.simplify_factorial() + expr = expr.simplify_trig() + expr = expr.simplify_rational() + expr = expr.simplify_log() + return expr -- 2.43.2