Skip to content

Instantly share code, notes, and snippets.

@ritog
Created August 24, 2022 13:12
Show Gist options
  • Save ritog/09d4bd1c4bf8014c4de48e25ce0f0f89 to your computer and use it in GitHub Desktop.
Save ritog/09d4bd1c4bf8014c4de48e25ce0f0f89 to your computer and use it in GitHub Desktop.
polynomial factoring with SymPy (a python package)
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"id": "e3aebf06",
"metadata": {},
"source": [
"# Factorizing Polynomial with Sympy\n",
"*~ example by [Rito Ghosh](https://www.linkedin.com/in/ritobrata-ghosh/)*"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "48541d8a",
"metadata": {},
"outputs": [],
"source": [
"# importing required functions from package\n",
"from sympy import symbols, factor"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "c67c56a2",
"metadata": {},
"outputs": [],
"source": [
"# declaring symbols\n",
"a, b, c = symbols('a b c')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "2318e26f",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'(a^2*c^9+14*a^2*c^8-2*a^2*c^7-528 *a^2*c^6-639*a ^2*c^5+3706*a^2*c^4+9608*a^2*c^3+8144*a^2*c^2+2640*a^2*c+288*a^2)/(2*(c^2+4*c+3)^2*(2*c^3+12*c^2-21*c-10)^2)'"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# the expression of polynomial to fatorize\n",
"expr = '(a^2*c^9+14*a^2*c^8-2*a^2*c^7-528 *a^2*c^6-639*a ^2*c^5+3706*a^2*c^4+9608*a^2*c^3+8144*a^2*c^2+2640*a^2*c+288*a^2)/(2*(c^2+4*c+3)^2*(2*c^3+12*c^2-21*c-10)^2)'\n",
"expr"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "5df5f38f",
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$\\displaystyle \\frac{a^{2} \\left(c + 2\\right) \\left(c^{4} + 6 c^{3} - 31 c^{2} - 52 c - 12\\right)^{2}}{2 \\left(c + 1\\right)^{2} \\left(c + 3\\right)^{2} \\left(2 c^{3} + 12 c^{2} - 21 c - 10\\right)^{2}}$"
],
"text/plain": [
"a**2*(c + 2)*(c**4 + 6*c**3 - 31*c**2 - 52*c - 12)**2/(2*(c + 1)**2*(c + 3)**2*(2*c**3 + 12*c**2 - 21*c - 10)**2)"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# calling the `factor` function\n",
"factor(expr)"
]
},
{
"cell_type": "markdown",
"id": "85aea0ce",
"metadata": {},
"source": [
"### Requirements (including Jupyter)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "7eb60d9e",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"name: sptest\n",
"channels:\n",
" - defaults\n",
"dependencies:\n",
" - _libgcc_mutex=0.1=main\n",
" - _openmp_mutex=5.1=1_gnu\n",
" - anyio=3.5.0=py310h06a4308_0\n",
" - argon2-cffi=21.3.0=pyhd3eb1b0_0\n",
" - argon2-cffi-bindings=21.2.0=py310h7f8727e_0\n",
" - asttokens=2.0.5=pyhd3eb1b0_0\n",
" - attrs=21.4.0=pyhd3eb1b0_0\n",
" - babel=2.9.1=pyhd3eb1b0_0\n",
" - backcall=0.2.0=pyhd3eb1b0_0\n",
" - beautifulsoup4=4.11.1=py310h06a4308_0\n",
" - bleach=4.1.0=pyhd3eb1b0_0\n",
" - brotlipy=0.7.0=py310h7f8727e_1002\n",
" - bzip2=1.0.8=h7b6447c_0\n",
" - ca-certificates=2022.07.19=h06a4308_0\n",
" - certifi=2022.6.15=py310h06a4308_0\n",
" - cffi=1.15.1=py310h74dc2b5_0\n",
" - charset-normalizer=2.0.4=pyhd3eb1b0_0\n",
" - cryptography=37.0.1=py310h9ce1e76_0\n",
" - dbus=1.13.18=hb2f20db_0\n",
" - debugpy=1.5.1=py310h295c915_0\n",
" - decorator=5.1.1=pyhd3eb1b0_0\n",
" - defusedxml=0.7.1=pyhd3eb1b0_0\n",
" - entrypoints=0.4=py310h06a4308_0\n",
" - executing=0.8.3=pyhd3eb1b0_0\n",
" - expat=2.4.4=h295c915_0\n",
" - fontconfig=2.13.1=h6c09931_0\n",
" - freetype=2.11.0=h70c0345_0\n",
" - giflib=5.2.1=h7b6447c_0\n",
" - glib=2.69.1=h4ff587b_1\n",
" - gmp=6.2.1=h295c915_3\n",
" - gmpy2=2.1.2=py310heeb90bb_0\n",
" - gst-plugins-base=1.14.0=h8213a91_2\n",
" - gstreamer=1.14.0=h28cd5cc_2\n",
" - icu=58.2=he6710b0_3\n",
" - idna=3.3=pyhd3eb1b0_0\n",
" - ipykernel=6.9.1=py310h06a4308_0\n",
" - ipython=8.4.0=py310h06a4308_0\n",
" - ipython_genutils=0.2.0=pyhd3eb1b0_1\n",
" - ipywidgets=7.6.5=pyhd3eb1b0_1\n",
" - jedi=0.18.1=py310h06a4308_1\n",
" - jinja2=3.0.3=pyhd3eb1b0_0\n",
" - jpeg=9e=h7f8727e_0\n",
" - json5=0.9.6=pyhd3eb1b0_0\n",
" - jsonschema=4.4.0=py310h06a4308_0\n",
" - jupyter=1.0.0=py310h06a4308_8\n",
" - jupyter_client=7.2.2=py310h06a4308_0\n",
" - jupyter_console=6.4.3=pyhd3eb1b0_0\n",
" - jupyter_core=4.10.0=py310h06a4308_0\n",
" - jupyter_server=1.18.1=py310h06a4308_0\n",
" - jupyterlab=3.4.4=py310h06a4308_0\n",
" - jupyterlab_pygments=0.1.2=py_0\n",
" - jupyterlab_server=2.12.0=py310h06a4308_0\n",
" - jupyterlab_widgets=1.0.0=pyhd3eb1b0_1\n",
" - krb5=1.19.2=hac12032_0\n",
" - ld_impl_linux-64=2.38=h1181459_1\n",
" - lerc=3.0=h295c915_0\n",
" - libclang=10.0.1=default_hb85057a_2\n",
" - libdeflate=1.8=h7f8727e_5\n",
" - libedit=3.1.20210910=h7f8727e_0\n",
" - libevent=2.1.12=h8f2d780_0\n",
" - libffi=3.3=he6710b0_2\n",
" - libgcc-ng=11.2.0=h1234567_1\n",
" - libgomp=11.2.0=h1234567_1\n",
" - libllvm10=10.0.1=hbcb73fb_5\n",
" - libpng=1.6.37=hbc83047_0\n",
" - libpq=12.9=h16c4e8d_3\n",
" - libsodium=1.0.18=h7b6447c_0\n",
" - libstdcxx-ng=11.2.0=h1234567_1\n",
" - libtiff=4.4.0=hecacb30_0\n",
" - libuuid=1.0.3=h7f8727e_2\n",
" - libwebp=1.2.2=h55f646e_0\n",
" - libwebp-base=1.2.2=h7f8727e_0\n",
" - libxcb=1.15=h7f8727e_0\n",
" - libxkbcommon=1.0.1=hfa300c1_0\n",
" - libxml2=2.9.14=h74e7548_0\n",
" - libxslt=1.1.35=h4e12654_0\n",
" - lz4-c=1.9.3=h295c915_1\n",
" - markupsafe=2.1.1=py310h7f8727e_0\n",
" - matplotlib-inline=0.1.2=pyhd3eb1b0_2\n",
" - mistune=0.8.4=py310h7f8727e_1000\n",
" - mpc=1.1.0=h10f8cd9_1\n",
" - mpfr=4.0.2=hb69a4c5_1\n",
" - nbclassic=0.3.5=pyhd3eb1b0_0\n",
" - nbclient=0.5.13=py310h06a4308_0\n",
" - nbconvert=6.4.4=py310h06a4308_0\n",
" - nbformat=5.3.0=py310h06a4308_0\n",
" - ncurses=6.3=h5eee18b_3\n",
" - nest-asyncio=1.5.5=py310h06a4308_0\n",
" - notebook=6.4.12=py310h06a4308_0\n",
" - nspr=4.33=h295c915_0\n",
" - nss=3.74=h0370c37_0\n",
" - openssl=1.1.1q=h7f8727e_0\n",
" - packaging=21.3=pyhd3eb1b0_0\n",
" - pandocfilters=1.5.0=pyhd3eb1b0_0\n",
" - parso=0.8.3=pyhd3eb1b0_0\n",
" - pcre=8.45=h295c915_0\n",
" - pexpect=4.8.0=pyhd3eb1b0_3\n",
" - pickleshare=0.7.5=pyhd3eb1b0_1003\n",
" - pip=22.1.2=py310h06a4308_0\n",
" - ply=3.11=py310h06a4308_0\n",
" - prometheus_client=0.14.1=py310h06a4308_0\n",
" - prompt-toolkit=3.0.20=pyhd3eb1b0_0\n",
" - prompt_toolkit=3.0.20=hd3eb1b0_0\n",
" - ptyprocess=0.7.0=pyhd3eb1b0_2\n",
" - pure_eval=0.2.2=pyhd3eb1b0_0\n",
" - pycparser=2.21=pyhd3eb1b0_0\n",
" - pygments=2.11.2=pyhd3eb1b0_0\n",
" - pyopenssl=22.0.0=pyhd3eb1b0_0\n",
" - pyparsing=3.0.4=pyhd3eb1b0_0\n",
" - pyqt=5.15.7=py310h6a678d5_1\n",
" - pyrsistent=0.18.0=py310h7f8727e_0\n",
" - pysocks=1.7.1=py310h06a4308_0\n",
" - python=3.10.4=h12debd9_0\n",
" - python-dateutil=2.8.2=pyhd3eb1b0_0\n",
" - python-fastjsonschema=2.15.1=pyhd3eb1b0_0\n",
" - pytz=2022.1=py310h06a4308_0\n",
" - pyzmq=23.2.0=py310h6a678d5_0\n",
" - qt-main=5.15.2=h327a75a_7\n",
" - qt-webengine=5.15.9=hd2b0992_4\n",
" - qtconsole=5.3.1=py310h06a4308_1\n",
" - qtpy=2.0.1=pyhd3eb1b0_0\n",
" - qtwebkit=5.212=h4eab89a_4\n",
" - readline=8.1.2=h7f8727e_1\n",
" - requests=2.28.1=py310h06a4308_0\n",
" - send2trash=1.8.0=pyhd3eb1b0_1\n",
" - setuptools=63.4.1=py310h06a4308_0\n",
" - sip=6.6.2=py310h6a678d5_0\n",
" - six=1.16.0=pyhd3eb1b0_1\n",
" - sniffio=1.2.0=py310h06a4308_1\n",
" - soupsieve=2.3.1=pyhd3eb1b0_0\n",
" - sqlite=3.39.2=h5082296_0\n",
" - stack_data=0.2.0=pyhd3eb1b0_0\n",
" - sympy=1.10.1=py310h06a4308_0\n",
" - terminado=0.13.1=py310h06a4308_0\n",
" - testpath=0.6.0=py310h06a4308_0\n",
" - tk=8.6.12=h1ccaba5_0\n",
" - toml=0.10.2=pyhd3eb1b0_0\n",
" - tornado=6.1=py310h7f8727e_0\n",
" - traitlets=5.1.1=pyhd3eb1b0_0\n",
" - typing-extensions=4.3.0=py310h06a4308_0\n",
" - typing_extensions=4.3.0=py310h06a4308_0\n",
" - tzdata=2022a=hda174b7_0\n",
" - urllib3=1.26.11=py310h06a4308_0\n",
" - wcwidth=0.2.5=pyhd3eb1b0_0\n",
" - webencodings=0.5.1=py310h06a4308_1\n",
" - websocket-client=0.58.0=py310h06a4308_4\n",
" - wheel=0.37.1=pyhd3eb1b0_0\n",
" - widgetsnbextension=3.5.2=py310h06a4308_0\n",
" - xz=5.2.5=h7f8727e_1\n",
" - zeromq=4.3.4=h2531618_0\n",
" - zlib=1.2.12=h7f8727e_2\n",
" - zstd=1.5.2=ha4553b6_0\n",
" - pip:\n",
" - mpmath==1.2.1\n",
" - pyqt5-sip==12.11.0\n"
]
}
],
"source": [
"%%bash\n",
"\n",
"conda env export -n sptest > environment.yml\n",
"head -n -1 environment.yml"
]
}
],
"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.10.4"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment