
    \h.U                    4   S r SSKJr  S/rSSKJr  SSKJr  SSKJ	r	  SSK
JrJrJr  SSKJrJrJr  SS	KJrJr  SS
KrSS
Kr " S S5      r " S S\5      r " S S\5      r " S S\5      r\ " S S\5      5       r " S S\\S9r " S S\\S9r  " S S\\S9r! " S S\\S9r" " S S\\S9r# " S S \\S9r$ " S! S"\\S9r% " S# S$\\S9r& " S% S&\\S9r' " S' S(\\S9r( " S) S*\\S9r) " S+ S,\\S9r* " S- S.\\S9r+ " S/ S0\\S9r, " S1 S2\\S9r- " S3 S4\\\S9r. " S5 S6\\\S9r/ " S7 S8\\\S9r0 " S9 S:\\\S9r1 " S; S<\\\S9r2 " S= S>\\\S9r3 " S? S@\\S9r4 " SA SB\\\S9r5 " SC SD\\S9r6 " SE SF\\S9r7SJSG jr8SH r9SI r:\Rw                  5         g
)Kz>Options manager for :class:`~.Poly` and public API functions.     )annotationsOptions)Basic)Expr)sympify)GeneratorsErrorOptionError	FlagError)numbered_symbolstopological_sortpublic)has_dupsis_sequenceNc                      \ rS rSr% SrSrS\S'   Sr/ rS\S'   / r	S\S	'   / r
S\S
'   / rS\S'   \S 5       r\S 5       r\S 5       rSrg)Option   z%Base class for all kinds of options. Nz
str | NoneoptionF	list[str]requiresexcludesafterbeforec                    g N clss    O/var/www/auris/envauris/lib/python3.13/site-packages/sympy/polys/polyoptions.pydefaultOption.default           c                    g r   r   )r   r   s     r   
preprocessOption.preprocess#   r!   r"   c                    g r   r   r   optionss     r   postprocessOption.postprocess'   s    r"   r   )__name__
__module____qualname____firstlineno____doc__r   __annotations__is_Flagr   r   r   r   classmethodr   r$   r)   __static_attributes__r   r"   r   r   r      sv    /FJGHiHiE9FI     r"   r   c                      \ rS rSrSrSrSrg)Flag,   z#Base class for all kinds of flags. Tr   N)r+   r,   r-   r.   r/   r1   r3   r   r"   r   r5   r5   ,   s
    -Gr"   r5   c                  (    \ rS rSrSr\S 5       rSrg)BooleanOption2   zAAn option that must have a boolean value or equivalent assigned. c                ^    US;   a  [        U5      $ [        SU R                  < SU< 35      e)N)TF'z*' must have a boolean value assigned, got )boolr	   r   )r   values     r   r$   BooleanOption.preprocess5   s,    M!;SVS]S]_deffr"   r   N)r+   r,   r-   r.   r/   r2   r$   r3   r   r"   r   r8   r8   2   s    Kg gr"   r8   c                      \ rS rSrSrS rSrg)
OptionType=   z7Base type for all options that does registers options. c                   ^  [         U 4S j5       n[        [        T R                  U5        T [        R                  T R                  '   g )Nc                d   >  U TR                      $ ! [         a    TR                  5       s $ f = fr   )r   KeyErrorr   )selfr   s    r   getter#OptionType.__init__.<locals>.getterA   s2    %CJJ'' %{{}$%s    //)propertysetattrr   r   __options__)r   argskwargsrF   s   `   r   __init__OptionType.__init__@   s;    		% 
	% 	V,*-CJJ'r"   r   N)r+   r,   r-   r.   r/   rM   r3   r   r"   r   r@   r@   =   s
    A	.r"   r@   c                     ^  \ rS rSr% SrSr0 rS\S'   S\S'   S\S	'   SS
 jr\	S 5       r
0 4S jrU 4S jr\S 5       r\S 5       r\S 5       rSrU =r$ )r   L   a  
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

Nzdict[str, type[Option]]rJ   ztuple[Expr, ...]genszsympy.polys.domains.Domaindomainc           	     D  ^ ^^ [         R                  T 5        U(       a"  UR                  SS5      (       a  [        S5      eU(       a  [        U5      nXS'   UR	                  S0 5      nUU U4S jnU" U5        [        U5       HG  nUT ;   a  XW	 M  T R                  5        H&  nT R                  U   n	XyR                  ;   d  M#  XW	   ME     MI     U" U5        T R                  5        H  nT R                  U   n	U	R                   H)  n
T R                  U
5      b  M  [        SU< SU
< S35      e   U	R                   H)  nT R                  U5      c  M  [        SU< SU< S35      e   M     T R                   H!  nT R                  U   R                  T 5        M#     g )	NrQ   r   z1both '*gens' and keyword argument 'gens' supplieddefaultsc                (  > U R                  5        Ha  u  p TR                  U   n[	        U[
        5      (       a  Tb  UT;  a  T(       a  [        SU-  5      eUc  MM  UR                  U5      TU'   Mc     g ! [         a    [        SU-  5      ef = f)N'%s' is not a valid option('%s' flag is not allowed in this context)itemsrJ   rD   r	   
issubclassr5   r$   )rK   r   r=   r   flagsrE   stricts       r   preprocess_options,Options.__init__.<locals>.preprocess_options   s    !%M**62C c4((}e(;!"-.X[a.a"bb$#&>>%#8DL ".   M%&BV&KLLMs   A88Br;   z(' option is only allowed together with 'z'' option is not allowed together with ')dictrM   getr	   popkeysrJ   r   r   	__order__r)   )rE   rQ   rK   rZ   r[   rT   r\   keyr   r   require_optionexclude_options   `  ``       r   rM   Options.__init__   se   dDHHVR((CE E:DL88J+	9 	4 >Cd{M"iikF**62Cll*$M *	 " 	8$iikF""6*C"%,,88N+3%Z`bp&qrr #/ #&,,88N+7%Y_ao&pqq #/ " nnFV$006 %r"   c                  ^ U R                   c  / [        5       p!U R                  R                  5        Ha  u  mnUR	                  T5        UR                  U4S jUR                   5       5        UR                  U4S jUR                   5       5        Mc      [        U[        U5      45      U l         gg! [         a    [        S5      ef = f)z*Resolve the order of options' processing. Nc              3  *   >#    U  H  oT4v   M
     g 7fr   r   .0_namenames     r   	<genexpr>3Options._init_dependencies_order.<locals>.<genexpr>   s     EuT]s   c              3  ,   >#    U  H	  nTU4v   M     g 7fr   r   ri   s     r   rm   rn      s     FudE]s   z/cycle detected in sympy.polys options framework)rb   setrJ   rX   appendupdater   r   r   list
ValueErrorRuntimeError)r   verticesedgesr   rl   s       @r   _init_dependencies_order Options._init_dependencies_order   s     ==  #%e # 5 5 7f%EEEFFF !8G 0(DK1H I !  G"EG GGs   B7 7Cc                    [         R                  U R                  5      nU R                  5        H	  u  p4XBU'   M     UR                  5        H	  u  p4XBU'   M     U$ )z-Clone ``self`` and update specified options. )r^   __new__	__class__rX   )rE   updatesobjr   r=   s        r   cloneOptions.clone   sO    ll4>>*!ZZ\MFK * %]]_MFK - 
r"   c                L   > XR                   ;   a  X U'   g [        TU ]	  X5        g r   )rJ   super__setattr__)rE   attrr=   r|   s      r   r   Options.__setattr__   s#    ###JG,r"   c                    0 nU R                  5        H<  u  p#Uc  M
  US:w  d  M  U R                  U   n[        U[        5      (       a  M8  X1U'   M>     U$ )NrQ   )rX   rJ   rY   r5   )rE   rK   r   r=   r   s        r   rK   Options.args   sQ    !ZZ\MF Vv%5&&v.!#t,,#(L * r"   c                    0 nU R                   R                  5        H)  u  p#[        U[        5      (       a  M  [	        X5      X'   M+     U$ r   rJ   rX   rY   r5   getattr)rE   r(   r   r   s       r   r(   Options.options   sB    ++113KFc4((")$"7 4 r"   c                    0 nU R                   R                  5        H)  u  p#[        U[        5      (       d  M  [	        X5      X'   M+     U$ r   r   )rE   rZ   r   r   s       r   rZ   Options.flags   sB    ++113KF#t$$ ' 5 4 r"   r   NF)r+   r,   r-   r.   r/   rb   rJ   r0   rM   r2   rx   r   r   rH   rK   r(   rZ   r3   __classcell__)r|   s   @r   r   r   L   s    -^ I+-K(-
&&67p G G$  
- 
 
    r"   c                  J    \ rS rSr% SrSr/ rS\S'   / rS\S'   \	S 5       r
Srg	)
Expandi  z8``expand`` option to polynomial manipulation functions. expandr   r   r   c                    gNTr   r   s    r   r   Expand.default
  r!   r"   r   N)r+   r,   r-   r.   r/   r   r   r0   r   r2   r   r3   r   r"   r   r   r     s0    BFHiHi r"   r   )	metaclassc                  Z    \ rS rSr% SrSr/ rS\S'   / rS\S'   \	S 5       r
\	S 5       rS	rg
)Gensi  z6``gens`` option to polynomial manipulation functions. rQ   r   r   r   c                    g)Nr   r   r   s    r   r   Gens.default  s    r"   c                T   [        U[        5      (       a  U4nO'[        U5      S:X  a  [        US   5      (       a  US   nUS:X  a  SnOU[	        U5      (       a  [        S[        U5      -  5      e[        S U 5       5      (       a  [        S[        U5      -  5      e[        U5      $ )N   r   r   r   zduplicated generators: %sc              3  <   #    U  H  oR                   S L v   M     g7f)FN)is_commutative)rj   gens     r   rm   "Gens.preprocess.<locals>.<genexpr>&  s     =##u,s   znon-commutative generators: %s)	
isinstancer   lenr   r   r   stranytuple)r   rQ   s     r   r$   Gens.preprocess  s    dE""7DY!^DG 4 47D7?Dd^^!"=D	"IJJ====!"BSY"NOOT{r"   r   Nr+   r,   r-   r.   r/   r   r   r0   r   r2   r   r$   r3   r   r"   r   r   r     sD    @FHiHi   r"   r   c                  n    \ rS rSr% SrSr/ rS\S'   / rS\S'   \	R                  " S5      r\S 5       rS	rg
)Wrti,  z5``wrt`` option to polynomial manipulation functions. wrtr   r   r   z\s*,\s*|\s+c                   [        U[        5      (       a  [        U5      /$ [        U[        5      (       a^  UR                  5       nUR	                  S5      (       a  [        S5      eU(       d  / $ [        U R                  R                  U5      5      $ [        US5      (       a  [        [        [        U5      5      $ [        S5      e)N,zBad input: missing parameter.__getitem__z!invalid argument for 'wrt' option)r   r   r   stripendswithr	   rs   	_re_splitsplithasattrmap)r   r   s     r   r$   Wrt.preprocess6  s    c5!!H:S!!))+C||C  !"ABB	++C011S-((C&&ABBr"   r   N)r+   r,   r-   r.   r/   r   r   r0   r   recompiler   r2   r$   r3   r   r"   r   r   r   ,  s@    ?FHiHi

>*IC Cr"   r   c                  Z    \ rS rSr% SrSr/ rS\S'   / rS\S'   \	S 5       r
\	S 5       rS	rg
)SortiG  z6``sort`` option to polynomial manipulation functions. sortr   r   r   c                    / $ r   r   r   s    r   r   Sort.defaultO  s    	r"   c                    [        U[        5      (       a/  UR                  S5       Vs/ s H  o"R                  5       PM     sn$ [	        US5      (       a  [        [        [        U5      5      $ [        S5      es  snf )N>r   z"invalid argument for 'sort' option)r   r   r   r   r   rs   r   r	   )r   r   r   s      r   r$   Sort.preprocessS  s_    dC  ,0JJsO=OSYY[O==T=))C''BCC	 >s   A:r   Nr   r   r"   r   r   r   G  sF    @FHiHi  D Dr"   r   c                  Z    \ rS rSr% SrSr/ rS\S'   / rS\S'   \	S 5       r
\	S 5       rS	rg
)Orderi]  z7``order`` option to polynomial manipulation functions. orderr   r   r   c                J    [         R                  R                  R                  $ r   )sympypolys	orderingslexr   s    r   r   Order.defaulte  s    {{$$(((r"   c                T    [         R                  R                  R                  U5      $ r   )r   r   r   monomial_key)r   r   s     r   r$   Order.preprocessi  s    {{$$11%88r"   r   Nr   r   r"   r   r   r   ]  sD    AFHiHi) ) 9 9r"   r   c                  4    \ rS rSr% SrSr/ rS\S'   / SQrSr	g)	Fieldin  z7``field`` option to polynomial manipulation functions. fieldr   r   )rR   r   gaussianr   N
r+   r,   r-   r.   r/   r   r   r0   r   r3   r   r"   r   r   r   n  s    AFHi.Hr"   r   c                  4    \ rS rSr% SrSr/ rS\S'   / SQrSr	g)	Greedyiw  z8``greedy`` option to polynomial manipulation functions. greedyr   r   rR   r   r   	extensionmodulus	symmetricr   Nr   r   r"   r   r   r   w  s    BFHiSHr"   r   c                  D    \ rS rSr% SrSr\S 5       r/ rS\	S'   / SQr
Srg	)
	Compositei  z;``composite`` option to polynomial manipulation functions. 	compositec                    g r   r   r   s    r   r   Composite.default  r!   r"   r   r   r   r   N)r+   r,   r-   r.   r/   r   r2   r   r   r0   r   r3   r   r"   r   r   r     s-    EF  HiSHr"   r   c                  2   \ rS rSr% SrSr/ rS\S'   / SQrS/r	\
R                  " S5      r\
R                  " S	5      r\
R                  " S
5      r\
R                  " S5      r\
R                  " S5      r\
R                  " S5      r\S 5       r\S 5       rSrg)Domaini  z8``domain`` option to polynomial manipulation functions. rR   r   r   )r   r   r   r   r   rQ   z^(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                N   [        U[        R                  R                  R                  5      (       a  U$ [        US5      (       a  UR                  5       $ [        U[        5      (       Ga,  US;   a$  [        R                  R                  R                  $ US;   a$  [        R                  R                  R                  $ US:X  a$  [        R                  R                  R                  $ US:X  a$  [        R                  R                  R                  $ US:X  a$  [        R                  R                  R                  $ U R                  R                  U5      nUbl  UR                  5       u    p4Uc$  [        R                  R                  R                   $ [        R                  R                  R#                  [%        U5      5      $ U R&                  R                  U5      nUbl  UR                  5       u    p4Uc$  [        R                  R                  R(                  $ [        R                  R                  R+                  [%        U5      5      $ U R,                  R                  U5      nUbC  [        R                  R                  R/                  [%        UR                  5       S   5      5      $ U R0                  R                  U5      nUGb~  UR                  5       u  pV[3        [5        [6        UR9                  S5      5      5      nUS;   a1  [        R                  R                  R                  R:                  " U6 $ US;   a1  [        R                  R                  R                  R:                  " U6 $ US	;   a1  [        R                  R                  R                   R:                  " U6 $ US:X  a1  [        R                  R                  R                  R:                  " U6 $ US:X  a1  [        R                  R                  R                  R:                  " U6 $ [        R                  R                  R(                  R:                  " U6 $ U R<                  R                  U5      nUb  UR                  5       u  pV[3        [5        [6        UR9                  S5      5      5      nUS;   a1  [        R                  R                  R                  R>                  " U6 $ [        R                  R                  R                  R>                  " U6 $ U R@                  R                  U5      nUbj  [3        [5        [6        UR                  5       S   R9                  S5      5      5      n[        R                  R                  R                  RB                  " U6 $ [E        S
U-  5      e)N	to_domain)ZZZ)QQQZZ_IQQ_IEXr   r   )RRRz-expected a valid domain specification, got %s)#r   r   r   domainsr   r   r   r   r   r   r   r   r   _re_realfieldmatchgroupsr   	RealFieldint_re_complexfieldCCComplexField_re_finitefieldFF_re_polynomialrs   r   r   r   	poly_ring_re_fraction
frac_field_re_algebraicalgebraic_fieldr	   )r   rR   r_precgroundrQ   s          r   r$   Domain.preprocess  s   fekk118899MV[))##%%$$${{**---${{**---{{**///{{**///~{{**---!!''/A}XXZ
1< ;;..111 ;;..88TCC$$**62A}XXZ
1< ;;..111 ;;..;;CIFF##))&1A}{{**--c!((*Q-.@AA""((0A} xxzCC9:[( ;;..11;;TBB{* ;;..11;;TBB{* ;;..11;;TBBv% ;;..33==tDDv% ;;..33==tDD ;;..11;;TBB  &&v.A} xxzCC9:[( ;;..11<<dCC ;;..11<<dCC!!''/A}CA)<)<S)ABC{{**--==tDDIFRSSr"   c                N   SU;   aQ  SU;   aK  US   R                   (       a7  [        US   R                  5      [        US   5      -  (       a  [        S5      eSU;  d
  US   (       d>  SU;   a7  US   [        R
                  R                  R                  :X  a  [        S5      eg g g )NrQ   rR   z/ground domain and generators interfere togetherz>you have to provide generators because EX domain was requested)is_Compositerp   symbolsr   r   r   r   r   r'   s     r   r)   Domain.postprocess  s    WW!49J9W9WWX&../#gfo2FF!AC CG#76?G#(9U[[=P=P=S=S(S!"bcc )T# ,;r"   r   N)r+   r,   r-   r.   r/   r   r   r0   r   r   r   r   r   r   r   r   r   r   r2   r$   r)   r3   r   r"   r   r   r     s    BFHiDHHEJJ34Mzz"67jj!67OZZ LMN::67LJJ23MTT TTl d dr"   r   c                  D    \ rS rSr% SrSr/ rS\S'   / SQr\	S 5       r
Srg	)
Spliti   z7``split`` option to polynomial manipulation functions. r   r   r   )r   r   rR   r   r   r   r   c                &    SU;   a  [        S5      eg )Nr   z%'split' option is not implemented yet)NotImplementedErrorr'   s     r   r)   Split.postprocess	  s    g%&MNN r"   r   Nr+   r,   r-   r.   r/   r   r   r0   r   r2   r)   r3   r   r"   r   r  r     s1    AFHi H O Or"   r  c                  D    \ rS rSr% SrSr/ rS\S'   / SQr\	S 5       r
Srg	)
Gaussiani  z:``gaussian`` option to polynomial manipulation functions. r   r   r   )r   r   rR   r   r   r   r   c                    SU;   aF  US   SL a=  [         R                  R                  R                  US'   [        R                  U5        g g g )Nr   TrR   )r   r   r   r   	Extensionr)   r'   s     r   r)   Gaussian.postprocess  sG     WZ%8D%@ % 3 3 8 8GH!!'* &A r"   r   Nr  r   r"   r   r
  r
    s/    DFHi H + +r"   r
  c                  T    \ rS rSr% SrSr/ rS\S'   / SQr\	S 5       r
\	S 5       rS	rg
)r  i  z;``extension`` option to polynomial manipulation functions. r   r   r   )r   rR   r   r   r   r   c                    US:X  a  [        U5      $ US:X  a  [        S5      e[        US5      (       d  U1nU$ U(       d  S nU$ [        U5      nU$ )Nr   r   z.'False' is an invalid argument for 'extension'__iter__)r<   r	   r   rp   )r   r   s     r   r$   Extension.preprocess(  se    >	?"!^NOO9j11&K	  ! $I  !$IIr"   c                    SU;   aA  US   SLa8  [         R                  R                  R                  R                  " US   6 US'   g g g )Nr   TrR   )r   r   r   r   r   r'   s     r   r)   Extension.postprocess9  sL    '!gk&:$&F % 3 3 6 6 F F%!'GH 'G!r"   r   Nr+   r,   r-   r.   r/   r   r   r0   r   r2   r$   r)   r3   r   r"   r   r  r    sC    EFHiH    ' 'r"   r  c                  T    \ rS rSr% SrSr/ rS\S'   / SQr\	S 5       r
\	S 5       rS	rg
)Modulusi@  z9``modulus`` option to polynomial manipulation functions. r   r   r   )r   r   rR   r   r   c                x    [        U5      nUR                  (       a  US:  a  [        U5      $ [        SU-  5      e)Nr   z)'modulus' must a positive integer, got %s)r   
is_Integerr   r	   )r   r   s     r   r$   Modulus.preprocessH  s<    '"'A+w<;gEG Gr"   c                    SU;   aD  US   nUR                  SS5      n[        R                  R                  R	                  X#5      US'   g g )Nr   r   TrR   )r_   r   r   r   r   )r   r(   r   r   s       r   r)   Modulus.postprocessR  sH    i(GK6I % 3 3 6 6w JGH  r"   r   Nr  r   r"   r   r  r  @  sC    CFHiEHG G K Kr"   r  c                  *    \ rS rSrSrSrS/r/ SQrSrg)	SymmetriciZ  z;``symmetric`` option to polynomial manipulation functions. r   r   )r   rR   r   r   r   r   N)	r+   r,   r-   r.   r/   r   r   r   r3   r   r"   r   r  r  Z  s    EF{HEHr"   r  c                  ,    \ rS rSrSrSr\S 5       rSrg)Strictic  z8``strict`` option to polynomial manipulation functions. r[   c                    gr   r   r   s    r   r   Strict.defaulth  r!   r"   r   N	r+   r,   r-   r.   r/   r   r2   r   r3   r   r"   r   r  r  c  s    BF r"   r  c                  D    \ rS rSrSrSr/ SQr\S 5       r\S 5       r	Sr
g)	Autoim  z4``auto`` flag to polynomial manipulation functions. auto)r   rR   r   r   c                    gr   r   r   s    r   r   Auto.defaultt  r!   r"   c                6    SU;   d  SU;   a  SU;  a  SUS'   g g g )NrR   r   r%  Fr   r'   s     r   r)   Auto.postprocessx  s*    7g#56;P#GFO <Q#5r"   r   N)r+   r,   r-   r.   r/   r   r   r2   r   r)   r3   r   r"   r   r$  r$  m  s5    >F8E  $ $r"   r$  c                  ,    \ rS rSrSrSr\S 5       rSrg)Fraci~  z6``auto`` option to polynomial manipulation functions. fracc                    gr   r   r   s    r   r   Frac.default      r"   r   Nr"  r   r"   r   r+  r+  ~  s    @F r"   r+  c                  ,    \ rS rSrSrSr\S 5       rSrg)Formali  z6``formal`` flag to polynomial manipulation functions. formalc                    gr   r   r   s    r   r   Formal.default  r/  r"   r   Nr"  r   r"   r   r1  r1        @F r"   r1  c                      \ rS rSrSrSrSrg)Polysi  z5``polys`` flag to polynomial manipulation functions. r   r   N)r+   r,   r-   r.   r/   r   r3   r   r"   r   r7  r7    s
    ?Fr"   r7  c                  ,    \ rS rSrSrSr\S 5       rSrg)Includei  z7``include`` flag to polynomial manipulation functions. includec                    gr   r   r   s    r   r   Include.default  r/  r"   r   Nr"  r   r"   r   r9  r9    s    AF r"   r9  c                  ,    \ rS rSrSrSr\S 5       rSrg)Alli  z3``all`` flag to polynomial manipulation functions. allc                    gr   r   r   s    r   r   All.default  r/  r"   r   Nr"  r   r"   r   r>  r>    s    =F r"   r>  c                  <    \ rS rSrSrSr\S 5       r\S 5       rSr	g)Geni  z3``gen`` flag to polynomial manipulation functions. r   c                    g)Nr   r   r   s    r   r   Gen.default  s    r"   c                R    [        U[        [        45      (       a  U$ [        S5      e)Nz!invalid argument for 'gen' option)r   r   r   r	   )r   r   s     r   r$   Gen.preprocess  s$    cE3<((JABBr"   r   N
r+   r,   r-   r.   r/   r   r2   r   r$   r3   r   r"   r   rC  rC    s2    =F  C Cr"   rC  c                  ,    \ rS rSrSrSr\S 5       rSrg)Seriesi  z6``series`` flag to polynomial manipulation functions. seriesc                    gr   r   r   s    r   r   Series.default  r/  r"   r   Nr"  r   r"   r   rJ  rJ    r5  r"   rJ  c                  <    \ rS rSrSrSr\S 5       r\S 5       rSr	g)Symbolsi  z7``symbols`` flag to polynomial manipulation functions. r  c                    [        SSS9$ )Nsr   )start)r   r   s    r   r   Symbols.default  s    1--r"   c                V    [        US5      (       a  [        U5      $ [        SU-  5      e)Nr  z2expected an iterator or iterable container, got %s)r   iterr	   )r   r  s     r   r$   Symbols.preprocess  s+    7J''= RU\\]]r"   r   NrH  r   r"   r   rO  rO    s2    AF. . ^ ^r"   rO  c                  ,    \ rS rSrSrSr\S 5       rSrg)Methodi  z6``method`` flag to polynomial manipulation functions. methodc                h    [        U[        5      (       a  UR                  5       $ [        SU-  5      e)Nzexpected a string, got %s)r   r   lowerr	   )r   rY  s     r   r$   Method.preprocess  s,    fc""<<>!9FBCCr"   r   N)	r+   r,   r-   r.   r/   r   r2   r$   r3   r   r"   r   rX  rX    s    @FD Dr"   rX  c                f    Uc  SU p[        U5      S:w  d  SU;  d  U (       a  [        X5      $ US   $ )z9Construct options from keyword arguments or ... options. r   r   opt)r   r   )rQ   rK   s     r   build_optionsr_    s7    |d
4yA~d*dt""E{r"   c                    [        U5      nU R                  5        H;  n [        R                  U   R                  (       a  X!;  a  [        SU-  5      eM;  M=     g! [         a    [        SU-  5      ef = f)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'])

rW   rV   N)rp   ra   r   rJ   r1   r
   rD   r	   )rK   rZ   args      r   allowed_flagsrb    s    ( JEyy{	B""3'//C4D>DF F 5E/ 
  	B:S@AA	Bs   5AA5c                0    SU ;  a  [        U 5      n XS'   U $ )z$Update options with default values. rT   )r^   )r(   rT   s     r   set_defaultsrd    s      w-&
Nr"   r   )<r/   
__future__r   __all__sympy.core.basicr   sympy.core.exprr   sympy.core.sympifyr   sympy.polys.polyerrorsr   r	   r
   sympy.utilitiesr   r   r   sympy.utilities.iterablesr   r   sympy.polysr   r   r   r5   r8   typer@   r^   r   r   r   r   r   r   r   r   r   r   r  r
  r  r  r  r  r$  r+  r1  r7  r9  r>  rC  rJ  rO  rX  r_  rb  rd  rx   r   r"   r   <module>ro     s#   D "+ "   & J J F F ;  	 46 gF g. . rd r rj
]j 
6Z :C&J C6D6Z D,9Fj 9"/MZ /T]j T
T 
TpdVz pdfOMZ O+}
 + '* 'BKf
 K4F F]j $=$* $"=$* ]DJ M4: mTZ - C$* C"]DJ ^dj ^"
DTZ 
DB>      "r"   