
    ЦiT                        S r SSKJr  S/rSSKJr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- 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r. " S9 S:\\\S9r/ " S; S<\\\S9r0 " S= S>\\S9r1 " S? S@\\\S9r2 " SA SB\\S9r3 " SC SD\\S9r4SHSE jr5SF r6SG r7\Rq                  5         g)Iz>Options manager for :class:`~.Poly` and public API functions.     )annotationsOptions)Basic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    V/var/www/html/ai-image-ml/venv/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.   r0   r2   r   r!   r   r4   r4   *   s
    -Gr!   r4   c                  (    \ rS rSrSr\S 5       rSrg)BooleanOption0   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.preprocess3   s,    M!;SVS]S]_deffr!   r   N)r*   r+   r,   r-   r.   r1   r#   r2   r   r!   r   r7   r7   0   s    Kg gr!   r7   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>.getter?   s2    %CJJ'' %{{}$%s    //)propertysetattrr   r   __options__)r   argskwargsrE   s   `   r   __init__OptionType.__init__>   s;    		% 
	% 	V,*-CJJ'r!   r   N)r*   r+   r,   r-   r.   rL   r2   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 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   J   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]]rI   c           	     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 )	Ngensr   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)itemsrI   rC   r   
issubclassr4   r#   )rJ   r   r<   r   flagsrD   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 ')dictrL   getr   popkeysrI   r   r   	__order__r(   )rD   rQ   rJ   rX   rY   rR   rZ   keyr   r   require_optionexclude_options   `  ``       r   rL   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   rg   s     r   rk   rl      s     FudE]s   z/cycle detected in sympy.polys options framework)r`   setrI   rV   appendupdater   r   r   list
ValueErrorRuntimeError)r   verticesedgesr   rj   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__rV   )rD   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   )rI   super__setattr__)rD   attrr<   rz   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   )rV   rI   rW   r4   )rD   rJ   r   r<   r   s        r   rJ   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   rI   rV   rW   r4   getattr)rD   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   )rD   rX   r   r   s       r   rX   Options.flags   sB    ++113KF#t$$ ' 5 4 r!   r   NF)r*   r+   r,   r-   r.   r`   rI   r/   rL   r1   rv   r}   r   rG   rJ   r'   rX   r2   __classcell__)rz   s   @r   r   r   J   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	)
Expand   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   r/   r   r1   r   r2   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)rh   gens     r   rk   "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   r/   r   r1   r   r#   r2   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   rq   	_re_splitsplithasattrmap)r   r   s     r   r#   Wrt.preprocess1  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   r/   r   recompiler   r1   r#   r2   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
)SortiB  z6``sort`` option to polynomial manipulation functions. sortr   r   r   c                    / $ r   r   r   s    r   r   Sort.defaultJ  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   rq   r   r   )r   r   r   s      r   r#   Sort.preprocessN  s_    dC  ,0JJsO=OSYY[O==T=))C''BCC	 >s   A:r   Nr   r   r!   r   r   r   B  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
)OrderiX  z7``order`` option to polynomial manipulation functions. orderr   r   r   c                J    [         R                  R                  R                  $ r   )sympypolys	orderingslexr   s    r   r   Order.default`  s    {{$$(((r!   c                T    [         R                  R                  R                  U5      $ r   )r   r   r   monomial_key)r   r   s     r   r#   Order.preprocessd  s    {{$$11%88r!   r   Nr   r   r!   r   r   r   X  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)	Fieldii  z7``field`` option to polynomial manipulation functions. fieldr   r   )domainr   gaussianr   N
r*   r+   r,   r-   r.   r   r   r/   r   r2   r   r!   r   r   r   i  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)	Greedyir  z8``greedy`` option to polynomial manipulation functions. greedyr   r   r   r   r   	extensionmodulus	symmetricr   Nr   r   r!   r   r   r   r  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   r1   r   r   r/   r   r2   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. r   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_polynomialrq   r   r   r   	poly_ring_re_fraction
frac_field_re_algebraicalgebraic_fieldr   )r   r   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   r   z/ground domain and generators interfere togetherz>you have to provide generators because EX domain was requested)is_Compositern   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   r/   r   r   r   r   r   r   r   r   r   r   r1   r#   r(   r2   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   r   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   r/   r   r1   r(   r2   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   r   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   Tr   )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   r   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   rn   )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   Tr   )r   r   r   r   r   r&   s     r   r(   Extension.postprocess4  sL    '!gk&:$&F % 3 3 6 6 F F%!'GH 'G!r!   r   Nr*   r+   r,   r-   r.   r   r   r/   r   r1   r#   r(   r2   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   r   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.preprocessC  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   Tr   )r]   r   r   r   r   )r   r'   r   r   s       r   r(   Modulus.postprocessM  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)	SymmetriciU  z;``symmetric`` option to polynomial manipulation functions. r   r   )r   r   r   r   r   r   N)	r*   r+   r,   r-   r.   r   r   r   r2   r   r!   r   r  r  U  s    EF{HEHr!   r  c                  ,    \ rS rSrSrSr\S 5       rSrg)Stricti^  z8``strict`` option to polynomial manipulation functions. rY   c                    gr   r   r   s    r   r   Strict.defaultc  r    r!   r   N	r*   r+   r,   r-   r.   r   r1   r   r2   r   r!   r   r  r  ^  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)	Autoih  z4``auto`` flag to polynomial manipulation functions. auto)r   r   r   r   c                    gr   r   r   s    r   r   Auto.defaulto  r    r!   c                6    SU;   d  SU;   a  SU;  a  SUS'   g g g )Nr   r   r%  Fr   r&   s     r   r(   Auto.postprocesss  s*    7g#56;P#GFO <Q#5r!   r   N)r*   r+   r,   r-   r.   r   r   r1   r   r(   r2   r   r!   r   r$  r$  h  s5    >F8E  $ $r!   r$  c                  ,    \ rS rSrSrSr\S 5       rSrg)Fraciy  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+  y  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   r2   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   r1   r   r#   r2   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   r1   r#   r2   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   rJ   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'])

rU   rT   N)rn   r_   r   rI   r0   r	   rC   r   )rJ   rX   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. rR   )r\   )r'   rR   s     r   set_defaultsrd  
  s      w-&
Nr!   r   )9r.   
__future__r   __all__
sympy.corer   r   sympy.polys.polyerrorsr   r   r	   sympy.utilitiesr
   r   r   sympy.utilities.iterablesr   r   sympy.polysr   r   r   r4   r7   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  rv   r   r!   r   <module>rm     s   D "+ % J J F F ;  	 46 gF g. . od o od
]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!   