Last active
December 19, 2015 16:49
-
-
Save cdsousa/5986996 to your computer and use it in GitHub Desktop.
SymPy Common Subexpression Elimination (CSE) Implementation Comparison Example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"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