K i.UdZddlmZdgZddlmZddlmZddlm Z ddl m Z m Z m Z ddlmZmZmZdd lmZmZdd lZdd lZGd d ZGd deZGddeZGddeZeGddeZGddeeZGddeeZ GddeeZ!GddeeZ"GddeeZ#Gdd eeZ$Gd!d"eeZ%Gd#d$eeZ&Gd%d&eeZ'Gd'd(eeZ(Gd)d*eeZ)Gd+d,eeZ*Gd-d.eeZ+Gd/d0eeZ,Gd1d2eeZ-Gd3d4eeeZ.Gd5d6eeeZ/Gd7d8eeeZ0Gd9d:eeeZ1Gd;deeeZ3Gd?d@eeZ4GdAdBeeeZ5GdCdDeeZ6GdEdFeeZ7dJdGZ8dHZ9dIZ:ejwy )Kz>Options manager for :class:`~.Poly` and public API functions. ) annotationsOptions)Basic)Expr)sympify)GeneratorsError OptionError FlagError)numbered_symbolstopological_sortpublic)has_dups is_sequenceNceZdZUdZdZded<dZgZded<gZded<gZ ded <gZ ded <e d Z e d Z e d Zy)Optionz%Base class for all kinds of options. Nz str | NoneoptionF list[str]requiresexcludesafterbeforecyNclss ]/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sympy/polys/polyoptions.pydefaultzOption.defaultcyrr)rrs r preprocesszOption.preprocess#rr cyrrroptionss r postprocesszOption.postprocess's r )__name__ __module__ __qualname____doc__r__annotations__is_Flagrrrr classmethodrr"r&rr rrrsv/FJGHiHiE9FI  r rceZdZdZdZy)Flagz#Base class for all kinds of flags. TN)r'r(r)r*r,rr rr/r/,s -Gr r/c eZdZdZedZy) BooleanOptionzAAn option that must have a boolean value or equivalent assigned. cV|dvr t|Std|jd|)N)TF'z*' must have a boolean value assigned, got )boolr r)rvalues rr"zBooleanOption.preprocess5s, M !; SVS]S]_def fr N)r'r(r)r*r-r"rr rr1r12sKggr r1ceZdZdZdZy) OptionTypez7Base type for all options that does registers options. ctfd}ttj|tjj<y)Ncb |jS#t$rjcYSwxYwr)rKeyErrorr)selfrs rgetterz#OptionType.__init__..getterAs2 %CJJ'' %{{}$ %s ..)propertysetattrrr __options__)rargskwargsr<s` r__init__zOptionType.__init__@s;  %  % V,*-CJJ'r N)r'r(r)r*rBrr rr7r7=s A .r r7ceZdZUdZdZiZded<ded<ded<dd Zed Z ifd Z fd Z e d Z e dZe dZxZS)raB Options manager for polynomial manipulation module. Examples ======== >>> from sympy.polys.polyoptions import Options >>> from sympy.polys.polyoptions import build_options >>> from sympy.abc import x, y, z >>> Options((x, y, z), {'domain': 'ZZ'}) {'auto': False, 'domain': ZZ, 'gens': (x, y, z)} >>> build_options((x, y, z), {'domain': 'ZZ'}) {'auto': False, 'domain': ZZ, 'gens': (x, y, z)} **Options** * Expand --- boolean option * Gens --- option * Wrt --- option * Sort --- option * Order --- option * Field --- boolean option * Greedy --- boolean option * Domain --- option * Split --- boolean option * Gaussian --- boolean option * Extension --- option * Modulus --- option * Symmetric --- boolean option * Strict --- boolean option **Flags** * Auto --- boolean flag * Frac --- boolean flag * Formal --- boolean flag * Polys --- boolean flag * Include --- boolean flag * All --- boolean flag * Gen --- flag * Series --- boolean flag Nzdict[str, type[Option]]r?ztuple[Expr, ...]genszsympy.polys.domains.Domaindomainc tj|r|jddr td|rt|}||d<|j di}fd}||t|D]A}|vr||= j D]$}j |} || jvs!||=AC||j D]y}j |} | jD]%} j| td|d| d| jD]%} j| td|d| d{jD] }j |j"y) NrDrz1both '*gens' and keyword argument 'gens' supplieddefaultsc|jD]R\}} j|}t |t r|vrrtd|z|?|j ||<Ty#t$rtd|zwxYw)N'%s' is not a valid option('%s' flag is not allowed in this context)itemsr?r:r issubclassr/r")r@rr5rflagsr;stricts rpreprocess_optionsz,Options.__init__..preprocess_optionss!% 9 M**62Cc4(}e(;!"-.X[a.a"bb$#&>>%#8DL 9 M%&BV&KLLMs A((Br3z(' option is only allowed together with 'z'' option is not allowed together with ') dictrBgetr popkeysr?rr __order__r&) r;rDr@rMrNrGrOkeyrrrequire_optionexclude_options ` `` rrBzOptions.__init__s d DHHVR(CE E :DDL88J+ 9 4 > Cd{SM"iikF**62Ccll*$SM   8$iik rF""6*C"%,, s88N+3%Z`bp&qrr s#&,, r88N+7%Y_ao&pqq r rnn 7F   V $ 0 0 6 7r c|jgt}}|jjD]^\}|j |j fd|j D|j fd|jD` t|t|f|_yy#t$r tdwxYw)z*Resolve the order of options' processing. Nc3&K|]}|f ywrr.0_namenames r z3Options._init_dependencies_order..sEueT]Ec3&K|]}|f ywrrrZs rr^z3Options._init_dependencies_order..sFudE]Fr_z/cycle detected in sympy.polys options framework) rTsetr?rKappendupdaterrr list ValueError RuntimeError)rverticesedgesrr]s @r_init_dependencies_orderz Options._init_dependencies_orders ==  #%eH # 5 5 7 G f% E EE F FF  G G 0(DK1H I  ! G"EGG Gs B33Cctj|j}|jD] \}}|||< |jD] \}}|||< |S)z-Clone ``self`` and update specified options. )rP__new__ __class__rK)r;updatesobjrr5s rclonez Options.clonesall4>>*!ZZ\ MFECK %]]_ MFECK  r cN||jvr|||<yt| ||yr)r?super __setattr__)r;attrr5rls rrrzOptions.__setattr__s) 4## #DJ G e ,r ci}|jD]3\}}| |dk7s|j|}t|tr/|||<5|S)NrD)rKr?rLr/)r;r@rr5rs rr@z Options.argssW!ZZ\ )MFE Vv%5&&v.!#t,#(DL  ) r ci}|jjD]%\}}t|trt ||||<'|Srr?rKrLr/getattr)r;r%rrs rr%zOptions.optionssJ++113 8KFCc4(")$"7 8r ci}|jjD]%\}}t|tst ||||<'|Srrv)r;rMrrs rrMz Options.flagssJ++113 6KFC#t$ 'f 5f  6 r NF)r'r(r)r*rTr?r+rBr-rirorrr=r@r%rM __classcell__)rls@rrrLs-^I+-K(-  &&67pGG$ -   r cBeZdZUdZdZgZded<gZded<edZ y)Expandz8``expand`` option to polynomial manipulation functions. expandrrrcyNTrrs rrzExpand.default rr N) r'r(r)r*rrr+rr-rrr rr|r|s0B FHiHir r|) metaclasscReZdZUdZdZgZded<gZded<edZ edZ y) Gensz6``gens`` option to polynomial manipulation functions. rDrrrcy)Nrrrs rrz Gens.defaultsr c<t|tr|f}n!t|dk(rt|dr|d}|dk(r d}t|St |rt dt |ztd|Drt dt |zt|S)Nrrrzduplicated generators: %sc38K|]}|jduyw)FN)is_commutative)r[gens rr^z"Gens.preprocess..&s=##u,=sznon-commutative generators: %s) isinstancerlenrrrstranytuple)rrDs rr"zGens.preprocesss dE "7D Y!^ DG 47D 7?D T{ d^!"=D "IJ J == =!"BSY"NO OT{r N r'r(r)r*rrr+rr-rr"rr rrrsD@ FHiHi  r rcfeZdZUdZdZgZded<gZded<ejdZ e dZ y) Wrtz5``wrt`` option to polynomial manipulation functions. wrtrrrz \s*,\s*|\s+cbt|tr t|gSt|trT|j}|j dr t d|sgSt |jj|St|drt tt|St d)N,zBad input: missing parameter. __getitem__z!invalid argument for 'wrt' option) rrrstripendswithr rd _re_splitsplithasattrmap)rrs rr"zWrt.preprocess6s c5 !H:  S !))+C||C !"ABB  ++C01 1 S- (C & &AB Br N) r'r(r)r*rrr+rrecompilerr-r"rr rrr,sB? FHiHi >*I C Cr rcReZdZUdZdZgZded<gZded<edZ edZ y) Sortz6``sort`` option to polynomial manipulation functions. sortrrrcgSrrrs rrz Sort.defaultOs r ct|tr-|jdDcgc]}|jc}St |drt t t|Stdcc}w)N>rz"invalid argument for 'sort' option)rrrrrrdrr )rrrs rr"zSort.preprocessSsW dC ,0JJsO=SSYY[= = T= )C' 'BC C >sA.Nrrr rrrGsF@ FHiHiDDr rcReZdZUdZdZgZded<gZded<edZ edZ y) Orderz7``order`` option to polynomial manipulation functions. orderrrrcJtjjjSr)sympypolys orderingslexrs rrz Order.defaultes{{$$(((r cTtjjj|Sr)rrr monomial_key)rrs rr"zOrder.preprocessis{{$$11%88r Nrrr rrr]sDA FHiHi))99r rc,eZdZUdZdZgZded<gdZy)Fieldz7``field`` option to polynomial manipulation functions. fieldrr)rErgaussianNr'r(r)r*rrr+rrr rrrnsA FHi.Hr rc,eZdZUdZdZgZded<gdZy)Greedyz8``greedy`` option to polynomial manipulation functions. greedyrrrErr extensionmodulus symmetricNrrr rrrwsB FHiSHr rc<eZdZUdZdZedZgZded<gdZ y) Compositez;``composite`` option to polynomial manipulation functions. compositecyrrrs rrzComposite.defaultrr rrrN) r'r(r)r*rr-rrr+rrr rrrs-E FHiSHr rc*eZdZUdZdZgZded<gdZdgZe jdZ e jdZ e jd Z e jd Ze jd Ze jd Zed ZedZy)Domainz8``domain`` option to polynomial manipulation functions. rErr)rrrrrrDz^(R|RR)(_(\d+))?$z^(C|CC)(_(\d+))?$z^(FF|GF)\((\d+)\)$z)^(Z|ZZ|Q|QQ|ZZ_I|QQ_I|R|RR|C|CC)\[(.+)\]$z^(Z|ZZ|Q|QQ)\((.+)\)$z^(Q|QQ)\<(.+)\>$c t|tjjjr|St |dr|j St|tr|dvr$tjjjS|dvr$tjjjS|dk(r$tjjjS|dk(r$tjjjS|dk(r$tjjjS|jj|}|l|j\}}}|$tjjj Stjjj#t%|S|j&j|}|l|j\}}}|$tjjj(Stjjj+t%|S|j,j|}|Ctjjj/t%|jdS|j0j|}|q|j\}}t3t5t6|j9d}|dvr0tjjjj:|S|dvr0tjjjj:|S|d vr0tjjj j:|S|dk(r0tjjjj:|S|dk(r0tjjjj:|Stjjj(j:|S|j<j|}||j\}}t3t5t6|j9d}|dvr0tjjjj>|Stjjjj>|S|j@j|}|it3t5t6|jdj9d}tjjjjB|StEd |z) N to_domain)ZZZ)QQQZZ_IQQ_IEXrr)RRRz-expected a valid domain specification, got %s)#rrrdomainsrrrrrrrrr _re_realfieldmatchgroupsr RealFieldint_re_complexfieldCC ComplexField_re_finitefieldFF_re_polynomialrdrrr poly_ring _re_fraction frac_field _re_algebraicalgebraic_fieldr )rrEr_precgroundrDs rr"zDomain.preprocesss fekk1188 9M V[ )##% %  $${{**---${{**---{{**///{{**///~{{**---!!''/A}XXZ 1d< ;;..111 ;;..88TCC$$**62A}XXZ 1d< ;;..111 ;;..;;CIFF##))&1A}{{**--c!((*Q-.@AA""((0A} xxz CC9:[( ;;..11;;TBB{* ;;..11;;TBB{* ;;..11;;TBBv% ;;..33==tDDv% ;;..33==tDD ;;..11;;TBB  &&v.A} xxz CC9:[( ;;..11<you have to provide generators because EX domain was requested) is_Compositerasymbolsrrrrrr$s rr&zDomain.postprocesss W W!49J9W9WWX&../#gfo2FF!AC CG#76?G#(9U[[=P=P=S=S(S!"bc c)T#,;r N)r'r(r)r*rrr+rrrrrrrrrrr-r"r&rr rrrsB FHiDH HEBJJ34M!rzz"67 bjj!67ORZZ LMN2::67LBJJ23MTTTTlddr rc<eZdZUdZdZgZded<gdZedZ y)Splitz7``split`` option to polynomial manipulation functions. rrr)rrrErrrrc"d|vr tdy)Nrz%'split' option is not implemented yet)NotImplementedErrorr$s rr&zSplit.postprocess s g %&MN N r N r'r(r)r*rrr+rr-r&rr rrrs1A FHi HOOr rc<eZdZUdZdZgZded<gdZedZ y)Gaussianz:``gaussian`` option to polynomial manipulation functions. rrr)rrrErrrrcd|vrE|ddur=tjjj|d<tj |yyy)NrTrE)rrrr Extensionr&r$s rr&zGaussian.postprocesssG  WZ%8D%@ % 3 3 8 8GH   ! !' *&A r Nrrr rrrs/D FHi H++r rcLeZdZUdZdZgZded<gdZedZ edZ y) rz;``extension`` option to polynomial manipulation functions. rrr)rrErrrrc|dk(r t|S|dk(r tdt|ds|h}|S|sd}|St|}|S)Nrrz.'False' is an invalid argument for 'extension'__iter__)r4r rra)rrs rr"zExtension.preprocess(sb > ? " !^NO O9j1&K   ! $I !$II r cd|vr?|ddur7tjjjj|d|d<yyy)NrTrE)rrrrrr$s rr&zExtension.postprocess9sL ' !gk&:$&F % 3 3 6 6 F F%!'GH 'G !r N r'r(r)r*rrr+rr-r"r&rr rrrsCE FHiH ''r rcLeZdZUdZdZgZded<gdZedZ edZ y) Modulusz9``modulus`` option to polynomial manipulation functions. rrr)rrrErrclt|}|jr|dkDr t|Std|z)Nrz)'modulus' must a positive integer, got %s)r is_Integerrr )rrs rr"zModulus.preprocessHs<'"   'A+w< ;gEG Gr cd|vrE|d}|jdd}tjjj |||d<yy)NrrTrE)rQrrrr)rr%rrs rr&zModulus.postprocessRsJ  i(G K6I % 3 3 6 6w JGH  r Nrrr rrr@sCC FHiEHGGKKr rc"eZdZdZdZdgZgdZy) Symmetricz;``symmetric`` option to polynomial manipulation functions. rr)rrErrrN)r'r(r)r*rrrrr rrrZsE F{HEHr rc$eZdZdZdZedZy)Strictz8``strict`` option to polynomial manipulation functions. rNcyrrrs rrzStrict.defaulthrr Nr'r(r)r*rr-rrr rrrcsB Fr rc<eZdZdZdZgdZedZedZy)Autoz4``auto`` flag to polynomial manipulation functions. auto)rrErrcyrrrs rrz Auto.defaulttrr c*d|vsd|vr d|vrd|d<yyy)NrErrFrr$s rr&zAuto.postprocessxs*  7g#56;P#GFO F 8E$$r rc$eZdZdZdZedZy)Fracz6``auto`` option to polynomial manipulation functions. fraccyryrrs rrz Frac.defaultr Nrrr rrr~s@ Fr rc$eZdZdZdZedZy)Formalz6``formal`` flag to polynomial manipulation functions. formalcyryrrs rrzFormal.defaultrr Nrrr rrr@ Fr rceZdZdZdZy)Polysz5``polys`` flag to polynomial manipulation functions. rN)r'r(r)r*rrr rr r s ? Fr r c$eZdZdZdZedZy)Includez7``include`` flag to polynomial manipulation functions. includecyryrrs rrzInclude.defaultrr Nrrr rr r sA Fr r c$eZdZdZdZedZy)Allz3``all`` flag to polynomial manipulation functions. allcyryrrs rrz All.defaultrr Nrrr rrrs= Fr rc4eZdZdZdZedZedZy)Genz3``gen`` flag to polynomial manipulation functions. rcy)Nrrrs rrz Gen.defaultsr cHt|ttfr|Std)Nz!invalid argument for 'gen' option)rrrr )rrs rr"zGen.preprocesss! cE3< (JAB Br Nr'r(r)r*rr-rr"rr rrrs2= FCCr rc$eZdZdZdZedZy)Seriesz6``series`` flag to polynomial manipulation functions. seriescyryrrs rrzSeries.defaultrr Nrrr rrrr r rc4eZdZdZdZedZedZy)Symbolsz7``symbols`` flag to polynomial manipulation functions. rctddS)Nsr)start)r rs rrzSymbols.defaults1--r cLt|dr t|Std|z)Nrz2expected an iterator or iterable container, got %s)riterr )rrs rr"zSymbols.preprocesss( 7J '= RU\\] ]r Nrrr rrrs2A F..^^r rc$eZdZdZdZedZy)Methodz6``method`` flag to polynomial manipulation functions. methodc^t|tr|jStd|z)Nzexpected a string, got %s)rrlowerr )rr&s rr"zMethod.preprocesss) fc "<<> !9FBC Cr N)r'r(r)r*rr-r"rr rr%r%s@ FDDr r%cX|d|}}t|dk7sd|vs|r t||S|dS)z9Construct options from keyword arguments or ... options. rropt)rr)rDr@s r build_optionsr+s; |d 4yA~d*dtT""E{r ct|}|jD]2} tj|jr||vrt d|z4y#t $rtd|zwxYw)a Allow specified flags to be used in the given context. Examples ======== >>> from sympy.polys.polyoptions import allowed_flags >>> from sympy.polys.domains import ZZ >>> allowed_flags({'domain': ZZ}, []) >>> allowed_flags({'domain': ZZ, 'frac': True}, []) Traceback (most recent call last): ... FlagError: 'frac' flag is not allowed in this context >>> allowed_flags({'domain': ZZ, 'frac': True}, ['frac']) rJrIN)rarSrr?r,r r:r )r@rMargs r allowed_flagsr.s( JEyy{B B""3'//Cu4D>DFFB  B:S@A A Bs /AA*c .d|vrt|}||d<|S)z$Update options with default values. rG)rP)r%rGs r set_defaultsr0s" w-&  Nr r)r;s#D" +" &JJFF;   46 gFg . .rdrrj ]j 6Z:C&JC6D6ZD,9Fj9"/MZ/T]jT T  TpdVzpdf OMZ O +} + '*'BKf K4F F]j$=$*$"=$*]DJM4: mTZ-C$*C"]DJ^dj^" DTZ DB> "r