K i|dZddlmZmZmZmZddlmZmZddl m Z m Z m Z ddl mZmZmZddlmZmZmZddlmZe gZeeegZegZdZd Zd Zd Zd Zdd ZdZ dZ!ddZ"y)z SymPy interface to Unification engine See sympy.unify for module level docstring See sympy.unify.core for algorithmic docstring )BasicAddMulPow)AssocOp LatticeOp)MatAddMatMul MatrixExpr)Union Intersection FiniteSet)CompoundVariable CondVariable)corecltttttt f}t fd|DS)Nc36K|]}t|ywN issubclass).0aopops X/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sympy/unify/usympy.py z$sympy_associative..s8sz"c"8)rr r r r rany)r assoc_opss` rsympy_associativer s&&&%yII 8i8 88cbtttttf}t fd|DS)Nc36K|]}t|ywrr)rcoprs rrz$sympy_commutative..s7sz"c"7r)rr r r rr)rcomm_opss` rsympy_commutativer&s$VUL)'8'>>r!ct|tsyt|jryt |jt rt d|jDSy)NFTc3FK|]}t|jywr) constructis_commutative)rargs rrz!is_commutative.."sCS9S>00Cs!)r(rr&rrrallargsr)s rr/r/sF a "!$$CAFFCCCr!cfd}|S)Ncpt|xs(t|txrt|jSr)r(rrr)r*typs r matchtypezmk_matchtype..matchtype%s31c"B1h'AJqttS,A Cr!)r5r6s` r mk_matchtyper8$sC r!c|vr t|St|ttfr|St|tr |jr|St |j tfd|jDS)z% Turn a SymPy object into a Compound c36K|]}t|ywr deconstruct)rr0 variabless rrzdeconstruct..3sH#+c95Hr) rr(rris_Atomr __class__tupler2)sr=s `rr<r<*sdI~{!h -. a 199 AKKHHH JJr!ctttfr jSttsSt fdt Dr*jttjddiSt fdtDr8tjjgttjSjttjS)z% Turn a Compound into a SymPy object c3JK|]}tj|ywrrrrclsts rrzconstruct..;s =S:addC = #evaluateFc3JK|]}tj|ywrrDrEs rrzconstruct..=s >sZc " >rH)r(rrr0rreval_false_legalrmapr.r2basic_new_legalr__new__)rGs`rr.r.5s!h -.uu a " =,< ==qttSAFF+o > >}}QTT;C 166$:;;qttSAFF+,,r!c*tt|S)z[ Rebuild a SymPy expression. This removes harm caused by Expr-Rules interactions. )r.r<)rAs rrebuildrPBs [^ $$r!Nc +vKfd}|xsi}|jDcic]\}}||||}}}tj|||||fttd|}|D]:} | jDcic]\}}t |t |c}}<ycc}}wcc}}ww)af Structural unification of two expressions/patterns. Examples ======== >>> from sympy.unify.usympy import unify >>> from sympy import Basic, S >>> from sympy.abc import x, y, z, p, q >>> next(unify(Basic(S(1), S(2)), Basic(S(1), x), variables=[x])) {x: 2} >>> expr = 2*x + y + z >>> pattern = 2*p + q >>> next(unify(expr, pattern, {}, variables=(p, q))) {p: x, q: y + z} Unification supports commutative and associative matching >>> expr = x + y + z >>> pattern = p + q >>> len(list(unify(expr, pattern, {}, variables=(p, q)))) 12 Symbols not indicated to be variables are treated as literal, else they are wild-like and match anything in a sub-expression. >>> expr = x*y*z + 3 >>> pattern = x*y + 3 >>> next(unify(expr, pattern, {}, variables=[x, y])) {x: y, y: x*z} The x and y of the pattern above were in a Mul and matched factors in the Mul of expr. Here, a single symbol matches an entire term: >>> expr = x*y + 3 >>> pattern = p + 3 >>> next(unify(expr, pattern, {}, variables=[p])) {p: x*y} ct|Srr;)r*r=s rzunify..ss{1i0r!)r+r/N)itemsrunifyr+r/r.) r*yrAr=kwargsdeconskvdsds ` rrUrUIsT1F RA*+'')4$!QF1I 4A4 F1Ivay! /4B4B /(. /BA67ggi@day|Yq\)@@A 5AsB9B-A B9B3$B9)r7)Nr7)#__doc__ sympy.corerrrrsympy.core.operationsrrsympy.matricesr r r sympy.sets.setsr r rsympy.unify.corerrr sympy.unifyrrMrKillegalr r&r+r/r8r<r.rPrUr7r!rresu3 ,+455::==,S), +98?D J -%3Ar!