Skip to content

Instantly share code, notes, and snippets.

@jrjohansson
Last active August 29, 2015 14:02
Show Gist options
  • Save jrjohansson/bf7862198171b16d0ff9 to your computer and use it in GitHub Desktop.
Save jrjohansson/bf7862198171b16d0ff9 to your computer and use it in GitHub Desktop.
sympy-series-expansion-issue
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": "",
"signature": "sha256:7b72856843f2744bfa70a54d9d0df124f43ed0e613dbd0e48e302b401f54ec15"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"Sympy series expansions issue: products of symbols with positivity assumption gives traceback"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from sympy import *\n",
"init_printing()"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": [
"This works:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"omega, t = symbols(\"omega, t\")\n",
"x = omega * t"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print(x.is_positive, x.is_negative)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"None None\n"
]
}
],
"prompt_number": 3
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"cos(x).series(x)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"latex": [
"$$1 - \\frac{\\omega^{2} t^{2}}{2} + \\frac{\\omega^{4} t^{4}}{24} + \\mathcal{O}\\left(\\omega^{6} t^{6}; \\begin{pmatrix}\\omega, & t\\end{pmatrix}\\rightarrow\\begin{pmatrix}0, & 0\\end{pmatrix}\\right)$$"
],
"metadata": {},
"output_type": "pyout",
"png": "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\n",
"prompt_number": 4,
"text": [
" 2 2 4 4 \n",
" \u03c9 \u22c5t \u03c9 \u22c5t \u239b 6 6 \u239e\n",
"1 - \u2500\u2500\u2500\u2500\u2500 + \u2500\u2500\u2500\u2500\u2500 + O\u239d\u03c9 \u22c5t ; (\u03c9, t) \u2192 (0, 0)\u23a0\n",
" 2 24 "
]
}
],
"prompt_number": 4
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": [
"This does not work:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"omega, t = symbols(\"omega, t\", positive=True)\n",
"x = omega * t"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 5
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print(x.is_positive, x.is_negative)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"True False\n"
]
}
],
"prompt_number": 6
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"sin(x).series(x)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"ename": "ValueError",
"evalue": "expecting a Symbol but got omega*t",
"output_type": "pyerr",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m<ipython-input-7-affeea2c611d>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0msin\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mseries\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;32m/home/rob/py-envs/py3-devel/lib/python3.4/site-packages/sympy/core/expr.py\u001b[0m in \u001b[0;36mseries\u001b[1;34m(self, x, x0, n, dir, logx)\u001b[0m\n\u001b[0;32m 2440\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2441\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mn\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m \u001b[1;31m# nseries handling\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2442\u001b[1;33m \u001b[0ms1\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_eval_nseries\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mn\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mn\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlogx\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mlogx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2443\u001b[0m \u001b[0mo\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0ms1\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mgetO\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mor\u001b[0m \u001b[0mS\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mZero\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2444\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mo\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/home/rob/py-envs/py3-devel/lib/python3.4/site-packages/sympy/core/function.py\u001b[0m in \u001b[0;36m_eval_nseries\u001b[1;34m(self, x, n, logx)\u001b[0m\n\u001b[0;32m 623\u001b[0m \u001b[1;31m# try to predict a number of terms needed\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 624\u001b[0m \u001b[0mnterms\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mn\u001b[0m \u001b[1;33m+\u001b[0m \u001b[1;36m2\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 625\u001b[1;33m \u001b[0mcf\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mC\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mOrder\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0marg\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mas_leading_term\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mgetn\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 626\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mcf\u001b[0m \u001b[1;33m!=\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 627\u001b[0m \u001b[0mnterms\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnterms\u001b[0m \u001b[1;33m/\u001b[0m \u001b[0mcf\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/home/rob/py-envs/py3-devel/lib/python3.4/site-packages/sympy/core/cache.py\u001b[0m in \u001b[0;36mwrapper\u001b[1;34m(*args, **kw_args)\u001b[0m\n\u001b[0;32m 98\u001b[0m \u001b[1;32mexcept\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mKeyError\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 99\u001b[0m \u001b[1;32mpass\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 100\u001b[1;33m \u001b[0mr\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mfunc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkw_args\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 101\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 102\u001b[0m \u001b[0mfunc_cache_it_cache\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mk\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mr\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/home/rob/py-envs/py3-devel/lib/python3.4/site-packages/sympy/core/expr.py\u001b[0m in \u001b[0;36mas_leading_term\u001b[1;34m(self, *symbols)\u001b[0m\n\u001b[0;32m 2708\u001b[0m \u001b[0mx\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msympify\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msymbols\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2709\u001b[0m \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mis_Symbol\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2710\u001b[1;33m \u001b[1;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'expecting a Symbol but got %s'\u001b[0m \u001b[1;33m%\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2711\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfree_symbols\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2712\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mValueError\u001b[0m: expecting a Symbol but got omega*t"
]
}
],
"prompt_number": 7
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"Versions"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%reload_ext version_information\n",
"\n",
"%version_information sympy"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"<table><tr><th>Software</th><th>Version</th></tr><tr><td>Python</td><td>3.4.0 (default, Apr 11 2014, 13:05:11) [GCC 4.8.2]</td></tr><tr><td>IPython</td><td>3.0.0-dev</td></tr><tr><td>OS</td><td>posix [linux]</td></tr><tr><td>sympy</td><td>0.7.5-git</td></tr><tr><td colspan='2'>Thu Jun 12 11:23:08 2014 JST</td></tr></table>"
],
"json": [
"{\"Software versions\": [{\"version\": \"3.4.0 (default, Apr 11 2014, 13:05:11) [GCC 4.8.2]\", \"module\": \"Python\"}, {\"version\": \"3.0.0-dev\", \"module\": \"IPython\"}, {\"version\": \"posix [linux]\", \"module\": \"OS\"}, {\"version\": \"0.7.5-git\", \"module\": \"sympy\"}]}"
],
"latex": [
"\\begin{tabular}{|l|l|}\\hline\n",
"{\\bf Software} & {\\bf Version} \\\\ \\hline\\hline\n",
"Python & 3.4.0 (default, Apr 11 2014, 13:05:11) [GCC 4.8.2] \\\\ \\hline\n",
"IPython & 3.0.0-dev \\\\ \\hline\n",
"OS & posix [linux] \\\\ \\hline\n",
"sympy & 0.7.5-git \\\\ \\hline\n",
"\\hline \\multicolumn{2}{|l|}{Thu Jun 12 11:23:08 2014 JST} \\\\ \\hline\n",
"\\end{tabular}\n"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 8,
"text": [
"Software versions\n",
"Python 3.4.0 (default, Apr 11 2014, 13:05:11) [GCC 4.8.2]\n",
"IPython 3.0.0-dev\n",
"OS posix [linux]\n",
"sympy 0.7.5-git\n",
"\n",
"Thu Jun 12 11:23:08 2014 JST"
]
}
],
"prompt_number": 8
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment