K ilddlmZmZmZmZddlmZddlmZddl m Z m Z ddl m Z ddlmZmZdZdZy ) )FunctionPowsympifyExpr) Relational)S)Poly decompose) func_name)MinMaxc t|}t|trt|trt dt |z|j vr|gSt|ttfrm|jr*|jtjk(r |j}n|jd}|k(r|gS|j|gt!|zSt|t"t$frt'|j}d}t)|D]T\}}|j+st!|}t-|dk(rg|z}||dd}n |dd|k7rg}n |d||<Vdk(r|gS|j.|g|zSt1|}t't3fd|j4} t-| dk(r2| dk7r*|j| d} | d} | gt!| zS t7|S#t8$r|gcYSwxYw)a9 Computes General functional decomposition of ``f``. Given an expression ``f``, returns a list ``[f_1, f_2, ..., f_n]``, where:: f = f_1 o f_2 o ... f_n = f_1(f_2(... f_n)) Note: This is a General decomposition function. It also decomposes Polynomials. For only Polynomial decomposition see ``decompose`` in polys. Examples ======== >>> from sympy.abc import x >>> from sympy import decompogen, sqrt, sin, cos >>> decompogen(sin(cos(x)), x) [sin(x), cos(x)] >>> decompogen(sin(x)**2 + sin(x) + 1, x) [x**2 + x + 1, sin(x)] >>> decompogen(sqrt(6*x**2 - 5), x) [sqrt(x), 6*x**2 - 5] >>> decompogen(sin(sqrt(cos(x**2 + 1))), x) [sin(x), sqrt(x), cos(x), x**2 + 1] >>> decompogen(x**4 + 2*x**3 - x - 1, x) [x**2 - x - 1, x**2 + x] zexpecting Expr but got: `%s`rNc |jvS)N) free_symbols)xsymbols ^/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sympy/solvers/decompogen.pyzdecompogen..Ms1>>!9)r isinstancerr TypeErrorr rrris_PowbaserExp1expargssubs decompogenr r list enumeratehas_freelenfuncr filtergensr ValueError) frargrd0iadfpr&f1f2s ` rrr s 6  A a *Q ";61EFF Q^^#s !h_% 88!&&(%%C&&)C &=3JsF#$z#v'>>>!c3Z AFF| dO DAq::f%1f%A1v{HqLzqrU12"HdDG  Q46>3J ## aB 9277C DD 4yA~$q'V+ VVDGV $ !WtjV,,,| s s3 G>> H  H ct|dk(r|dS|dj||d}t|dk(r|St|g|ddz|S)a0 Returns the composition of functions. Given a list of functions ``g_s``, returns their composition ``f``, where: f = g_1 o g_2 o .. o g_n Note: This is a General composition function. It also composes Polynomials. For only Polynomial composition see ``compose`` in polys. Examples ======== >>> from sympy.solvers.decompogen import compogen >>> from sympy.abc import x >>> from sympy import sqrt, sin, cos >>> compogen([sin(x), cos(x)], x) sin(cos(x)) >>> compogen([x**2 + x + 1, sin(x)], x) sin(x)**2 + sin(x) + 1 >>> compogen([sqrt(x), 6*x**2 - 5], x) sqrt(6*x**2 - 5) >>> compogen([sin(x), sqrt(x), cos(x), x**2 + 1], x) sin(sqrt(cos(x**2 + 1))) >>> compogen([x**2 - x - 1, x**2 + x], x) -x**2 - x + (x**2 + x)**2 - 1 rrN)r#rcompogen)g_srfoos rr3r3[sY6 3x1}1v a&++fc!f %C 3x1} SECGOV ,,rN) sympy.corerrrrsympy.core.relationalrsympy.core.singletonr sympy.polysr r sympy.utilities.miscr (sympy.functions.elementary.miscellaneousr r rr3rrr=s&55,"'*=Od#-r