{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import sympy as smp\n", "from scipy.integrate import odeint\n", "import matplotlib.pyplot as plt\n", "from matplotlib import animation\n", "from mpl_toolkits.mplot3d import Axes3D\n", "from matplotlib.animation import PillowWriter" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Preliminary\n", "\n", "Suppose we have the Lagrangian\n", "\n", "$$L = \\frac{1}{2} m_1 (\\dot{x}_1^2+\\dot{y}_1^2) + \\frac{1}{2} m_2 (\\dot{x}_2^2+\\dot{y}_2^2) -m_1gy_1 - m_2gy_2 $$\n", "\n", "We can remove some degrees of freedom by dividing by $m_1$ and some characteristic length $A$ of the problem\n", "\n", "$$\\frac{L}{A^2 m_1} = \\frac{1}{2} \\left(\\left(\\dot{\\frac{x_1}{A}}\\right)^2+\\left(\\dot{\\frac{y_1}{A}}\\right)^2 \\right) + \\frac{1}{2} \\frac{m_2}{m_1}\\left(\\left(\\dot{\\frac{x_2}{A}}\\right)^2+\\left(\\dot{\\frac{y_2}{A}}\\right)^2 \\right) -\\frac{g}{A}\\frac{y_1}{A} - \\frac{m_2}{m_1}\\frac{g}{A}\\frac{y_2}{A} $$\n", "\n", "This might look more complicated, by defining $m = m_2/m_1$ and putting primes such that $x' = x/A$ we get\n", "\n", "$$\\frac{L}{A^2 m_1} = \\frac{1}{2} (\\dot{x'}_1^2+\\dot{y'}_1^2) + \\frac{1}{2} m (\\dot{x'}_2^2+\\dot{y'}_2^2) -g'y_1' - mg'y_2' $$\n", "\n", "Note that $\\frac{L}{A^2 m_1}$ produces the same equations of motion as $L$ (for any $C$, $CL$ produces the same equations of motion as $L$). Thus we can solve the Lagrangian problem above, and then put in any values of $A$ and $m_1$ we want afterwards, and scale appropriately." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The Problem\n", "\n", "The driven double pendulum with masses $m_1=1$ and $m_2=m$ and arm-lengths $L_1$ and $L_2$ has it upper arm connector to a motor that displaces the base with at $\\cos(\\omega t)$ where $\\omega$ is the driving frequency.\n", "\n", "

\n", " \"drawing\"\n", "

" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "and thus\n", "\n", "* $x_1 = \\cos(\\omega t) + L_1 \\sin(\\theta_1)$\n", "* $x_2 = \\cos(\\omega t) + L_1 \\sin(\\theta_1) + L_2 \\sin(\\theta_2)$\n", "* $y_1 = -L_1 \\cos(\\theta_1)$\n", "* $y_2 = -L_1 \\cos(\\theta_1)-L_2 \\cos(\\theta_2)$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Define required variables for sympy" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "t, m, g, L1, L2, w, C, alph, beta = smp.symbols(r't m g L_1, L_2 \\omega C \\alpha \\beta')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Define $\\theta_1(t)$ and $\\theta_2(t)$ and declare them functions of time. Also get their first and second derivatives." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "the1, the2, = smp.symbols(r'\\theta_1, \\theta_2 ', cls=smp.Function)\n", "\n", "the1 = the1(t)\n", "the1_d = smp.diff(the1, t)\n", "the1_dd = smp.diff(the1_d, t)\n", "\n", "the2 = the2(t)\n", "the2_d = smp.diff(the2, t)\n", "the2_dd = smp.diff(smp.diff(the2, t), t)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Declare $x_1(\\theta_1)$, $y_1(\\theta_1)$ and $x_2(\\theta_1, \\theta_2)$, $y_2(\\theta_1, \\theta_2)$" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "x1, y1, x2, y2 = smp.symbols('x_1, y_1, x_2, y_2', cls=smp.Function)\n", "x1= x1(t, the1)\n", "y1= y1(t, the1)\n", "x2= x2(t, the1, the2)\n", "y2= y2(t, the1, the2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Put in the specific functional form of $x_1$, $y_1$, $x_2$, $y_2$" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "x1 = smp.cos(w*t)+L1*smp.sin(the1)\n", "y1 = -L1*smp.cos(the1)\n", "x2 = smp.cos(w*t)+L1*smp.sin(the1) + L2*smp.sin(the2)\n", "y2 = -L1*smp.cos(the1) -L2*smp.cos(the2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Define numerical functions for $v_{x1}$, $v_{y1}$, $v_{x2}$, $v_{y1}$" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle L_{1} \\cos{\\left(\\theta_{1}{\\left(t \\right)} \\right)} \\frac{d}{d t} \\theta_{1}{\\left(t \\right)} - \\omega \\sin{\\left(\\omega t \\right)}$" ], "text/plain": [ "L_1*cos(\\theta_1(t))*Derivative(\\theta_1(t), t) - \\omega*sin(\\omega*t)" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "smp.diff(x1, t)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "vx1_f = smp.lambdify((t,w,L1,L2,the1,the2,the1_d,the2_d), smp.diff(x1, t))\n", "vx2_f = smp.lambdify((t,w,L1,L2,the1,the2,the1_d,the2_d), smp.diff(x2, t))\n", "vy1_f = smp.lambdify((t,w,L1,L2,the1,the2,the1_d,the2_d), smp.diff(y1, t))\n", "vy2_f = smp.lambdify((t,w,L1,L2,the1,the2,the1_d,the2_d), smp.diff(y2, t))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Define kinetic energy $T$, potential energy $V$, and Lagrangian $L=T-V$" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "T = 1/2 * (smp.diff(x1, t)**2 + smp.diff(y1, t)**2) + \\\n", " 1/2 * m *(smp.diff(x2, t)**2 + + smp.diff(y2, t)**2)\n", "V = g*y1 + m*g*y2\n", "L = T-V" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Solve Lagranges Equations\n", "\n", "$$\\frac{\\partial L}{ \\partial \\theta} - \\frac{d}{dt}\\frac{\\partial L}{ \\partial \\dot{\\theta}} = 0$$" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [], "source": [ "LE1 = smp.diff(L, the1) - smp.diff(smp.diff(L, the1_d), t)\n", "LE1 = LE1.simplify()\n", "\n", "LE2 = smp.diff(L, the2) - smp.diff(smp.diff(L, the2_d), t)\n", "LE2 = LE2.simplify()" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle 1.0 L_{1} \\left(- L_{1} m \\frac{d^{2}}{d t^{2}} \\theta_{1}{\\left(t \\right)} - L_{1} \\frac{d^{2}}{d t^{2}} \\theta_{1}{\\left(t \\right)} - L_{2} m \\sin{\\left(\\theta_{1}{\\left(t \\right)} - \\theta_{2}{\\left(t \\right)} \\right)} \\left(\\frac{d}{d t} \\theta_{2}{\\left(t \\right)}\\right)^{2} - L_{2} m \\cos{\\left(\\theta_{1}{\\left(t \\right)} - \\theta_{2}{\\left(t \\right)} \\right)} \\frac{d^{2}}{d t^{2}} \\theta_{2}{\\left(t \\right)} + \\omega^{2} m \\cos{\\left(\\omega t \\right)} \\cos{\\left(\\theta_{1}{\\left(t \\right)} \\right)} + \\omega^{2} \\cos{\\left(\\omega t \\right)} \\cos{\\left(\\theta_{1}{\\left(t \\right)} \\right)} - g m \\sin{\\left(\\theta_{1}{\\left(t \\right)} \\right)} - g \\sin{\\left(\\theta_{1}{\\left(t \\right)} \\right)}\\right)$" ], "text/plain": [ "1.0*L_1*(-L_1*m*Derivative(\\theta_1(t), (t, 2)) - L_1*Derivative(\\theta_1(t), (t, 2)) - L_2*m*sin(\\theta_1(t) - \\theta_2(t))*Derivative(\\theta_2(t), t)**2 - L_2*m*cos(\\theta_1(t) - \\theta_2(t))*Derivative(\\theta_2(t), (t, 2)) + \\omega**2*m*cos(\\omega*t)*cos(\\theta_1(t)) + \\omega**2*cos(\\omega*t)*cos(\\theta_1(t)) - g*m*sin(\\theta_1(t)) - g*sin(\\theta_1(t)))" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "LE1" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle 1.0 L_{2} m \\left(L_{1} \\sin{\\left(\\theta_{1}{\\left(t \\right)} - \\theta_{2}{\\left(t \\right)} \\right)} \\left(\\frac{d}{d t} \\theta_{1}{\\left(t \\right)}\\right)^{2} - L_{1} \\cos{\\left(\\theta_{1}{\\left(t \\right)} - \\theta_{2}{\\left(t \\right)} \\right)} \\frac{d^{2}}{d t^{2}} \\theta_{1}{\\left(t \\right)} - L_{2} \\frac{d^{2}}{d t^{2}} \\theta_{2}{\\left(t \\right)} + \\omega^{2} \\cos{\\left(\\omega t \\right)} \\cos{\\left(\\theta_{2}{\\left(t \\right)} \\right)} - g \\sin{\\left(\\theta_{2}{\\left(t \\right)} \\right)}\\right)$" ], "text/plain": [ "1.0*L_2*m*(L_1*sin(\\theta_1(t) - \\theta_2(t))*Derivative(\\theta_1(t), t)**2 - L_1*cos(\\theta_1(t) - \\theta_2(t))*Derivative(\\theta_1(t), (t, 2)) - L_2*Derivative(\\theta_2(t), (t, 2)) + \\omega**2*cos(\\omega*t)*cos(\\theta_2(t)) - g*sin(\\theta_2(t)))" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "LE2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since these are both equal to zero and linear in terms of $\\partial_t^2 \\theta_1$ and $\\partial_t^2 \\theta_2$, we can solve for everything in terms of $\\partial_t^2 \\theta_1$ and $\\partial_t^2 \\theta_2$ (this gives us two coupled second order ODEs)" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle \\frac{L_{2} m \\left(- L_{1} \\sin{\\left(\\theta_{1}{\\left(t \\right)} - \\theta_{2}{\\left(t \\right)} \\right)} \\left(\\frac{d}{d t} \\theta_{1}{\\left(t \\right)}\\right)^{2} - \\omega^{2} \\cos{\\left(\\omega t \\right)} \\cos{\\left(\\theta_{2}{\\left(t \\right)} \\right)} + g \\sin{\\left(\\theta_{2}{\\left(t \\right)} \\right)}\\right) \\cos{\\left(\\theta_{1}{\\left(t \\right)} - \\theta_{2}{\\left(t \\right)} \\right)}}{- L_{1} L_{2} m \\cos^{2}{\\left(\\theta_{1}{\\left(t \\right)} - \\theta_{2}{\\left(t \\right)} \\right)} - L_{2} \\left(- L_{1} m - L_{1}\\right)} - \\frac{L_{2} \\left(L_{2} m \\sin{\\left(\\theta_{1}{\\left(t \\right)} - \\theta_{2}{\\left(t \\right)} \\right)} \\left(\\frac{d}{d t} \\theta_{2}{\\left(t \\right)}\\right)^{2} - \\omega^{2} m \\cos{\\left(\\omega t \\right)} \\cos{\\left(\\theta_{1}{\\left(t \\right)} \\right)} - \\omega^{2} \\cos{\\left(\\omega t \\right)} \\cos{\\left(\\theta_{1}{\\left(t \\right)} \\right)} + g m \\sin{\\left(\\theta_{1}{\\left(t \\right)} \\right)} + g \\sin{\\left(\\theta_{1}{\\left(t \\right)} \\right)}\\right)}{- L_{1} L_{2} m \\cos^{2}{\\left(\\theta_{1}{\\left(t \\right)} - \\theta_{2}{\\left(t \\right)} \\right)} - L_{2} \\left(- L_{1} m - L_{1}\\right)}$" ], "text/plain": [ "L_2*m*(-L_1*sin(\\theta_1(t) - \\theta_2(t))*Derivative(\\theta_1(t), t)**2 - \\omega**2*cos(\\omega*t)*cos(\\theta_2(t)) + g*sin(\\theta_2(t)))*cos(\\theta_1(t) - \\theta_2(t))/(-L_1*L_2*m*cos(\\theta_1(t) - \\theta_2(t))**2 - L_2*(-L_1*m - L_1)) - L_2*(L_2*m*sin(\\theta_1(t) - \\theta_2(t))*Derivative(\\theta_2(t), t)**2 - \\omega**2*m*cos(\\omega*t)*cos(\\theta_1(t)) - \\omega**2*cos(\\omega*t)*cos(\\theta_1(t)) + g*m*sin(\\theta_1(t)) + g*sin(\\theta_1(t)))/(-L_1*L_2*m*cos(\\theta_1(t) - \\theta_2(t))**2 - L_2*(-L_1*m - L_1))" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sols = smp.solve([LE1, LE2], (the1_dd, the2_dd),\n", " simplify=False, rational=False)\n", "\n", "sols[the1_dd] #d^2 / dt^2 theta_1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Can we find driving frequencies that result in resonance. For simplicity:\n", "\n", "* Assume small angle approximation for $\\theta_1$ and $\\theta_2$\n", "* Assume $\\theta_1$ and $\\theta_2$ have solutions $\\theta_1(t) = C\\cos(\\omega t)$ and $\\theta_2(t) = C \\alpha \\cos(\\omega t)$" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle 1.0 L_{1} \\left(- L_{1} m \\frac{d^{2}}{d t^{2}} \\theta_{1}{\\left(t \\right)} - L_{1} \\frac{d^{2}}{d t^{2}} \\theta_{1}{\\left(t \\right)} - L_{2} m \\sin{\\left(\\theta_{1}{\\left(t \\right)} - \\theta_{2}{\\left(t \\right)} \\right)} \\left(\\frac{d}{d t} \\theta_{2}{\\left(t \\right)}\\right)^{2} - L_{2} m \\cos{\\left(\\theta_{1}{\\left(t \\right)} - \\theta_{2}{\\left(t \\right)} \\right)} \\frac{d^{2}}{d t^{2}} \\theta_{2}{\\left(t \\right)} + \\omega^{2} m \\cos{\\left(\\omega t \\right)} \\cos{\\left(\\theta_{1}{\\left(t \\right)} \\right)} + \\omega^{2} \\cos{\\left(\\omega t \\right)} \\cos{\\left(\\theta_{1}{\\left(t \\right)} \\right)} - g m \\sin{\\left(\\theta_{1}{\\left(t \\right)} \\right)} - g \\sin{\\left(\\theta_{1}{\\left(t \\right)} \\right)}\\right)$" ], "text/plain": [ "1.0*L_1*(-L_1*m*Derivative(\\theta_1(t), (t, 2)) - L_1*Derivative(\\theta_1(t), (t, 2)) - L_2*m*sin(\\theta_1(t) - \\theta_2(t))*Derivative(\\theta_2(t), t)**2 - L_2*m*cos(\\theta_1(t) - \\theta_2(t))*Derivative(\\theta_2(t), (t, 2)) + \\omega**2*m*cos(\\omega*t)*cos(\\theta_1(t)) + \\omega**2*cos(\\omega*t)*cos(\\theta_1(t)) - g*m*sin(\\theta_1(t)) - g*sin(\\theta_1(t)))" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "LE1" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [], "source": [ "a = LE1.subs([(smp.sin(the1-the2), the1-the2),\n", " (smp.cos(the1-the2), 1),\n", " (smp.cos(the1), 1),\n", " (smp.sin(the1), the1),\n", " (the1, C*smp.cos(w*t)),\n", " (the2, C*alph*smp.cos(w*t)),\n", " (m, 1),\n", " (L2, L1),\n", " ]).doit().series(C, 0, 2).removeO().simplify()" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [], "source": [ "b = LE2.subs([(smp.sin(the1-the2), the1-the2),\n", " (smp.cos(the1-the2), 1),\n", " (smp.cos(the1), 1),\n", " (smp.cos(the2), 1),\n", " (smp.sin(the1), the1),\n", " (smp.sin(the2), the2), \n", " (the1, C*smp.cos(w*t)),\n", " (the2, C*alph*smp.cos(w*t)),\n", " (m, 1),\n", " (L2, L1),\n", " ]).doit().series(C, 0, 2).removeO().simplify()" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [], "source": [ "yeet = smp.solve([a.args[1], b.args[2]], (w, alph))" ] }, { "cell_type": "code", "execution_count": 66, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle - \\sqrt{- \\frac{C g \\left(-2.0 + \\frac{1.4142135623731 \\left(C^{2} L_{1}^{2} + C L_{1} + 0.5\\right)^{0.5}}{C L_{1}} - \\frac{1}{C L_{1}}\\right)}{C L_{1} + 1.0}}$" ], "text/plain": [ "-sqrt(-C*g*(-2.0 + 1.4142135623731*(C**2*L_1**2 + C*L_1 + 0.5)**0.5/(C*L_1) - 1/(C*L_1))/(C*L_1 + 1.0))" ] }, "execution_count": 66, "metadata": {}, "output_type": "execute_result" } ], "source": [ "yeet[2][0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now set $\\beta = CL_1$ and take the limit as $\\beta \\to \\infty$." ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle - \\sqrt{- \\frac{C g \\left(-2.0 - \\frac{1.4142135623731 \\left(C^{2} L_{1}^{2} + C L_{1} + 0.5\\right)^{0.5}}{C L_{1}} - \\frac{1}{C L_{1}}\\right)}{C L_{1} + 1.0}}$" ], "text/plain": [ "-sqrt(-C*g*(-2.0 - 1.4142135623731*(C**2*L_1**2 + C*L_1 + 0.5)**0.5/(C*L_1) - 1/(C*L_1))/(C*L_1 + 1.0))" ] }, "execution_count": 67, "metadata": {}, "output_type": "execute_result" } ], "source": [ "yeet[0][0]" ] }, { "cell_type": "code", "execution_count": 82, "metadata": {}, "outputs": [ { "ename": "KeyboardInterrupt", "evalue": "", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0msmp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlimit\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0myeet\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msubs\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mC\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mbeta\u001b[0m\u001b[1;33m/\u001b[0m\u001b[0mL1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msimplify\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mbeta\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0msmp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0moo\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\series\\limits.py\u001b[0m in \u001b[0;36mlimit\u001b[1;34m(e, z, z0, dir)\u001b[0m\n\u001b[0;32m 68\u001b[0m \"\"\"\n\u001b[0;32m 69\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 70\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mLimit\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0me\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mz\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mz0\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdir\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdoit\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdeep\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mFalse\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 71\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 72\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\series\\limits.py\u001b[0m in \u001b[0;36mdoit\u001b[1;34m(self, **hints)\u001b[0m\n\u001b[0;32m 258\u001b[0m % (l, r))\n\u001b[0;32m 259\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 260\u001b[1;33m \u001b[0mr\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mgruntz\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0me\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mz\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mz0\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdir\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 261\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mr\u001b[0m \u001b[1;32mis\u001b[0m \u001b[0mS\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mNaN\u001b[0m \u001b[1;32mor\u001b[0m \u001b[0ml\u001b[0m \u001b[1;32mis\u001b[0m \u001b[0mS\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mNaN\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 262\u001b[0m \u001b[1;32mraise\u001b[0m \u001b[0mPoleError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\series\\gruntz.py\u001b[0m in \u001b[0;36mgruntz\u001b[1;34m(e, z, z0, dir)\u001b[0m\n\u001b[0;32m 667\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 668\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 669\u001b[1;33m \u001b[0mr\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mlimitinf\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0me0\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mz\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 670\u001b[0m \u001b[1;32mexcept\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 671\u001b[0m \u001b[0mr\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mlimitinf\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0me0\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mz\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mleadsimp\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\series\\gruntz.py\u001b[0m in \u001b[0;36mlimitinf\u001b[1;34m(e, x, leadsimp)\u001b[0m\n\u001b[0;32m 431\u001b[0m \u001b[0mx\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mp\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 432\u001b[0m \u001b[0me\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mpowdenest\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0me\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 433\u001b[1;33m \u001b[0mc0\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0me0\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mmrv_leadterm\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0me\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mx\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 434\u001b[0m \u001b[0msig\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msign\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0me0\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 435\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0msig\u001b[0m \u001b[1;33m==\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\series\\gruntz.py\u001b[0m in \u001b[0;36mmrv_leadterm\u001b[1;34m(e, x)\u001b[0m\n\u001b[0;32m 520\u001b[0m \u001b[0mw\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mDummy\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"w\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mreal\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mpositive\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfinite\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 521\u001b[0m \u001b[0mf\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlogw\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mrewrite\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mexps\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mOmega\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mw\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 522\u001b[1;33m \u001b[0mseries\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mcalculate_series\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mf\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mw\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlogx\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mlogw\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 523\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mseries\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mleadterm\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mw\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 524\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\series\\gruntz.py\u001b[0m in \u001b[0;36mcalculate_series\u001b[1;34m(e, x, logx)\u001b[0m\n\u001b[0;32m 473\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0msympy\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpolys\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mcancel\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 474\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 475\u001b[1;33m \u001b[1;32mfor\u001b[0m \u001b[0mt\u001b[0m \u001b[1;32min\u001b[0m \u001b[0me\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlseries\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\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[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 476\u001b[0m \u001b[0mt\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mcancel\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mt\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 477\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\core\\expr.py\u001b[0m in \u001b[0;36myield_lseries\u001b[1;34m(s)\u001b[0m\n\u001b[0;32m 2923\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0myield_lseries\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0ms\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2924\u001b[0m \u001b[1;34m\"\"\"Return terms of lseries one at a time.\"\"\"\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2925\u001b[1;33m \u001b[1;32mfor\u001b[0m \u001b[0msi\u001b[0m \u001b[1;32min\u001b[0m \u001b[0ms\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 2926\u001b[0m \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0msi\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mis_Add\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2927\u001b[0m \u001b[1;32myield\u001b[0m \u001b[0msi\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\core\\expr.py\u001b[0m in \u001b[0;36m_eval_lseries\u001b[1;34m(self, x, logx)\u001b[0m\n\u001b[0;32m 3135\u001b[0m \u001b[1;31m# terms.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3136\u001b[0m \u001b[0mn\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[1;32m-> 3137\u001b[1;33m \u001b[0mseries\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[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3138\u001b[0m \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mseries\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mis_Order\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3139\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mseries\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mis_Add\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\core\\power.py\u001b[0m in \u001b[0;36m_eval_nseries\u001b[1;34m(self, x, n, logx)\u001b[0m\n\u001b[0;32m 1564\u001b[0m \u001b[0morder\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mO\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[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1565\u001b[0m \u001b[0mei\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0minfinite\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0me2int\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0me\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1566\u001b[1;33m \u001b[0mb0\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mb\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlimit\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\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[0m\u001b[0;32m 1567\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0minfinite\u001b[0m \u001b[1;32mand\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mb0\u001b[0m \u001b[1;32mis\u001b[0m \u001b[0mS\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mOne\u001b[0m \u001b[1;32mor\u001b[0m \u001b[0mb0\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mhas\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mSymbol\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1568\u001b[0m \u001b[1;31m# XXX what order\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\core\\expr.py\u001b[0m in \u001b[0;36mlimit\u001b[1;34m(self, x, xlim, dir)\u001b[0m\n\u001b[0;32m 3245\u001b[0m \"\"\"\n\u001b[0;32m 3246\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0msympy\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mseries\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlimits\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mlimit\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 3247\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mlimit\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mxlim\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdir\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 3248\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3249\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mcompute_leading_term\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlogx\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mNone\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\series\\limits.py\u001b[0m in \u001b[0;36mlimit\u001b[1;34m(e, z, z0, dir)\u001b[0m\n\u001b[0;32m 68\u001b[0m \"\"\"\n\u001b[0;32m 69\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 70\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mLimit\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0me\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mz\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mz0\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdir\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdoit\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdeep\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mFalse\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 71\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 72\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\series\\limits.py\u001b[0m in \u001b[0;36mdoit\u001b[1;34m(self, **hints)\u001b[0m\n\u001b[0;32m 258\u001b[0m % (l, r))\n\u001b[0;32m 259\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 260\u001b[1;33m \u001b[0mr\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mgruntz\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0me\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mz\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mz0\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdir\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 261\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mr\u001b[0m \u001b[1;32mis\u001b[0m \u001b[0mS\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mNaN\u001b[0m \u001b[1;32mor\u001b[0m \u001b[0ml\u001b[0m \u001b[1;32mis\u001b[0m \u001b[0mS\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mNaN\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 262\u001b[0m \u001b[1;32mraise\u001b[0m \u001b[0mPoleError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\series\\gruntz.py\u001b[0m in \u001b[0;36mgruntz\u001b[1;34m(e, z, z0, dir)\u001b[0m\n\u001b[0;32m 667\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 668\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 669\u001b[1;33m \u001b[0mr\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mlimitinf\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0me0\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mz\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 670\u001b[0m \u001b[1;32mexcept\u001b[0m \u001b[0mValueError\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 671\u001b[0m \u001b[0mr\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mlimitinf\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0me0\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mz\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mleadsimp\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\series\\gruntz.py\u001b[0m in \u001b[0;36mlimitinf\u001b[1;34m(e, x, leadsimp)\u001b[0m\n\u001b[0;32m 431\u001b[0m \u001b[0mx\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mp\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 432\u001b[0m \u001b[0me\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mpowdenest\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0me\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 433\u001b[1;33m \u001b[0mc0\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0me0\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mmrv_leadterm\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0me\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mx\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 434\u001b[0m \u001b[0msig\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msign\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0me0\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 435\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0msig\u001b[0m \u001b[1;33m==\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\series\\gruntz.py\u001b[0m in \u001b[0;36mmrv_leadterm\u001b[1;34m(e, x)\u001b[0m\n\u001b[0;32m 520\u001b[0m \u001b[0mw\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mDummy\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"w\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mreal\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mpositive\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfinite\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 521\u001b[0m \u001b[0mf\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlogw\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mrewrite\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mexps\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mOmega\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mw\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 522\u001b[1;33m \u001b[0mseries\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mcalculate_series\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mf\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mw\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlogx\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mlogw\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 523\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mseries\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mleadterm\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mw\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 524\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\series\\gruntz.py\u001b[0m in \u001b[0;36mcalculate_series\u001b[1;34m(e, x, logx)\u001b[0m\n\u001b[0;32m 473\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0msympy\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpolys\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mcancel\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 474\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 475\u001b[1;33m \u001b[1;32mfor\u001b[0m \u001b[0mt\u001b[0m \u001b[1;32min\u001b[0m \u001b[0me\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlseries\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\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[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 476\u001b[0m \u001b[0mt\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mcancel\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mt\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 477\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\core\\expr.py\u001b[0m in \u001b[0;36myield_lseries\u001b[1;34m(s)\u001b[0m\n\u001b[0;32m 2923\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0myield_lseries\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0ms\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2924\u001b[0m \u001b[1;34m\"\"\"Return terms of lseries one at a time.\"\"\"\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2925\u001b[1;33m \u001b[1;32mfor\u001b[0m \u001b[0msi\u001b[0m \u001b[1;32min\u001b[0m \u001b[0ms\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 2926\u001b[0m \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0msi\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mis_Add\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2927\u001b[0m \u001b[1;32myield\u001b[0m \u001b[0msi\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\core\\expr.py\u001b[0m in \u001b[0;36m_eval_lseries\u001b[1;34m(self, x, logx)\u001b[0m\n\u001b[0;32m 3145\u001b[0m \u001b[1;32mwhile\u001b[0m \u001b[0mseries\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mis_Order\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3146\u001b[0m \u001b[0mn\u001b[0m \u001b[1;33m+=\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 3147\u001b[1;33m \u001b[0mseries\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[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3148\u001b[0m \u001b[0me\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mseries\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mremoveO\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3149\u001b[0m \u001b[1;32myield\u001b[0m \u001b[0me\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\core\\mul.py\u001b[0m in \u001b[0;36m_eval_nseries\u001b[1;34m(self, x, n, logx)\u001b[0m\n\u001b[0;32m 1756\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0msympy\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mOrder\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mpowsimp\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1757\u001b[0m \u001b[0mterms\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0mt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mnseries\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;32mfor\u001b[0m \u001b[0mt\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1758\u001b[1;33m \u001b[0mres\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mpowsimp\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfunc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0mterms\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mexpand\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcombine\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m'exp'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdeep\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\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 1759\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mres\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mhas\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mOrder\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1760\u001b[0m \u001b[0mres\u001b[0m \u001b[1;33m+=\u001b[0m \u001b[0mOrder\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[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\core\\expr.py\u001b[0m in \u001b[0;36mexpand\u001b[1;34m(self, deep, modulus, power_base, power_exp, mul, log, multinomial, basic, **hints)\u001b[0m\n\u001b[0;32m 3481\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0muse_hint\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3482\u001b[0m \u001b[0mhint\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m'_eval_expand_'\u001b[0m \u001b[1;33m+\u001b[0m \u001b[0mhint\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 3483\u001b[1;33m \u001b[0mexpr\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mhit\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mExpr\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_expand_hint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mexpr\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mhint\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdeep\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mdeep\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mhints\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 3484\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3485\u001b[0m \u001b[1;32mwhile\u001b[0m \u001b[1;32mTrue\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\core\\expr.py\u001b[0m in \u001b[0;36m_expand_hint\u001b[1;34m(expr, hint, deep, **hints)\u001b[0m\n\u001b[0;32m 3422\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3423\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mhasattr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mexpr\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mhint\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 3424\u001b[1;33m \u001b[0mnewexpr\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mexpr\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mhint\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m**\u001b[0m\u001b[0mhints\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 3425\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mnewexpr\u001b[0m \u001b[1;33m!=\u001b[0m \u001b[0mexpr\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3426\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mnewexpr\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;32mTrue\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\core\\mul.py\u001b[0m in \u001b[0;36m_eval_expand_mul\u001b[1;34m(self, **hints)\u001b[0m\n\u001b[0;32m 883\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0msums\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 884\u001b[0m \u001b[0mdeep\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mhints\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"deep\"\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;32mFalse\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 885\u001b[1;33m \u001b[0mterms\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfunc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_expandsums\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msums\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 886\u001b[0m \u001b[0margs\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 887\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mterm\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mterms\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\core\\mul.py\u001b[0m in \u001b[0;36m_expandsums\u001b[1;34m(sums)\u001b[0m\n\u001b[0;32m 848\u001b[0m \u001b[0mright\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mMul\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_expandsums\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msums\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mL\u001b[0m\u001b[1;33m//\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 849\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 850\u001b[1;33m \u001b[0mterms\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0mMul\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0ma\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mb\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mleft\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mb\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mright\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 851\u001b[0m \u001b[0madded\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mAdd\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0mterms\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 852\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mAdd\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmake_args\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0madded\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;31m# it may have collapsed down to one term\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\core\\mul.py\u001b[0m in \u001b[0;36m\u001b[1;34m(.0)\u001b[0m\n\u001b[0;32m 848\u001b[0m \u001b[0mright\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mMul\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_expandsums\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0msums\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mL\u001b[0m\u001b[1;33m//\u001b[0m\u001b[1;36m2\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 849\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 850\u001b[1;33m \u001b[0mterms\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0mMul\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0ma\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mb\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mleft\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mb\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mright\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 851\u001b[0m \u001b[0madded\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mAdd\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0mterms\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 852\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mAdd\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mmake_args\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0madded\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;31m# it may have collapsed down to one term\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\core\\operations.py\u001b[0m in \u001b[0;36m__new__\u001b[1;34m(cls, *args, **options)\u001b[0m\n\u001b[0;32m 56\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 57\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0morder_symbols\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 58\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mOrder\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m*\u001b[0m\u001b[0morder_symbols\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 59\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mobj\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 60\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\series\\order.py\u001b[0m in \u001b[0;36m__new__\u001b[1;34m(cls, expr, *args, **kwargs)\u001b[0m\n\u001b[0;32m 222\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 223\u001b[0m \u001b[1;32melif\u001b[0m \u001b[0mexpr\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 224\u001b[1;33m \u001b[0mexpr\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mexpr\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mas_leading_term\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[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 225\u001b[0m \u001b[0mexpr\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mexpr\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mas_independent\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mas_Add\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mFalse\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 226\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\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 3303\u001b[0m \u001b[0mobj\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_eval_as_leading_term\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3304\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mobj\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 3305\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mpowsimp\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdeep\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcombine\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m'exp'\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 3306\u001b[0m \u001b[1;32mraise\u001b[0m \u001b[0mNotImplementedError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'as_leading_term(%s, %s)'\u001b[0m \u001b[1;33m%\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3307\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\simplify\\powsimp.py\u001b[0m in \u001b[0;36mpowsimp\u001b[1;34m(expr, deep, combine, force, measure)\u001b[0m\n\u001b[0;32m 116\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 117\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mdeep\u001b[0m \u001b[1;32mor\u001b[0m \u001b[0mexpr\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mis_Add\u001b[0m \u001b[1;32mor\u001b[0m \u001b[0mexpr\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mis_Mul\u001b[0m \u001b[1;32mand\u001b[0m \u001b[0m_y\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mexpr\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 118\u001b[1;33m \u001b[0mexpr\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mexpr\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfunc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mrecurse\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mw\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mw\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mexpr\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m]\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 119\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 120\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mexpr\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mis_Pow\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\simplify\\powsimp.py\u001b[0m in \u001b[0;36m\u001b[1;34m(.0)\u001b[0m\n\u001b[0;32m 116\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 117\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mdeep\u001b[0m \u001b[1;32mor\u001b[0m \u001b[0mexpr\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mis_Add\u001b[0m \u001b[1;32mor\u001b[0m \u001b[0mexpr\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mis_Mul\u001b[0m \u001b[1;32mand\u001b[0m \u001b[0m_y\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mexpr\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 118\u001b[1;33m \u001b[0mexpr\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mexpr\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfunc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mrecurse\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mw\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mw\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mexpr\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m]\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 119\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 120\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mexpr\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mis_Pow\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\simplify\\powsimp.py\u001b[0m in \u001b[0;36mrecurse\u001b[1;34m(arg, **kwargs)\u001b[0m\n\u001b[0;32m 107\u001b[0m \u001b[0m_force\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'force'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mforce\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 108\u001b[0m \u001b[0m_measure\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'measure'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmeasure\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 109\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mpowsimp\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0marg\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0m_deep\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0m_combine\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0m_force\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0m_measure\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 110\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 111\u001b[0m \u001b[0mexpr\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msympify\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mexpr\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\simplify\\powsimp.py\u001b[0m in \u001b[0;36mpowsimp\u001b[1;34m(expr, deep, combine, force, measure)\u001b[0m\n\u001b[0;32m 119\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 120\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mexpr\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mis_Pow\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 121\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mrecurse\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mexpr\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0m_y\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdeep\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mFalse\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m/\u001b[0m\u001b[0m_y\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 122\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 123\u001b[0m \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mexpr\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mis_Mul\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\simplify\\powsimp.py\u001b[0m in \u001b[0;36mrecurse\u001b[1;34m(arg, **kwargs)\u001b[0m\n\u001b[0;32m 107\u001b[0m \u001b[0m_force\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'force'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mforce\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 108\u001b[0m \u001b[0m_measure\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mget\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'measure'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmeasure\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 109\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0mpowsimp\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0marg\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0m_deep\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0m_combine\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0m_force\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0m_measure\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 110\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 111\u001b[0m \u001b[0mexpr\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msympify\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mexpr\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\simplify\\powsimp.py\u001b[0m in \u001b[0;36mpowsimp\u001b[1;34m(expr, deep, combine, force, measure)\u001b[0m\n\u001b[0;32m 160\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 161\u001b[0m \u001b[1;31m# add up exponents of common bases\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 162\u001b[1;33m \u001b[1;32mfor\u001b[0m \u001b[0mb\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0me\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mordered\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0miter\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mc_powers\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\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 163\u001b[0m \u001b[1;31m# allow 2**x/4 -> 2**(x - 2); don't do this when b and e are\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 164\u001b[0m \u001b[1;31m# Numbers since autoevaluation will undo it, e.g.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\core\\compatibility.py\u001b[0m in \u001b[0;36mordered\u001b[1;34m(seq, keys, default, warn)\u001b[0m\n\u001b[0;32m 674\u001b[0m raise ValueError(\n\u001b[0;32m 675\u001b[0m 'not enough keys to break ties: %s' % u)\n\u001b[1;32m--> 676\u001b[1;33m \u001b[1;32myield\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0md\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mk\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 677\u001b[0m \u001b[0md\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpop\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mk\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 678\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\core\\compatibility.py\u001b[0m in \u001b[0;36mordered\u001b[1;34m(seq, keys, default, warn)\u001b[0m\n\u001b[0;32m 655\u001b[0m \u001b[0mf\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mkeys\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpop\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 656\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mseq\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 657\u001b[1;33m \u001b[0md\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mf\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0ma\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0ma\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 658\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 659\u001b[0m \u001b[1;32mif\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[0mdefault\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\core\\compatibility.py\u001b[0m in \u001b[0;36m_nodes\u001b[1;34m(e)\u001b[0m\n\u001b[0;32m 561\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0me\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcount\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mBasic\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 562\u001b[0m \u001b[1;32melif\u001b[0m \u001b[0miterable\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0me\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 563\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[1;36m1\u001b[0m \u001b[1;33m+\u001b[0m \u001b[0msum\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0m_nodes\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mei\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mei\u001b[0m \u001b[1;32min\u001b[0m \u001b[0me\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 564\u001b[0m \u001b[1;32melif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0me\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdict\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 565\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[1;36m1\u001b[0m \u001b[1;33m+\u001b[0m \u001b[0msum\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0m_nodes\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mk\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m+\u001b[0m \u001b[0m_nodes\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mv\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mk\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mv\u001b[0m \u001b[1;32min\u001b[0m \u001b[0me\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\core\\compatibility.py\u001b[0m in \u001b[0;36m\u001b[1;34m(.0)\u001b[0m\n\u001b[0;32m 561\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0me\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcount\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mBasic\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 562\u001b[0m \u001b[1;32melif\u001b[0m \u001b[0miterable\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0me\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 563\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[1;36m1\u001b[0m \u001b[1;33m+\u001b[0m \u001b[0msum\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0m_nodes\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mei\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mei\u001b[0m \u001b[1;32min\u001b[0m \u001b[0me\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 564\u001b[0m \u001b[1;32melif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0me\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdict\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 565\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[1;36m1\u001b[0m \u001b[1;33m+\u001b[0m \u001b[0msum\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0m_nodes\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mk\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m+\u001b[0m \u001b[0m_nodes\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mv\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mk\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mv\u001b[0m \u001b[1;32min\u001b[0m \u001b[0me\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m~\\anaconda3\\lib\\site-packages\\sympy\\core\\compatibility.py\u001b[0m in \u001b[0;36m_nodes\u001b[1;34m(e)\u001b[0m\n\u001b[0;32m 546\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 547\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 548\u001b[1;33m \u001b[1;32mdef\u001b[0m \u001b[0m_nodes\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0me\u001b[0m\u001b[1;33m)\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 549\u001b[0m \"\"\"\n\u001b[0;32m 550\u001b[0m \u001b[0mA\u001b[0m \u001b[0mhelper\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0mordered\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m \u001b[0mwhich\u001b[0m \u001b[0mreturns\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mnode\u001b[0m \u001b[0mcount\u001b[0m \u001b[0mof\u001b[0m\u001b[0;31m \u001b[0m\u001b[0;31m`\u001b[0m\u001b[0;31m`\u001b[0m\u001b[0me\u001b[0m\u001b[0;31m`\u001b[0m\u001b[0;31m`\u001b[0m \u001b[0mwhich\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;31mKeyboardInterrupt\u001b[0m: " ] } ], "source": [ "smp.limit(yeet[1][0].subs(C, beta/L1).simplify(), beta, smp.oo)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Switch to Numerical" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Define the equations\n", "\n", "* $\\frac{d^2 \\theta}{dt^2} = \\frac{d \\zeta}{dt} = \\text{solution to above}$\n", "* $\\frac{d \\theta}{dt} = \\zeta$\n", "\n", "for each of $\\theta \\in (\\theta_1, \\theta_2)$" ] }, { "cell_type": "code", "execution_count": 74, "metadata": {}, "outputs": [], "source": [ "dz1dt_f = smp.lambdify((t, m, g, w, L1, L2, the1, the2, the1_d, the2_d), sols[the1_dd])\n", "dthe1dt_f = smp.lambdify(the1_d, the1_d)\n", "\n", "dz2dt_f = smp.lambdify((t, m, g, w, L1, L2, the1, the2, the1_d, the2_d), sols[the2_dd])\n", "dthe2dt_f = smp.lambdify(the2_d, the2_d)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Define the ODE system for python $ S = (\\theta_1, \\zeta_1, \\theta_2, \\zeta_2)$" ] }, { "cell_type": "code", "execution_count": 77, "metadata": {}, "outputs": [], "source": [ "def dSdt(S, t):\n", " the1, z1, the2, z2 = S\n", " return [\n", " dthe1dt_f(z1),\n", " dz1dt_f(t, m, g, w, L1, L2, the1, the2, z1, z2),\n", " dthe2dt_f(z2),\n", " dz2dt_f(t, m, g, w, L1, L2, the1, the2, z1, z2),\n", " ]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Some numerical values to get a solution" ] }, { "cell_type": "code", "execution_count": 78, "metadata": {}, "outputs": [], "source": [ "t = np.linspace(0, 20, 1000)\n", "g = 9.81\n", "m=1\n", "L1 = 20\n", "L2 = 20\n", "w = np.sqrt(g/L1)\n", "ans = odeint(dSdt, y0=[0, 0, 0, 0], t=t)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot $\\theta_1(t)$" ] }, { "cell_type": "code", "execution_count": 79, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 79, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(ans.T[0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Function that computes the average kinetic energy (assuming $m=1$) of the system given by\n", "\n", "$$E(\\omega) = \\text{Mean}(v_{x1}^2 + v_{y1}^2 + v_{x2}^2 + v_{y2}^2) $$\n", "\n", "where the $v$'s are computed by solving the ODE for a number of time points for a specific value of $\\omega$" ] }, { "cell_type": "code", "execution_count": 80, "metadata": {}, "outputs": [], "source": [ "def get_energy(w):\n", " t = np.linspace(0, 100, 2000)\n", " ans = odeint(dSdt, y0=[0.1, 0.1, 0, 0], t=t)\n", " vx1 = vx1_f(t,w,L1,L2,ans.T[0],ans.T[2],ans.T[1],ans.T[3])\n", " vx2 = vx2_f(t,w,L1,L2,ans.T[0],ans.T[2],ans.T[1],ans.T[3])\n", " vy1 = vy1_f(t,w,L1,L2,ans.T[0],ans.T[2],ans.T[1],ans.T[3])\n", " vy2 = vy2_f(t,w,L1,L2,ans.T[0],ans.T[2],ans.T[1],ans.T[3])\n", " E = 1/2 * np.mean(vx1**2+vx2**2+vy1**2+vy2**2)\n", " return E" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Get $\\omega$'s and $E(\\omega)$" ] }, { "cell_type": "code", "execution_count": 81, "metadata": {}, "outputs": [], "source": [ "ws = np.linspace(0.4, 1.3, 100)\n", "Es = np.vectorize(get_energy)(ws) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot the kinetic energy of the system for different values of $\\omega$" ] }, { "cell_type": "code", "execution_count": 83, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(ws, Es)\n", "plt.axvline(1.84775*np.sqrt(g/L1), c='k', ls='--')\n", "plt.axvline(0.76536*np.sqrt(g/L1), c='k', ls='--')\n", "# Tautochrone\n", "#plt.axvline(np.sqrt(np.pi*g**(-1/2)), c='k', ls='--')\n", "plt.grid()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Solve the ODE for a particular value of $\\omega$ so we can ge the solution. Also define a function that takes in $\\theta_1(t), \\theta_2(t)$ and returns the corresponding $x$ and $y$ values of the origin, first bob, and second bob." ] }, { "cell_type": "code", "execution_count": 89, "metadata": {}, "outputs": [], "source": [ "t = np.linspace(0, 200, 20000)\n", "g = 9.81\n", "m=1\n", "L1 = 20\n", "L2 = 20\n", "w = ws[ws>1][np.argmax(Es[ws>1])]\n", "ans = odeint(dSdt, y0=[0.1, 0.1, 0, 0], t=t)\n", "\n", "def get_x0y0x1y1x2y2(t, the1, the2, L1, L2):\n", " return (np.cos(w*t),\n", " 0*t,\n", " np.cos(w*t) + L1*np.sin(the1),\n", " -L1*np.cos(the1),\n", " np.cos(w*t) + L1*np.sin(the1) + L2*np.sin(the2),\n", " -L1*np.cos(the1) - L2*np.cos(the2),\n", " )\n", "\n", "x0, y0, x1, y1, x2, y2 = get_x0y0x1y1x2y2(t, ans.T[0], ans.T[2], L1, L2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Make an animation" ] }, { "cell_type": "code", "execution_count": 90, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def animate(i):\n", " ln1.set_data([x0[::10][i], x1[::10][i], x2[::10][i]], [y0[::10][i], y1[::10][i], y2[::10][i]])\n", " trail1 = 50 # length of motion trail of weight 1 \n", " trail2 = 50 # length of motion trail of weight 2\n", " ln2.set_data(x1[::10][i:max(1,i-trail1):-1], y1[::10][i:max(1,i-trail1):-1]) # marker + line of first weight\n", " ln3.set_data(x2[::10][i:max(1,i-trail2):-1], y2[::10][i:max(1,i-trail2):-1]) # marker + line of the second weight\n", " \n", "fig, ax = plt.subplots(1,1, figsize=(8,8))\n", "ax.set_facecolor('k')\n", "ax.get_xaxis().set_ticks([]) # enable this to hide x axis ticks\n", "ax.get_yaxis().set_ticks([]) # enable this to hide y axis ticks\n", "ln1, = plt.plot([], [], 'ro--', lw=3, markersize=8)\n", "ln2, = ax.plot([], [], 'ro-',markersize = 8, alpha=0.05, color='cyan') # line for Earth\n", "ln3, = ax.plot([], [], 'ro-',markersize = 8,alpha=0.05, color='cyan')\n", "ax.set_ylim(-44,44)\n", "ax.set_xlim(-44,44)\n", "ani = animation.FuncAnimation(fig, animate, frames=2000, interval=50)\n", "ani.save('pen.gif',writer='pillow',fps=50)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10" } }, "nbformat": 4, "nbformat_minor": 4 }