Skip to content

Instantly share code, notes, and snippets.

@cdsousa
Last active December 19, 2015 16:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cdsousa/5986996 to your computer and use it in GitHub Desktop.
Save cdsousa/5986996 to your computer and use it in GitHub Desktop.
SymPy Common Subexpression Elimination (CSE) Implementation Comparison Example
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": "Fast CSE - new-old CSE speed tests"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": "import sys\n\nfrom sympy.simplify import old_cse_main # I've let previous cse_main.py and cse_opts.py files as old_*.py in sympy/simplify/\nfrom sympy.simplify import cse_main\nprev_cse = old_cse_main.cse\nnew_cse = cse_main.cse\nimport sympy\nfrom sympy.utilities import numbered_symbols\nfrom sympy.core.cache import clear_cache",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "code",
"collapsed": false,
"input": "print(\"Processors:\")\n!grep \"model name\" /proc/cpuinfo\n\nprint(\"\\nSystem:\")\n!uname -a\n\nprint(\"\\nPython:\\n%s\"%sys.version)\n \nprint(\"\\nSympy fast_cse branch:\")\n!(cd $my_sympy_path; git show -s)\n\nprint(\"\\nbased on Sympy version: %s\\n\"%sympy.__version__)",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "Processors:\n"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "model name\t: Intel(R) Core(TM) i3 CPU M 380 @ 2.53GHz\r\nmodel name\t: Intel(R) Core(TM) i3 CPU M 380 @ 2.53GHz\r\nmodel name\t: Intel(R) Core(TM) i3 CPU M 380 @ 2.53GHz\r\nmodel name\t: Intel(R) Core(TM) i3 CPU M 380 @ 2.53GHz\r\n"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\nSystem:\nLinux kapa42 3.10.10-1-ARCH #1 SMP PREEMPT Fri Aug 30 11:30:06 CEST 2013 x86_64 GNU/Linux\r\n"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\nPython:\n3.3.2 (default, May 21 2013, 15:40:45) \n[GCC 4.8.0 20130502 (prerelease)]\n\nSympy fast_cse branch:\nfatal: Not a git repository (or any parent up to mount point /home)\r\nStopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).\r\n"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\nbased on Sympy version: 0.7.3\n\n"
}
],
"prompt_number": 2
},
{
"cell_type": "markdown",
"metadata": {},
"source": " Processors:\n model name : Intel(R) Core(TM) i3 CPU M 380 @ 2.53GHz\n model name : Intel(R) Core(TM) i3 CPU M 380 @ 2.53GHz\n model name : Intel(R) Core(TM) i3 CPU M 380 @ 2.53GHz\n model name : Intel(R) Core(TM) i3 CPU M 380 @ 2.53GHz\n\n System:\n Linux kapa42 3.10.10-1-ARCH #1 SMP PREEMPT Fri Aug 30 11:30:06 CEST 2013 x86_64 GNU/Linux\n\n Python:\n 3.3.2 (default, May 21 2013, 15:40:45) \n [GCC 4.8.0 20130502 (prerelease)]\n\n Sympy fast_cse branch:\n fatal: Not a git repository (or any parent up to mount point /home)\n Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).\n\n based on Sympy version: 0.7.3"
},
{
"cell_type": "code",
"collapsed": false,
"input": "",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": "def count(exprs):\n ops = '=', '+', '-', '*', '/', '**', 'sin', 'cos'\n s = str(exprs)\n op_counts = {op: s.count(op) for op in ops}\n op_counts['='] = len(exprs[0]) if isinstance(exprs, tuple) else 0\n op_counts['*'] = op_counts['*'] - op_counts['**']\n return '\\t'.join([str(op_counts[op]) + ' ' + op for op in ops])\n\ndef undo_cse(cse_output):\n from sympy.matrices import Matrix\n from sympy.core.compatibility import iterable\n from sympy import Basic\n\n subs = dict((s, e) for (s, e) in cse_output[0])\n exprs = cse_output[1]\n\n def _recreate(expr):\n if iterable(expr):\n out = type(expr)(*map(_recreate, expr))\n elif expr in subs:\n out = _recreate(subs[expr])\n elif isinstance(expr, Basic) and expr.is_Atom:\n out = expr\n else:\n out = type(expr)(*map(_recreate, expr.args))\n return out\n\n single = False\n if isinstance(exprs, Basic) or isinstance(exprs, Matrix): # if only one expression or one matrix is passed\n exprs = [exprs]\n single = True\n\n expanded_exprs = []\n for expr in exprs:\n if isinstance(expr, Matrix):\n expanded_exprs.append(expr.applyfunc(_recreate))\n else:\n expanded_exprs.append(_recreate(expr))\n\n if single:\n expanded_exprs = expanded_exprs[0]\n\n return expanded_exprs\n\n\ndef verify_cse(orig_exprs, cse_output):\n from sympy import Basic\n \n if isinstance(orig_exprs, Basic):\n orig_exprs = [orig_exprs]\n \n cse_exprs = undo_cse(cse_output)\n \n fail = False\n \n for orig_expr, cse_expr in zip(orig_exprs, cse_exprs):\n diff = orig_expr - cse_expr\n diff = sympy.simplify(diff).expand()\n if diff != 0:\n print(diff)\n fail = True\n \n return not fail",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 6
},
{
"cell_type": "code",
"collapsed": false,
"input": "",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 6
},
{
"cell_type": "code",
"collapsed": false,
"input": "large_exprs = sympy.sympify('''[a27*a4 - (a1*a7 + 9.81*a14*cos(a13) + \na15*(-a25*a26*sin(a13) + a4*cos(a13)) + a22*(-a25*a26*cos(a13) - a4*sin(a13)) - \na25*(-a1*a25*sin(a13) + a10*a25*cos(a13) + a26*a5)*cos(a13) + a26*(a10*a26 - \na15*a25*sin(a13) + a21*a25*cos(a13)) - (0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*(-a12*(-a6*(-a25*sin(a13)*sin(a18) - a26*cos(a18)) + \na7*sin(a18) + (-a25*a26*cos(a13) - a4*sin(a13))*cos(a18)) + \na19*(-a6*(-a25*sin(a13)*cos(a18) + a26*sin(a18)) + a7*cos(a18) - \n(-a25*a26*cos(a13) - a4*sin(a13))*sin(a18)) + \na20*(0.045*a6*(a25*sin(a13)*cos(a18) - a26*sin(a18)) + a7*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*cos(a18) - (-a25*a26*cos(a13) - \na4*sin(a13))*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*sin(a18) - 9.81*cos(a13)) - \n(-a25*sin(a13)*sin(a18) - a26*cos(a18))*(a12*(-a25*cos(a13) - a6) + \na20*(0.55*a25*sin(a13)*sin(a18) + 0.55*a26*cos(a18)) - \na23*(a25*sin(a13)*sin(a18) + a26*cos(a18))) - (-a25*sin(a13)*cos(a18) + \na26*sin(a18))*(-a19*(-a25*cos(a13) - a6) + a20*(a25*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*cos(a13) + 0.55*a25*sin(a13)*cos(a18) - 0.55*a26*sin(a18) + \n0.045*a6) + a23*(-a25*sin(a13)*cos(a18) + a26*sin(a18))))*sin(a18) - \n0.55*(a12*(-a24 + a25*a26*sin(a13) - a4*cos(a13)) + a20*(-0.045*a25*a6*cos(a13) \n- a6*(-a25*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*cos(a13) - \n0.55*a25*sin(a13)*cos(a18) + 0.55*a26*sin(a18)) + 0.55*a7*cos(a18) - \n0.55*(-a25*a26*cos(a13) - a4*sin(a13))*sin(a18) - 9.81*sin(a13)*cos(a18)) - \na23*(-a6*(-a25*sin(a13)*cos(a18) + a26*sin(a18)) + a7*cos(a18) - \n(-a25*a26*cos(a13) - a4*sin(a13))*sin(a18)) - (a25*cos(a13) + \na6)*(-a19*(-a25*cos(a13) - a6) + a20*(a25*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*cos(a13) + 0.55*a25*sin(a13)*cos(a18) - 0.55*a26*sin(a18) + \n0.045*a6) + a23*(-a25*sin(a13)*cos(a18) + a26*sin(a18))) - \n(a25*sin(a13)*sin(a18) + a26*cos(a18))*(-a12*(-a25*sin(a13)*cos(a18) + \na26*sin(a18)) + a19*(a25*sin(a13)*sin(a18) + a26*cos(a18)) + \na20*(a25*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*sin(a13)*sin(a18) + \na26*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*cos(a18))))*sin(a18) - \n0.55*(-a19*(-a24 + a25*a26*sin(a13) - a4*cos(a13)) + a20*(0.045*a24 - \na6*(0.55*a25*sin(a13)*sin(a18) + 0.55*a26*cos(a18)) - 0.55*a7*sin(a18) + \n(-a25*a26*sin(a13) + a4*cos(a13))*(0.045*sin(a18)**2 + 0.045*cos(a18)**2) - \n0.55*(-a25*a26*cos(a13) - a4*sin(a13))*cos(a18) + 9.81*sin(a13)*sin(a18)) + \na23*(-a6*(-a25*sin(a13)*sin(a18) - a26*cos(a18)) + a7*sin(a18) + \n(-a25*a26*cos(a13) - a4*sin(a13))*cos(a18)) - (-a25*cos(a13) - \na6)*(a12*(-a25*cos(a13) - a6) + a20*(0.55*a25*sin(a13)*sin(a18) + \n0.55*a26*cos(a18)) - a23*(a25*sin(a13)*sin(a18) + a26*cos(a18))) - \n(a25*sin(a13)*cos(a18) - a26*sin(a18))*(-a12*(-a25*sin(a13)*cos(a18) + \na26*sin(a18)) + a19*(a25*sin(a13)*sin(a18) + a26*cos(a18)) + \na20*(a25*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*sin(a13)*sin(a18) + \na26*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*cos(a18))))*cos(a18) + \n(-a12*(0.045*a6*(a25*sin(a13)*cos(a18) - a26*sin(a18)) + a7*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*cos(a18) - (-a25*a26*cos(a13) - \na4*sin(a13))*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*sin(a18) - 9.81*cos(a13)) + \na16*(-a6*(-a25*sin(a13)*cos(a18) + a26*sin(a18)) + a7*cos(a18) - \n(-a25*a26*cos(a13) - a4*sin(a13))*sin(a18)) + a17*(-a24 + a25*a26*sin(a13) - \na4*cos(a13)) + a23*(0.045*a24 - a6*(0.55*a25*sin(a13)*sin(a18) + \n0.55*a26*cos(a18)) - 0.55*a7*sin(a18) + (-a25*a26*sin(a13) + \na4*cos(a13))*(0.045*sin(a18)**2 + 0.045*cos(a18)**2) - 0.55*(-a25*a26*cos(a13) - \na4*sin(a13))*cos(a18) + 9.81*sin(a13)*sin(a18)) + \na3*(-a6*(-a25*sin(a13)*sin(a18) - a26*cos(a18)) + a7*sin(a18) + \n(-a25*a26*cos(a13) - a4*sin(a13))*cos(a18)) - (a25*cos(a13) + \na6)*(a16*(-a25*sin(a13)*cos(a18) + a26*sin(a18)) + a19*(a25*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*sin(a13)*sin(a18) + a26*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*cos(a18)) + a2*(a25*sin(a13)*sin(a18) + a26*cos(a18)) - \na23*(0.55*a25*sin(a13)*sin(a18) + 0.55*a26*cos(a18)) + a9*(-a25*cos(a13) - a6)) \n- (a25*sin(a13)*sin(a18) + a26*cos(a18))*(a0*(-a25*cos(a13) - a6) + \na12*(0.55*a25*sin(a13)*sin(a18) + 0.55*a26*cos(a18)) + \na17*(-a25*sin(a13)*cos(a18) + a26*sin(a18)) - a19*(a25*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*cos(a13) + 0.55*a25*sin(a13)*cos(a18) - 0.55*a26*sin(a18) + \n0.045*a6) + a9*(a25*sin(a13)*sin(a18) + a26*cos(a18))) - \n(-a25*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*sin(a13)*sin(a18) - \na26*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*cos(a18))*(-a19*(-a25*cos(a13) - a6) \n+ a20*(a25*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*cos(a13) + \n0.55*a25*sin(a13)*cos(a18) - 0.55*a26*sin(a18) + 0.045*a6) + \na23*(-a25*sin(a13)*cos(a18) + a26*sin(a18))) - (-a12*(-a25*sin(a13)*cos(a18) + \na26*sin(a18)) + a19*(a25*sin(a13)*sin(a18) + a26*cos(a18)) + \na20*(a25*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*sin(a13)*sin(a18) + \na26*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*cos(a18)))*(a25*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*cos(a13) + 0.55*a25*sin(a13)*cos(a18) - 0.55*a26*sin(a18) + \n0.045*a6))*cos(a18) - (a16*(-a6*(-a25*sin(a13)*sin(a18) - a26*cos(a18)) + \na7*sin(a18) + (-a25*a26*cos(a13) - a4*sin(a13))*cos(a18)) + \na19*(0.045*a6*(a25*sin(a13)*cos(a18) - a26*sin(a18)) + a7*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*cos(a18) - (-a25*a26*cos(a13) - \na4*sin(a13))*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*sin(a18) - 9.81*cos(a13)) + \na2*(-a6*(-a25*sin(a13)*cos(a18) + a26*sin(a18)) + a7*cos(a18) - \n(-a25*a26*cos(a13) - a4*sin(a13))*sin(a18)) - a23*(-0.045*a25*a6*cos(a13) - \na6*(-a25*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*cos(a13) - \n0.55*a25*sin(a13)*cos(a18) + 0.55*a26*sin(a18)) + 0.55*a7*cos(a18) - \n0.55*(-a25*a26*cos(a13) - a4*sin(a13))*sin(a18) - 9.81*sin(a13)*cos(a18)) + \na9*(-a24 + a25*a26*sin(a13) - a4*cos(a13)) - (-a25*cos(a13) - \na6)*(-a12*(a25*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*sin(a13)*sin(a18) + \na26*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*cos(a18)) + \na16*(a25*sin(a13)*sin(a18) + a26*cos(a18)) + a17*(-a25*cos(a13) - a6) + \na23*(a25*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*cos(a13) + \n0.55*a25*sin(a13)*cos(a18) - 0.55*a26*sin(a18) + 0.045*a6) + \na3*(-a25*sin(a13)*cos(a18) + a26*sin(a18))) - (-0.55*a25*sin(a13)*sin(a18) - \n0.55*a26*cos(a18))*(-a12*(-a25*sin(a13)*cos(a18) + a26*sin(a18)) + \na19*(a25*sin(a13)*sin(a18) + a26*cos(a18)) + a20*(a25*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*sin(a13)*sin(a18) + a26*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*cos(a18))) - (a25*sin(a13)*cos(a18) - \na26*sin(a18))*(a0*(-a25*cos(a13) - a6) + a12*(0.55*a25*sin(a13)*sin(a18) + \n0.55*a26*cos(a18)) + a17*(-a25*sin(a13)*cos(a18) + a26*sin(a18)) - \na19*(a25*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*cos(a13) + \n0.55*a25*sin(a13)*cos(a18) - 0.55*a26*sin(a18) + 0.045*a6) + \na9*(a25*sin(a13)*sin(a18) + a26*cos(a18))) - (a25*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*sin(a13)*sin(a18) + a26*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*cos(a18))*(a12*(-a25*cos(a13) - a6) + \na20*(0.55*a25*sin(a13)*sin(a18) + 0.55*a26*cos(a18)) - \na23*(a25*sin(a13)*sin(a18) + a26*cos(a18))))*sin(a18))*sin(a13) + (-a0*(-a24 + \na25*a26*sin(a13) - a4*cos(a13)) + a10*a7 - a12*(-0.045*a25*a6*cos(a13) - \na6*(-a25*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*cos(a13) - \n0.55*a25*sin(a13)*cos(a18) + 0.55*a26*sin(a18)) + 0.55*a7*cos(a18) - \n0.55*(-a25*a26*cos(a13) - a4*sin(a13))*sin(a18) - 9.81*sin(a13)*cos(a18)) + \n9.81*a14*sin(a13) + a15*(-a25*a26*cos(a13) - a4*sin(a13)) - \na17*(-a6*(-a25*sin(a13)*sin(a18) - a26*cos(a18)) + a7*sin(a18) + \n(-a25*a26*cos(a13) - a4*sin(a13))*cos(a18)) + a19*(0.045*a24 - \na6*(0.55*a25*sin(a13)*sin(a18) + 0.55*a26*cos(a18)) - 0.55*a7*sin(a18) + \n(-a25*a26*sin(a13) + a4*cos(a13))*(0.045*sin(a18)**2 + 0.045*cos(a18)**2) - \n0.55*(-a25*a26*cos(a13) - a4*sin(a13))*cos(a18) + 9.81*sin(a13)*sin(a18)) + \na21*(-a25*a26*sin(a13) + a4*cos(a13)) - a25*(-a1*a25*sin(a13) + a10*a25*cos(a13) \n+ a26*a5)*sin(a13) - a26*(a1*a26 + a15*a25*cos(a13) - a22*a25*sin(a13)) - \na9*(-a6*(-a25*sin(a13)*cos(a18) + a26*sin(a18)) + a7*cos(a18) - \n(-a25*a26*cos(a13) - a4*sin(a13))*sin(a18)) + (-a25*sin(a13)*sin(a18) - \na26*cos(a18))*(-a12*(a25*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*sin(a13)*sin(a18) + a26*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*cos(a18)) + a16*(a25*sin(a13)*sin(a18) + a26*cos(a18)) + \na17*(-a25*cos(a13) - a6) + a23*(a25*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*cos(a13) + 0.55*a25*sin(a13)*cos(a18) - 0.55*a26*sin(a18) + \n0.045*a6) + a3*(-a25*sin(a13)*cos(a18) + a26*sin(a18))) + \n(0.55*a25*sin(a13)*sin(a18) + 0.55*a26*cos(a18))*(-a19*(-a25*cos(a13) - a6) + \na20*(a25*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*cos(a13) + \n0.55*a25*sin(a13)*cos(a18) - 0.55*a26*sin(a18) + 0.045*a6) + \na23*(-a25*sin(a13)*cos(a18) + a26*sin(a18))) + (-a25*sin(a13)*cos(a18) + \na26*sin(a18))*(a16*(-a25*sin(a13)*cos(a18) + a26*sin(a18)) + \na19*(a25*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*sin(a13)*sin(a18) + \na26*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*cos(a18)) + \na2*(a25*sin(a13)*sin(a18) + a26*cos(a18)) - a23*(0.55*a25*sin(a13)*sin(a18) + \n0.55*a26*cos(a18)) + a9*(-a25*cos(a13) - a6)) + (0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*(-a19*(-a24 + a25*a26*sin(a13) - a4*cos(a13)) + \na20*(0.045*a24 - a6*(0.55*a25*sin(a13)*sin(a18) + 0.55*a26*cos(a18)) - \n0.55*a7*sin(a18) + (-a25*a26*sin(a13) + a4*cos(a13))*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2) - 0.55*(-a25*a26*cos(a13) - a4*sin(a13))*cos(a18) + \n9.81*sin(a13)*sin(a18)) + a23*(-a6*(-a25*sin(a13)*sin(a18) - a26*cos(a18)) + \na7*sin(a18) + (-a25*a26*cos(a13) - a4*sin(a13))*cos(a18)) - (-a25*cos(a13) - \na6)*(a12*(-a25*cos(a13) - a6) + a20*(0.55*a25*sin(a13)*sin(a18) + \n0.55*a26*cos(a18)) - a23*(a25*sin(a13)*sin(a18) + a26*cos(a18))) - \n(a25*sin(a13)*cos(a18) - a26*sin(a18))*(-a12*(-a25*sin(a13)*cos(a18) + \na26*sin(a18)) + a19*(a25*sin(a13)*sin(a18) + a26*cos(a18)) + \na20*(a25*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*sin(a13)*sin(a18) + \na26*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*cos(a18)))) + (a12*(-a25*cos(a13) - \na6) + a20*(0.55*a25*sin(a13)*sin(a18) + 0.55*a26*cos(a18)) - \na23*(a25*sin(a13)*sin(a18) + a26*cos(a18)))*(-a25*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*cos(a13) - 0.55*a25*sin(a13)*cos(a18) + 0.55*a26*sin(a18) - \n0.045*a6))*cos(a13), a1*(-a25*a26*cos(a13) - a4*sin(a13)) + \na10*(-a25*a26*sin(a13) + a4*cos(a13)) - 9.81*a11*cos(a13) + a25*(a1*a26 + \na15*a25*cos(a13) - a22*a25*sin(a13))*cos(a13) + a25*(a10*a26 - a15*a25*sin(a13) \n+ a21*a25*cos(a13))*sin(a13) + a5*a7 - 9.81*a8*sin(a13) + (0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*(-a12*(-a6*(-a25*sin(a13)*sin(a18) - a26*cos(a18)) + \na7*sin(a18) + (-a25*a26*cos(a13) - a4*sin(a13))*cos(a18)) + \na19*(-a6*(-a25*sin(a13)*cos(a18) + a26*sin(a18)) + a7*cos(a18) - \n(-a25*a26*cos(a13) - a4*sin(a13))*sin(a18)) + \na20*(0.045*a6*(a25*sin(a13)*cos(a18) - a26*sin(a18)) + a7*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*cos(a18) - (-a25*a26*cos(a13) - \na4*sin(a13))*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*sin(a18) - 9.81*cos(a13)) - \n(-a25*sin(a13)*sin(a18) - a26*cos(a18))*(a12*(-a25*cos(a13) - a6) + \na20*(0.55*a25*sin(a13)*sin(a18) + 0.55*a26*cos(a18)) - \na23*(a25*sin(a13)*sin(a18) + a26*cos(a18))) - (-a25*sin(a13)*cos(a18) + \na26*sin(a18))*(-a19*(-a25*cos(a13) - a6) + a20*(a25*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*cos(a13) + 0.55*a25*sin(a13)*cos(a18) - 0.55*a26*sin(a18) + \n0.045*a6) + a23*(-a25*sin(a13)*cos(a18) + a26*sin(a18))))*cos(a18) + \n0.55*(a12*(-a24 + a25*a26*sin(a13) - a4*cos(a13)) + a20*(-0.045*a25*a6*cos(a13) \n- a6*(-a25*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*cos(a13) - \n0.55*a25*sin(a13)*cos(a18) + 0.55*a26*sin(a18)) + 0.55*a7*cos(a18) - \n0.55*(-a25*a26*cos(a13) - a4*sin(a13))*sin(a18) - 9.81*sin(a13)*cos(a18)) - \na23*(-a6*(-a25*sin(a13)*cos(a18) + a26*sin(a18)) + a7*cos(a18) - \n(-a25*a26*cos(a13) - a4*sin(a13))*sin(a18)) - (a25*cos(a13) + \na6)*(-a19*(-a25*cos(a13) - a6) + a20*(a25*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*cos(a13) + 0.55*a25*sin(a13)*cos(a18) - 0.55*a26*sin(a18) + \n0.045*a6) + a23*(-a25*sin(a13)*cos(a18) + a26*sin(a18))) - \n(a25*sin(a13)*sin(a18) + a26*cos(a18))*(-a12*(-a25*sin(a13)*cos(a18) + \na26*sin(a18)) + a19*(a25*sin(a13)*sin(a18) + a26*cos(a18)) + \na20*(a25*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*sin(a13)*sin(a18) + \na26*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*cos(a18))))*cos(a18) - \n0.55*(-a19*(-a24 + a25*a26*sin(a13) - a4*cos(a13)) + a20*(0.045*a24 - \na6*(0.55*a25*sin(a13)*sin(a18) + 0.55*a26*cos(a18)) - 0.55*a7*sin(a18) + \n(-a25*a26*sin(a13) + a4*cos(a13))*(0.045*sin(a18)**2 + 0.045*cos(a18)**2) - \n0.55*(-a25*a26*cos(a13) - a4*sin(a13))*cos(a18) + 9.81*sin(a13)*sin(a18)) + \na23*(-a6*(-a25*sin(a13)*sin(a18) - a26*cos(a18)) + a7*sin(a18) + \n(-a25*a26*cos(a13) - a4*sin(a13))*cos(a18)) - (-a25*cos(a13) - \na6)*(a12*(-a25*cos(a13) - a6) + a20*(0.55*a25*sin(a13)*sin(a18) + \n0.55*a26*cos(a18)) - a23*(a25*sin(a13)*sin(a18) + a26*cos(a18))) - \n(a25*sin(a13)*cos(a18) - a26*sin(a18))*(-a12*(-a25*sin(a13)*cos(a18) + \na26*sin(a18)) + a19*(a25*sin(a13)*sin(a18) + a26*cos(a18)) + \na20*(a25*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*sin(a13)*sin(a18) + \na26*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*cos(a18))))*sin(a18) + \n(-a12*(0.045*a6*(a25*sin(a13)*cos(a18) - a26*sin(a18)) + a7*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*cos(a18) - (-a25*a26*cos(a13) - \na4*sin(a13))*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*sin(a18) - 9.81*cos(a13)) + \na16*(-a6*(-a25*sin(a13)*cos(a18) + a26*sin(a18)) + a7*cos(a18) - \n(-a25*a26*cos(a13) - a4*sin(a13))*sin(a18)) + a17*(-a24 + a25*a26*sin(a13) - \na4*cos(a13)) + a23*(0.045*a24 - a6*(0.55*a25*sin(a13)*sin(a18) + \n0.55*a26*cos(a18)) - 0.55*a7*sin(a18) + (-a25*a26*sin(a13) + \na4*cos(a13))*(0.045*sin(a18)**2 + 0.045*cos(a18)**2) - 0.55*(-a25*a26*cos(a13) - \na4*sin(a13))*cos(a18) + 9.81*sin(a13)*sin(a18)) + \na3*(-a6*(-a25*sin(a13)*sin(a18) - a26*cos(a18)) + a7*sin(a18) + \n(-a25*a26*cos(a13) - a4*sin(a13))*cos(a18)) - (a25*cos(a13) + \na6)*(a16*(-a25*sin(a13)*cos(a18) + a26*sin(a18)) + a19*(a25*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*sin(a13)*sin(a18) + a26*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*cos(a18)) + a2*(a25*sin(a13)*sin(a18) + a26*cos(a18)) - \na23*(0.55*a25*sin(a13)*sin(a18) + 0.55*a26*cos(a18)) + a9*(-a25*cos(a13) - a6)) \n- (a25*sin(a13)*sin(a18) + a26*cos(a18))*(a0*(-a25*cos(a13) - a6) + \na12*(0.55*a25*sin(a13)*sin(a18) + 0.55*a26*cos(a18)) + \na17*(-a25*sin(a13)*cos(a18) + a26*sin(a18)) - a19*(a25*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*cos(a13) + 0.55*a25*sin(a13)*cos(a18) - 0.55*a26*sin(a18) + \n0.045*a6) + a9*(a25*sin(a13)*sin(a18) + a26*cos(a18))) - \n(-a25*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*sin(a13)*sin(a18) - \na26*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*cos(a18))*(-a19*(-a25*cos(a13) - a6) \n+ a20*(a25*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*cos(a13) + \n0.55*a25*sin(a13)*cos(a18) - 0.55*a26*sin(a18) + 0.045*a6) + \na23*(-a25*sin(a13)*cos(a18) + a26*sin(a18))) - (-a12*(-a25*sin(a13)*cos(a18) + \na26*sin(a18)) + a19*(a25*sin(a13)*sin(a18) + a26*cos(a18)) + \na20*(a25*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*sin(a13)*sin(a18) + \na26*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*cos(a18)))*(a25*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*cos(a13) + 0.55*a25*sin(a13)*cos(a18) - 0.55*a26*sin(a18) + \n0.045*a6))*sin(a18) + (a16*(-a6*(-a25*sin(a13)*sin(a18) - a26*cos(a18)) + \na7*sin(a18) + (-a25*a26*cos(a13) - a4*sin(a13))*cos(a18)) + \na19*(0.045*a6*(a25*sin(a13)*cos(a18) - a26*sin(a18)) + a7*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*cos(a18) - (-a25*a26*cos(a13) - \na4*sin(a13))*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*sin(a18) - 9.81*cos(a13)) + \na2*(-a6*(-a25*sin(a13)*cos(a18) + a26*sin(a18)) + a7*cos(a18) - \n(-a25*a26*cos(a13) - a4*sin(a13))*sin(a18)) - a23*(-0.045*a25*a6*cos(a13) - \na6*(-a25*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*cos(a13) - \n0.55*a25*sin(a13)*cos(a18) + 0.55*a26*sin(a18)) + 0.55*a7*cos(a18) - \n0.55*(-a25*a26*cos(a13) - a4*sin(a13))*sin(a18) - 9.81*sin(a13)*cos(a18)) + \na9*(-a24 + a25*a26*sin(a13) - a4*cos(a13)) - (-a25*cos(a13) - \na6)*(-a12*(a25*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*sin(a13)*sin(a18) + \na26*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*cos(a18)) + \na16*(a25*sin(a13)*sin(a18) + a26*cos(a18)) + a17*(-a25*cos(a13) - a6) + \na23*(a25*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*cos(a13) + \n0.55*a25*sin(a13)*cos(a18) - 0.55*a26*sin(a18) + 0.045*a6) + \na3*(-a25*sin(a13)*cos(a18) + a26*sin(a18))) - (-0.55*a25*sin(a13)*sin(a18) - \n0.55*a26*cos(a18))*(-a12*(-a25*sin(a13)*cos(a18) + a26*sin(a18)) + \na19*(a25*sin(a13)*sin(a18) + a26*cos(a18)) + a20*(a25*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*sin(a13)*sin(a18) + a26*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*cos(a18))) - (a25*sin(a13)*cos(a18) - \na26*sin(a18))*(a0*(-a25*cos(a13) - a6) + a12*(0.55*a25*sin(a13)*sin(a18) + \n0.55*a26*cos(a18)) + a17*(-a25*sin(a13)*cos(a18) + a26*sin(a18)) - \na19*(a25*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*cos(a13) + \n0.55*a25*sin(a13)*cos(a18) - 0.55*a26*sin(a18) + 0.045*a6) + \na9*(a25*sin(a13)*sin(a18) + a26*cos(a18))) - (a25*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*sin(a13)*sin(a18) + a26*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*cos(a18))*(a12*(-a25*cos(a13) - a6) + \na20*(0.55*a25*sin(a13)*sin(a18) + 0.55*a26*cos(a18)) - \na23*(a25*sin(a13)*sin(a18) + a26*cos(a18))))*cos(a18), -a0*(-a24 + \na25*a26*sin(a13) - a4*cos(a13)) - a12*(-0.045*a25*a6*cos(a13) - \na6*(-a25*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*cos(a13) - \n0.55*a25*sin(a13)*cos(a18) + 0.55*a26*sin(a18)) + 0.55*a7*cos(a18) - \n0.55*(-a25*a26*cos(a13) - a4*sin(a13))*sin(a18) - 9.81*sin(a13)*cos(a18)) - \na17*(-a6*(-a25*sin(a13)*sin(a18) - a26*cos(a18)) + a7*sin(a18) + \n(-a25*a26*cos(a13) - a4*sin(a13))*cos(a18)) - 0.045*a19*(-a24 + a25*a26*sin(a13) \n- a4*cos(a13)) + a19*(0.045*a24 - a6*(0.55*a25*sin(a13)*sin(a18) + \n0.55*a26*cos(a18)) - 0.55*a7*sin(a18) + (-a25*a26*sin(a13) + \na4*cos(a13))*(0.045*sin(a18)**2 + 0.045*cos(a18)**2) - 0.55*(-a25*a26*cos(a13) - \na4*sin(a13))*cos(a18) + 9.81*sin(a13)*sin(a18)) + 0.045*a20*(0.045*a24 - \na6*(0.55*a25*sin(a13)*sin(a18) + 0.55*a26*cos(a18)) - 0.55*a7*sin(a18) + \n(-a25*a26*sin(a13) + a4*cos(a13))*(0.045*sin(a18)**2 + 0.045*cos(a18)**2) - \n0.55*(-a25*a26*cos(a13) - a4*sin(a13))*cos(a18) + 9.81*sin(a13)*sin(a18)) + \n0.045*a23*(-a6*(-a25*sin(a13)*sin(a18) - a26*cos(a18)) + a7*sin(a18) + \n(-a25*a26*cos(a13) - a4*sin(a13))*cos(a18)) - a9*(-a6*(-a25*sin(a13)*cos(a18) + \na26*sin(a18)) + a7*cos(a18) - (-a25*a26*cos(a13) - a4*sin(a13))*sin(a18)) - \n0.045*(-a25*cos(a13) - a6)*(a12*(-a25*cos(a13) - a6) + \na20*(0.55*a25*sin(a13)*sin(a18) + 0.55*a26*cos(a18)) - \na23*(a25*sin(a13)*sin(a18) + a26*cos(a18))) + (-a25*sin(a13)*sin(a18) - \na26*cos(a18))*(-a12*(a25*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*sin(a13)*sin(a18) + a26*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*cos(a18)) + a16*(a25*sin(a13)*sin(a18) + a26*cos(a18)) + \na17*(-a25*cos(a13) - a6) + a23*(a25*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*cos(a13) + 0.55*a25*sin(a13)*cos(a18) - 0.55*a26*sin(a18) + \n0.045*a6) + a3*(-a25*sin(a13)*cos(a18) + a26*sin(a18))) + \n(0.55*a25*sin(a13)*sin(a18) + 0.55*a26*cos(a18))*(-a19*(-a25*cos(a13) - a6) + \na20*(a25*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*cos(a13) + \n0.55*a25*sin(a13)*cos(a18) - 0.55*a26*sin(a18) + 0.045*a6) + \na23*(-a25*sin(a13)*cos(a18) + a26*sin(a18))) + (-a25*sin(a13)*cos(a18) + \na26*sin(a18))*(a16*(-a25*sin(a13)*cos(a18) + a26*sin(a18)) + \na19*(a25*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*sin(a13)*sin(a18) + \na26*(0.045*sin(a18)**2 + 0.045*cos(a18)**2)*cos(a18)) + \na2*(a25*sin(a13)*sin(a18) + a26*cos(a18)) - a23*(0.55*a25*sin(a13)*sin(a18) + \n0.55*a26*cos(a18)) + a9*(-a25*cos(a13) - a6)) - 0.045*(a25*sin(a13)*cos(a18) - \na26*sin(a18))*(-a12*(-a25*sin(a13)*cos(a18) + a26*sin(a18)) + \na19*(a25*sin(a13)*sin(a18) + a26*cos(a18)) + a20*(a25*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*sin(a13)*sin(a18) + a26*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*cos(a18))) + (a12*(-a25*cos(a13) - a6) + \na20*(0.55*a25*sin(a13)*sin(a18) + 0.55*a26*cos(a18)) - \na23*(a25*sin(a13)*sin(a18) + a26*cos(a18)))*(-a25*(0.045*sin(a18)**2 + \n0.045*cos(a18)**2)*cos(a13) - 0.55*a25*sin(a13)*cos(a18) + 0.55*a26*sin(a18) - \n0.045*a6)]''')",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 7
},
{
"cell_type": "code",
"collapsed": false,
"input": "small_exprs = sympy.sympify('[a*b + sin(a*b*c) + cos(a*b*c*d), 1/sin(a*b*c), -a*b*c*d]')",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 8
},
{
"cell_type": "code",
"collapsed": false,
"input": "#exprs = small_exprs\nexprs = large_exprs",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 9
},
{
"cell_type": "code",
"collapsed": false,
"input": "",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 9
},
{
"cell_type": "code",
"collapsed": false,
"input": "clear_cache()\n%time exprs_prevcse_opt = prev_cse(exprs) # external optimizations (cse_opts.py) are done by default\n%time exprs_prevcse_opt = prev_cse(exprs)",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "CPU times: user 2min 18s, sys: 153 ms, total: 2min 18s\nWall time: 2min 18s\nCPU times: user 1min 15s, sys: 40 ms, total: 1min 15s"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\nWall time: 1min 16s\n"
}
],
"prompt_number": 10
},
{
"cell_type": "code",
"collapsed": false,
"input": "clear_cache()\n%time exprs_prevcse_noopt = prev_cse(exprs, optimizations=[]) # force no external optimizations\n%time exprs_prevcse_noopt = prev_cse(exprs, optimizations=[])",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "CPU times: user 1min 16s, sys: 23.3 ms, total: 1min 16s\nWall time: 1min 16s\nCPU times: user 38.2 s, sys: 10 ms, total: 38.2 s"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\nWall time: 38.2 s\n"
}
],
"prompt_number": 11
},
{
"cell_type": "code",
"collapsed": false,
"input": "clear_cache()\n%time exprs_newcse_opt = new_cse(exprs, optimizations='basic') # uses previous implementation default external optimizations\n%time exprs_newcse_opt = new_cse(exprs, optimizations='basic')",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "CPU times: user 4.86 s, sys: 3.33 ms, total: 4.86 s\nWall time: 4.87 s\nCPU times: user 3.76 s, sys: 6.67 ms, total: 3.77 s"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\nWall time: 3.77 s\n"
}
],
"prompt_number": 12
},
{
"cell_type": "code",
"collapsed": false,
"input": "clear_cache()\n%time exprs_newcse = new_cse(exprs) # no external optimizations are performed by default in new implementation\n%time exprs_newcse = new_cse(exprs)",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "CPU times: user 723 ms, sys: 0 ns, total: 723 ms\nWall time: 723 ms\nCPU times: user 547 ms, sys: 0 ns, total: 547 ms"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\nWall time: 547 ms\n"
}
],
"prompt_number": 13
},
{
"cell_type": "code",
"collapsed": false,
"input": "clear_cache()\n%time exprs_newcse_noorder = new_cse(exprs, order='none') # do not order Muls and Adds terms,\n%time exprs_newcse_noorder = new_cse(exprs, order='none') # machine dependent hash ordering is used instead",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "CPU times: user 140 ms, sys: 0 ns, total: 140 ms\nWall time: 139 ms\nCPU times: user 33.3 ms, sys: 0 ns, total: 33.3 ms\nWall time: 35.4 ms\n"
}
],
"prompt_number": 14
},
{
"cell_type": "code",
"collapsed": false,
"input": "",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 14
},
{
"cell_type": "code",
"collapsed": false,
"input": "cse_output_names = 'exprs_prevcse_opt', 'exprs_prevcse_noopt', 'exprs_newcse_opt', 'exprs_newcse', 'exprs_newcse_noorder'\ncse_outputs = [(name, eval(name)) for name in cse_output_names]",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 15
},
{
"cell_type": "code",
"collapsed": false,
"input": "",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 15
},
{
"cell_type": "code",
"collapsed": false,
"input": "print(\"%22s %s\"%('original expressions', count(exprs)))\nfor name, cse_output in cse_outputs:\n print(\"%22s %s\"%(name, count(cse_output)))",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": " original expressions 0 =\t505 +\t530 -\t1994 *\t0 /\t186 **\t613 sin\t489 cos\n exprs_prevcse_opt 58 =\t161 +\t130 -\t392 *\t0 /\t2 **\t2 sin\t2 cos"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\n exprs_prevcse_noopt 50 =\t154 +\t117 -\t378 *\t0 /\t2 **\t2 sin\t2 cos"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\n exprs_newcse_opt 97 =\t103 +\t85 -\t180 *\t0 /\t2 **\t2 sin\t2 cos"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\n exprs_newcse 69 =\t80 +\t85 -\t178 *\t0 /\t2 **\t2 sin\t2 cos"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\n exprs_newcse_noorder 68 =\t80 +\t84 -\t173 *\t0 /\t2 **\t2 sin\t2 cos"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\n"
}
],
"prompt_number": 16
},
{
"cell_type": "markdown",
"metadata": {},
"source": " original expressions 0 = 505 + 530 - 1994 * 0 / 186 ** 613 sin 489 cos\n exprs_prevcse_opt 58 = 161 + 130 - 392 * 0 / 2 ** 2 sin 2 cos\n exprs_prevcse_noopt 50 = 154 + 117 - 378 * 0 / 2 ** 2 sin 2 cos\n exprs_newcse_opt 97 = 103 + 85 - 180 * 0 / 2 ** 2 sin 2 cos\n exprs_newcse 69 = 80 + 85 - 178 * 0 / 2 ** 2 sin 2 cos\n exprs_newcse_noorder 68 = 80 + 84 - 173 * 0 / 2 ** 2 sin 2 cos"
},
{
"cell_type": "code",
"collapsed": false,
"input": "for name, cse_output in cse_outputs:\n print(\">>> %22s :\"%(name))\n print(\" > %s\\n\"%('Ok' if verify_cse(exprs, cse_output) else 'Fail'))",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": ">>> exprs_prevcse_opt :\n-1.38777878078145e-17*a23*a26**2*sin(a13)*sin(a18)**3*cos(a18)**2"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\n1.38777878078145e-17*a23*a25*a26*sin(a13)*sin(a18)*cos(a18)**4"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\n > Fail\n"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\n>>> exprs_prevcse_noopt :\n > Ok\n"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\n>>> exprs_newcse_opt :\n-1.38777878078145e-17*a23*a26**2*sin(a13)*sin(a18)**3*cos(a18)**2"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\n1.38777878078145e-17*a23*a25*a26*sin(a13)*sin(a18)*cos(a18)**4"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\n > Fail\n"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\n>>> exprs_newcse :\n > Ok\n"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\n>>> exprs_newcse_noorder :\n > Ok\n"
},
{
"output_type": "stream",
"stream": "stdout",
"text": "\n"
}
],
"prompt_number": 17
},
{
"cell_type": "markdown",
"metadata": {},
"source": " >>> exprs_prevcse_opt :\n -1.38777878078145e-17*a23*a26**2*sin(a13)*sin(a18)**3*cos(a18)**2\n 1.38777878078145e-17*a23*a25*a26*sin(a13)*sin(a18)*cos(a18)**4\n > Fail\n\n >>> exprs_prevcse_noopt :\n > Ok\n\n >>> exprs_newcse_opt :\n -1.38777878078145e-17*a23*a26**2*sin(a13)*sin(a18)**3*cos(a18)**2\n 1.38777878078145e-17*a23*a25*a26*sin(a13)*sin(a18)*cos(a18)**4\n > Fail\n\n >>> exprs_newcse :\n > Ok\n\n >>> exprs_newcse_noorder :\n > Ok"
},
{
"cell_type": "code",
"collapsed": false,
"input": "",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 14
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment