§
    ¬³Ùg¦T  ã                  óx  — d Z ddlmZ dgZddlmZmZ ddlmZm	Z	m
Z
 ddlmZmZmZ ddlmZmZ ddlZddlZ G d	„ d
¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Ze G d„ de¦  «        ¦   «         Z G d„ dee¬¦  «        Z G d„ dee¬¦  «        Z G d„ dee¬¦  «        Z G d„ dee¬¦  «        Z G d„ dee¬¦  «        Z  G d„ dee¬¦  «        Z! G d„ d ee¬¦  «        Z" G d!„ d"ee¬¦  «        Z# G d#„ d$ee¬¦  «        Z$ G d%„ d&ee¬¦  «        Z% G d'„ d(ee¬¦  «        Z& G d)„ d*ee¬¦  «        Z' G d+„ d,ee¬¦  «        Z( G d-„ d.ee¬¦  «        Z) G d/„ d0ee¬¦  «        Z* G d1„ d2eee¬¦  «        Z+ G d3„ d4eee¬¦  «        Z, G d5„ d6eee¬¦  «        Z- G d7„ d8eee¬¦  «        Z. G d9„ d:eee¬¦  «        Z/ G d;„ d<eee¬¦  «        Z0 G d=„ d>ee¬¦  «        Z1 G d?„ d@eee¬¦  «        Z2 G dA„ dBee¬¦  «        Z3 G dC„ dDee¬¦  «        Z4dHdE„Z5dF„ Z6dG„ Z7e 8                    ¦   «          dS )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                  ó    — e Zd ZU dZdZded<   dZg Zded<   g Zded<   g Z	ded	<   g Z
ded
<   ed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         ZdS )ÚOptionz%Base class for all kinds of options. Nz
str | NoneÚoptionFú	list[str]ÚrequiresÚexcludesÚafterÚbeforec                ó   — d S ©N© ©Úclss    úM/granary/edev/quantum/lib/python3.11/site-packages/sympy/polys/polyoptions.pyÚdefaultzOption.default   ó   € àˆtó    c                ó   — d S r   r   )r   r   s     r   Ú
preprocesszOption.preprocess!   r   r   c                ó   — d S r   r   ©r   Úoptionss     r   ÚpostprocesszOption.postprocess%   s   € àˆr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__Úis_Flagr   r   r   r   Úclassmethodr   r!   r%   r   r   r   r   r      sÅ   € € € € € € Ø/Ð/à€FÐÐÐÑà€Gà€HÐÐÐÑØ€HÐÐÐÑà€EÐÐÐÑØ€FÐÐÐÑàðð ñ „[ðð ðð ñ „[ðð ðð ñ „[ðð ð r   r   c                  ó   — e Zd ZdZdZdS )ÚFlagz#Base class for all kinds of flags. TN)r&   r'   r(   r)   r+   r   r   r   r.   r.   *   s   € € € € € Ø-Ð-à€G€G€Gr   r.   c                  ó(   — e Zd ZdZed„ ¦   «         ZdS )ÚBooleanOptionzAAn option that must have a boolean value or equivalent assigned. c                ó\   — |dv rt          |¦  «        S t          d| j        ›d|›�¦  «        ‚)N)TFú'z*' must have a boolean value assigned, got )Úboolr   r   )r   Úvalues     r   r!   zBooleanOption.preprocess3   s<   € à�MÐ!Ð!Ý˜‘;”;Ðå�+ÐSVÔS]ÐS]ÐS]Ð_dÐ_dÐeÑfÔfÐfr   N)r&   r'   r(   r)   r,   r!   r   r   r   r0   r0   0   s8   € € € € € ØKÐKàðgð gñ „[ðgð gð gr   r0   c                  ó   — e Zd ZdZd„ ZdS )Ú
OptionTypez7Base type for all options that does registers options. c                óŠ   ‡ — t           ˆ fd„¦   «         }t          t          ‰ j        |¦  «         ‰ t          j        ‰ j        <   d S )Nc                óh   •— 	 | ‰j                  S # t          $ r ‰                     ¦   «         cY S w xY wr   )r   ÚKeyErrorr   )Úselfr   s    €r   Úgetterz#OptionType.__init__.<locals>.getter?   sD   ø€ ð%Ø˜CœJÔ'Ð'øÝð %ð %ð %Ø—{’{‘}”}Ð$Ð$Ð$ð%øøøs   ƒ �1°1)ÚpropertyÚsetattrr   r   Ú__options__)r   ÚargsÚkwargsr;   s   `   r   Ú__init__zOptionType.__init__>   sQ   ø€ Ý	ð	%ð 	%ð 	%ð 	%ñ 
Œð	%õ 	•˜œ VÑ,Ô,Ð,Ø*-�Ô˜CœJÑ'Ð'Ð'r   N)r&   r'   r(   r)   rA   r   r   r   r6   r6   ;   s)   € € € € € ØAÐAð	.ð 	.ð 	.ð 	.ð 	.r   r6   c                  ó    ‡ — e Zd ZU dZdZi Zded<   dd„Zed„ ¦   «         Z	i fd„Z
ˆ fd	„Zed
„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zˆ xZS )r   aB  
    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]]r>   Fc           	     ó(  ‡ ‡‡— t                                ‰ ¦  «         |r%|                     dd¦  «        rt          d¦  «        ‚|rt          |¦  «        }||d<   |                     di ¦  «        }ˆˆ ˆfd„} ||¦  «         t          |¦  «        D ]<}|‰ v r||= Œ
‰                      ¦   «         D ]}‰ j        |         }	||	j        v r||=  nŒŒ= ||¦  «         ‰                      ¦   «         D ]y}‰ j        |         }	|	j        D ]-}
‰                      |
¦  «        €t          d|›d|
›d�¦  «        ‚Œ.|	j        D ]-}‰                      |¦  «        �t          d|›d|›d�¦  «        ‚Œ.Œz‰ j	        D ]"}‰ j        |          
                    ‰ ¦  «         Œ#d S )	NÚgensr   z1both '*gens' and keyword argument 'gens' suppliedÚdefaultsc                ó,  •— |                       ¦   «         D ]}\  }}	 ‰j        |         }n # t          $ r t          d|z  ¦  «        ‚w xY wt	          |t
          ¦  «        r‰�|‰vr‰rt          d|z  ¦  «        ‚|�|                     |¦  «        ‰|<   Œ~d S )Nú'%s' is not a valid optionú('%s' flag is not allowed in this context)Úitemsr>   r9   r   Ú
issubclassr.   r!   )r?   r   r4   r   Úflagsr:   Ústricts       €€€r   Úpreprocess_optionsz,Options.__init__.<locals>.preprocess_optionsŠ   sÎ   ø€ Ø!%§¢¡¤ð 9ð 9‘�˜ðMØÔ*¨6Ô2�C�CøÝð Mð Mð MÝ%Ð&BÀVÑ&KÑLÔLÐLðMøøøõ ˜c¥4Ñ(Ô(ð cØ�}¨°eÐ(;Ð(;Ø!ð cÝ"-Ð.XÐ[aÑ.aÑ"bÔ"bÐbàÐ$Ø#&§>¢>°%Ñ#8Ô#8�D˜‘Løð9ð 9s	   œ*ªAr2   z(' option is only allowed together with 'z'' option is not allowed together with ')ÚdictrA   Úgetr   ÚpopÚkeysr>   r   r   Ú	__order__r%   )r:   rD   r?   rK   rL   rE   rM   Úkeyr   r   Úrequire_optionÚexclude_options   `  ``       r   rA   zOptions.__init__~   s2  øøø€ Ý�Š�dÑÔÐàð 	 �D—H’H˜V RÑ(Ô(ð 	 ÝØCñEô Eð Eàð 	 Ý˜‘:”:ˆDØˆD�‰Là—8’8˜J¨Ñ+Ô+ˆð	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	Ð˜4Ñ Ô Ð å˜‘>”>ð 		ð 		ˆCØ�dˆ{ˆ{Ø˜S�M�Mà"Ÿiši™kœkð ð �FØÔ*¨6Ô2�Cà˜cœlÐ*Ð*Ø$ S˜MØ˜ð +øð 	Ð˜8Ñ$Ô$Ð$à—i’i‘k”kð 		rð 		rˆFØÔ" 6Ô*ˆCà"%¤,ð sð s�Ø—8’8˜NÑ+Ô+Ð3Ý%˜+ÐZ`ÐZ`ÐZ`ÐbpÐbpÐbpÐ&qÑrÔrÐrð 4ð #&¤,ð rð r�Ø—8’8˜NÑ+Ô+Ð7Ý%˜+ÐY_ÐY_ÐY_ÐaoÐaoÐaoÐ&pÑqÔqÐqð 8ðrð ”nð 	7ð 	7ˆFØÔ˜VÔ$×0Ò0°Ñ6Ô6Ð6Ð6ð	7ð 	7r   c                ó¼  ‡— | j         €Óg t          ¦   «         }}| j                             ¦   «         D ]f\  Š}|                     ‰¦  «         |                     ˆfd„|j        D ¦   «         ¦  «         |                     ˆfd„|j        D ¦   «         ¦  «         Œg	 t          |t          |¦  «        f¦  «        | _         dS # t          $ r t          d¦  «        ‚w xY wdS )z*Resolve the order of options' processing. Nc              3  ó    •K  — | ]}|‰fV — Œ	d S r   r   ©Ú.0Ú_nameÚnames     €r   ú	<genexpr>z3Options._init_dependencies_order.<locals>.<genexpr>¿   s'   øè è € ÐEÐE¨u˜e T˜]ÐEÐEÐEÐEÐEÐEr   c              3  ó    •K  — | ]}‰|fV — Œ	d S r   r   rX   s     €r   r\   z3Options._init_dependencies_order.<locals>.<genexpr>Á   s'   øè è € ÐFÐF¨u˜d E˜]ÐFÐFÐFÐFÐFÐFr   z/cycle detected in sympy.polys options framework)rR   Úsetr>   rI   ÚappendÚupdater   r   r   ÚlistÚ
ValueErrorÚRuntimeError)r   ÚverticesÚedgesr   r[   s       @r   Ú_init_dependencies_orderz Options._init_dependencies_order¶   s  ø€ ð Œ=Ð Ø ¥#¡%¤%�eˆHà #¤× 5Ò 5Ñ 7Ô 7ð Gð G‘��fØ—’ Ñ%Ô%Ð%à—’ÐEÐEÐEÐE¸¼ÐEÑEÔEÑEÔEÐEà—’ÐFÐFÐFÐF¸¼ÐFÑFÔFÑFÔFÐFÐFðGÝ 0°(½DÀ¹K¼KÐ1HÑ IÔ I�”��øÝð Gð Gð GÝ"ØEñGô Gð GðGøøøð !Ð s   Â#B? Â?Cc                óÀ   — t                                | j        ¦  «        }|                      ¦   «         D ]
\  }}|||<   Œ|                     ¦   «         D ]
\  }}|||<   Œ|S )z-Clone ``self`` and update specified options. )rN   Ú__new__Ú	__class__rI   )r:   ÚupdatesÚobjr   r4   s        r   ÚclonezOptions.cloneÉ   sf   € å�lŠl˜4œ>Ñ*Ô*ˆà!ŸZšZ™\œ\ð 	 ð 	 ‰MˆF�EØˆC�‰KˆKà$Ÿ]š]™_œ_ð 	 ð 	 ‰MˆF�EØˆC�‰KˆKàˆ
r   c                ól   •— || j         v r|| |<   d S t          ¦   «                              ||¦  «         d S r   )r>   ÚsuperÚ__setattr__)r:   Úattrr4   ri   s      €r   ro   zOptions.__setattr__Õ   s>   ø€ Ø�4Ô#Ð#Ð#ØˆD�‰JˆJˆJå‰GŒG×Ò  eÑ,Ô,Ð,Ð,Ð,r   c                óœ   — i }|                       ¦   «         D ]4\  }}|�-|dk    r'| j        |         }t          |t          ¦  «        s|||<   Œ5|S )NrD   )rI   r>   rJ   r.   )r:   r?   r   r4   r   s        r   r?   zOptions.argsÛ   s`   € àˆà!ŸZšZ™\œ\ð 	)ð 	)‰MˆF�EØÐ  V¨vÒ%5Ð%5ØÔ& vÔ.�å! #¥tÑ,Ô,ð )Ø#(�D˜‘Løàˆr   c                ó˜   — i }| j                              ¦   «         D ]-\  }}t          |t          ¦  «        st	          | |¦  «        ||<   Œ.|S r   ©r>   rI   rJ   r.   Úgetattr)r:   r$   r   r   s       r   r$   zOptions.optionsè   sT   € àˆàÔ+×1Ò1Ñ3Ô3ð 	8ð 	8‰KˆF�CÝ˜c¥4Ñ(Ô(ð 8Ý")¨$°Ñ"7Ô"7�˜‘øàˆr   c                ó˜   — i }| j                              ¦   «         D ]-\  }}t          |t          ¦  «        rt	          | |¦  «        ||<   Œ.|S r   rs   )r:   rK   r   r   s       r   rK   zOptions.flagsò   sT   € àˆàÔ+×1Ò1Ñ3Ô3ð 	6ð 	6‰KˆF�CÝ˜#�tÑ$Ô$ð 6Ý '¨¨fÑ 5Ô 5��f‘øàˆr   ©NF)r&   r'   r(   r)   rR   r>   r*   rA   r,   rf   rl   ro   r<   r?   r$   rK   Ú__classcell__)ri   s   @r   r   r   J   sú   ø€ € € € € € ð-ð -ð^ €IØ+-€KÐ-Ð-Ð-Ñ-ð67ð 67ð 67ð 67ðp ðGð Gñ „[ðGð$ ð 
ð 
ð 
ð 
ð-ð -ð -ð -ð -ð ð
ð 
ñ „Xð
ð ðð ñ „Xðð ðð ñ „Xðð ð ð ð r   c                  óJ   — e Zd ZU dZdZg Zded<   g Zded<   ed„ ¦   «         Z	dS )ÚExpandz8``expand`` option to polynomial manipulation functions. Úexpandr   r   r   c                ó   — dS ©NTr   r   s    r   r   zExpand.default  r   r   N)
r&   r'   r(   r)   r   r   r*   r   r,   r   r   r   r   ry   ry   ý   s\   € € € € € € ØBÐBà€Fà€HÐÐÐÑØ€HÐÐÐÑàðð ñ „[ðð ð r   ry   )Ú	metaclassc                  ó`   — e Zd ZU dZdZg Zded<   g Zded<   ed„ ¦   «         Z	ed„ ¦   «         Z
dS )	ÚGensz6``gens`` option to polynomial manipulation functions. rD   r   r   r   c                ó   — dS )Nr   r   r   s    r   r   zGens.default  s   € àˆrr   c                ó�  — t          |t          ¦  «        r|f}n0t          |¦  «        dk    rt          |d         ¦  «        r|d         }|dk    rd}nft	          |¦  «        rt          dt          |¦  «        z  ¦  «        ‚t          d„ |D ¦   «         ¦  «        rt          dt          |¦  «        z  ¦  «        ‚t          |¦  «        S )Né   r   r   r   zduplicated generators: %sc              3  ó(   K  — | ]}|j         d u V — ŒdS )FN)Úis_commutative©rY   Úgens     r   r\   z"Gens.preprocess.<locals>.<genexpr>!  s*   è è € Ð=Ð=°�Ô# uÐ,Ð=Ð=Ð=Ð=Ð=Ð=r   znon-commutative generators: %s)	Ú
isinstancer   Úlenr   r   r   ÚstrÚanyÚtuple)r   rD   s     r   r!   zGens.preprocess  sÄ   € å�d�EÑ"Ô"ð 	Ø�7ˆDˆDÝ�‰YŒY˜!Š^ˆ^¥¨D°¬GÑ 4Ô 4ˆ^Ø˜”7ˆDà�7Š?ˆ?ØˆDˆDÝ�d‰^Œ^ð 	PÝ!Ð"=ÅÀDÁ	Ä	Ñ"IÑJÔJÐJÝÐ=Ð=¸Ð=Ñ=Ô=Ñ=Ô=ð 	PÝ!Ð"BÅSÈÁYÄYÑ"NÑOÔOÐOå�T‰{Œ{Ðr   N©r&   r'   r(   r)   r   r   r*   r   r,   r   r!   r   r   r   r   r   
  sw   € € € € € € Ø@Ð@à€Fà€HÐÐÐÑØ€HÐÐÐÑàðð ñ „[ðð ðð ñ „[ðð ð r   r   c                  ój   — e Zd ZU dZdZg Zded<   g Zded<    ej	        d¦  «        Z
ed„ ¦   «         ZdS )	ÚWrtz5``wrt`` option to polynomial manipulation functions. Úwrtr   r   r   z\s*,\s*|\s+c                ó¾  — t          |t          ¦  «        rt          |¦  «        gS t          |t          ¦  «        rc|                     ¦   «         }|                     d¦  «        rt          d¦  «        ‚|sg S t          | j                             |¦  «        ¦  «        S t          |d¦  «        r"t          t          t          |¦  «        ¦  «        S t          d¦  «        ‚)Nú,zBad input: missing parameter.Ú__getitem__z!invalid argument for 'wrt' option)r‡   r   r‰   ÚstripÚendswithr   ra   Ú	_re_splitÚsplitÚhasattrÚmap)r   r�   s     r   r!   zWrt.preprocess1  sÊ   € å�c�5Ñ!Ô!ð 	CÝ˜‘H”H�:ÐÝ˜�SÑ!Ô!ð 
	CØ—)’)‘+”+ˆCØ�|Š|˜CÑ Ô ð CÝ!Ð"AÑBÔBÐBØð Ø�	Ý˜œ×+Ò+¨CÑ0Ô0Ñ1Ô1Ð1Ý�S˜-Ñ(Ô(ð 	CÝ��C ™œÑ&Ô&Ð&åÐAÑBÔBÐBr   N)r&   r'   r(   r)   r   r   r*   r   ÚreÚcompiler•   r,   r!   r   r   r   rŽ   rŽ   '  sr   € € € € € € Ø?Ð?à€Fà€HÐÐÐÑØ€HÐÐÐÑà�”
˜>Ñ*Ô*€IàðCð Cñ „[ðCð Cð Cr   rŽ   c                  ó`   — e Zd ZU dZdZg Zded<   g Zded<   ed„ ¦   «         Z	ed„ ¦   «         Z
dS )	ÚSortz6``sort`` option to polynomial manipulation functions. Úsortr   r   r   c                ó   — g S r   r   r   s    r   r   zSort.defaultJ  s   € àˆ	r   c                óì   — t          |t          ¦  «        rd„ |                     d¦  «        D ¦   «         S t          |d¦  «        r"t	          t          t          |¦  «        ¦  «        S t          d¦  «        ‚)Nc                ó6   — g | ]}|                      ¦   «         ‘ŒS r   )r“   r…   s     r   ú
<listcomp>z#Sort.preprocess.<locals>.<listcomp>Q  s    € Ð=Ð=Ð= S�S—Y’Y‘[”[Ð=Ð=Ð=r   ú>r’   z"invalid argument for 'sort' option)r‡   r‰   r–   r—   ra   r˜   r   )r   r�   s     r   r!   zSort.preprocessN  sk   € å�d�CÑ Ô ð 	DØ=Ð=¨D¯JªJ°s©O¬OÐ=Ñ=Ô=Ð=Ý�T˜=Ñ)Ô)ð 	DÝ��C ™œÑ'Ô'Ð'åÐBÑCÔCÐCr   NrŒ   r   r   r   rœ   rœ   B  s|   € € € € € € Ø@Ð@à€Fà€HÐÐÐÑØ€HÐÐÐÑàðð ñ „[ðð ðDð Dñ „[ðDð Dð Dr   rœ   c                  ó`   — e Zd ZU dZdZg Zded<   g Zded<   ed„ ¦   «         Z	ed„ ¦   «         Z
dS )	ÚOrderz7``order`` option to polynomial manipulation functions. Úorderr   r   r   c                ó.   — t           j        j        j        S r   )ÚsympyÚpolysÚ	orderingsÚlexr   s    r   r   zOrder.default`  s   € åŒ{Ô$Ô(Ð(r   c                óJ   — t           j        j                             |¦  «        S r   )r§   r¨   r©   Úmonomial_key)r   r¥   s     r   r!   zOrder.preprocessd  s   € åŒ{Ô$×1Ò1°%Ñ8Ô8Ð8r   NrŒ   r   r   r   r¤   r¤   X  sw   € € € € € € ØAÐAà€Fà€HÐÐÐÑØ€HÐÐÐÑàð)ð )ñ „[ð)ð ð9ð 9ñ „[ð9ð 9ð 9r   r¤   c                  ó.   — e Zd ZU dZdZg Zded<   g d¢ZdS )ÚFieldz7``field`` option to polynomial manipulation functions. Úfieldr   r   )Údomainr–   ÚgaussianN©r&   r'   r(   r)   r   r   r*   r   r   r   r   r®   r®   i  s7   € € € € € € ØAÐAà€Fà€HÐÐÐÑØ.Ð.Ð.€H€H€Hr   r®   c                  ó.   — e Zd ZU dZdZg Zded<   g d¢ZdS )ÚGreedyz8``greedy`` option to polynomial manipulation functions. Úgreedyr   r   ©r°   r–   r±   Ú	extensionÚmodulusÚ	symmetricNr²   r   r   r   r´   r´   r  s7   € € € € € € ØBÐBà€Fà€HÐÐÐÑØSÐSÐS€H€H€Hr   r´   c                  óD   — e Zd ZU dZdZed„ ¦   «         Zg Zded<   g d¢Z	dS )Ú	Compositez;``composite`` option to polynomial manipulation functions. Ú	compositec                ó   — d S r   r   r   s    r   r   zComposite.default€  r   r   r   r   r¶   N)
r&   r'   r(   r)   r   r,   r   r   r*   r   r   r   r   r»   r»   {  sR   € € € € € € ØEÐEà€Fàðð ñ „[ðð €HÐÐÐÑØSÐSÐS€H€H€Hr   r»   c                  ó   — e Zd ZU dZdZg Zded<   g d¢ZdgZ e	j
        d¦  «        Z e	j
        d¦  «        Z e	j
        d	¦  «        Z e	j
        d
¦  «        Z e	j
        d¦  «        Z e	j
        d¦  «        Zed„ ¦   «         Zed„ ¦   «         ZdS )ÚDomainz8``domain`` option to polynomial manipulation functions. r°   r   r   )r¯   rµ   r–   r±   r·   rD   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                ój	  — t          |t          j        j        j        ¦  «        r|S t          |d¦  «        r|                     ¦   «         S t          |t          ¦  «        �rB|dv rt          j        j        j        S |dv rt          j        j        j	        S |dk    rt          j        j        j
        S |dk    rt          j        j        j        S |dk    rt          j        j        j        S | j                             |¦  «        }|�a|                     ¦   «         \  }}}|€t          j        j        j        S t          j        j                             t%          |¦  «        ¦  «        S | j                             |¦  «        }|�a|                     ¦   «         \  }}}|€t          j        j        j        S t          j        j                             t%          |¦  «        ¦  «        S | j                             |¦  «        }|�It          j        j                             t%          |                     ¦   «         d         ¦  «        ¦  «        S | j                             |¦  «        }|��|                     ¦   «         \  }}t3          t5          t6          |                     d¦  «        ¦  «        ¦  «        }|dv rt          j        j        j        j        |Ž S |dv rt          j        j        j	        j        |Ž S |d	v rt          j        j        j        j        |Ž S |dk    rt          j        j        j
        j        |Ž S |dk    rt          j        j        j        j        |Ž S t          j        j        j        j        |Ž S | j                             |¦  «        }|�Š|                     ¦   «         \  }}t3          t5          t6          |                     d¦  «        ¦  «        ¦  «        }|dv rt          j        j        j        j        |Ž S t          j        j        j	        j        |Ž S | j                              |¦  «        }|�jt3          t5          t6          |                     ¦   «         d                              d¦  «        ¦  «        ¦  «        }t          j        j        j	        j!        |Ž S tE          d
|z  ¦  «        ‚)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_polynomialra   r˜   r   r–   Ú	poly_ringÚ_re_fractionÚ
frac_fieldÚ_re_algebraicÚalgebraic_fieldr   )r   r°   ÚrÚ_ÚprecÚgroundrD   s          r   r!   zDomain.preprocess™  sâ  € å�f�eœkÔ1Ô8Ñ9Ô9ð Q	EØˆMÝ�V˜[Ñ)Ô)ð O	EØ×#Ò#Ñ%Ô%Ð%Ý˜¥Ñ$Ô$ñ M	EØ˜Ð$Ð$Ý”{Ô*Ô-Ð-à˜Ð$Ð$Ý”{Ô*Ô-Ð-à˜ÒÐÝ”{Ô*Ô/Ð/à˜ÒÐÝ”{Ô*Ô/Ð/à˜Š~ˆ~Ý”{Ô*Ô-Ð-àÔ!×'Ò'¨Ñ/Ô/ˆAàˆ}ØŸXšX™ZœZ‘
��1�dà�<Ý œ;Ô.Ô1Ð1å œ;Ô.×8Ò8½¸T¹¼ÑCÔCÐCàÔ$×*Ò*¨6Ñ2Ô2ˆAàˆ}ØŸXšX™ZœZ‘
��1�dà�<Ý œ;Ô.Ô1Ð1å œ;Ô.×;Ò;½CÀ¹I¼IÑFÔFÐFàÔ#×)Ò)¨&Ñ1Ô1ˆAàˆ}Ý”{Ô*×-Ò-­c°!·(²(±*´*¸Q´-Ñ.@Ô.@ÑAÔAÐAàÔ"×(Ò(¨Ñ0Ô0ˆAà‰}Ø Ÿxšx™zœz‘�˜å�C¥¨¯ª°C©¬Ñ9Ô9Ñ:Ô:�à˜[Ð(Ð(Ý œ;Ô.Ô1Ô;¸TÐBÐBØ˜{Ð*Ð*Ý œ;Ô.Ô1Ô;¸TÐBÐBØ˜{Ð*Ð*Ý œ;Ô.Ô1Ô;¸TÐBÐBØ˜vÒ%Ð%Ý œ;Ô.Ô3Ô=¸tÐDÐDØ˜vÒ%Ð%Ý œ;Ô.Ô3Ô=¸tÐDÐDå œ;Ô.Ô1Ô;¸TÐBÐBàÔ ×&Ò& vÑ.Ô.ˆAàˆ}Ø Ÿxšx™zœz‘�˜å�C¥¨¯ª°C©¬Ñ9Ô9Ñ:Ô:�à˜[Ð(Ð(Ý œ;Ô.Ô1Ô<¸dÐCÐCå œ;Ô.Ô1Ô<¸dÐCÐCàÔ!×'Ò'¨Ñ/Ô/ˆAàˆ}Ý�C¥¨¯ª©¬°A¬×)<Ò)<¸SÑ)AÔ)AÑBÔBÑCÔC�Ý”{Ô*Ô-Ô=¸tÐDÐDåÐIÈFÑRÑSÔSÐSr   c                ó4  — d|v rPd|v rL|d         j         r?t          |d         j        ¦  «        t          |d         ¦  «        z  rt          d¦  «        ‚d|vs|d         s5d|v r/|d         t          j        j        j        k    rt          d¦  «        ‚d S d S d S )NrD   r°   z/ground domain and generators interfere togetherz>you have to provide generators because EX domain was requested)Úis_Compositer^   Úsymbolsr   r§   r¨   rË   rÈ   r#   s     r   r%   zDomain.postprocessð  sÀ   € à�WÐÐ ¨WÐ!4Ð!4¸ÀÔ9JÔ9WÐ!4Ý�W˜XÔ&Ô.Ñ/Ô/µ#°g¸f´oÑ2FÔ2FÑFð "5å!ØAñCô Cð Cà˜GÐ#Ð#¨7°6¬?Ð#Ø˜GÐ#Ð#¨°Ô(9½U¼[Ô=PÔ=SÒ(SÐ(SÝ!Ð"bÑcÔcÐcð $Ð#ð $Ð#Ø(SÐ(Sr   N)r&   r'   r(   r)   r   r   r*   r   r   r™   rš   rÌ   rÑ   rÔ   rÖ   rØ   rÚ   r,   r!   r%   r   r   r   r¿   r¿   ˆ  sñ   € € € € € € ØBÐBà€Fà€HÐÐÐÑØDÐDÐD€HàˆH€Eà�B”JÐ3Ñ4Ô4€MØ!�r”zÐ"6Ñ7Ô7ÐØ �b”jÐ!6Ñ7Ô7€OØ�R”ZÐ LÑMÔM€NØ�2”:Ð6Ñ7Ô7€LØ�B”JÐ2Ñ3Ô3€MàðTTð TTñ „[ðTTðl ðdð dñ „[ðdð dð dr   r¿   c                  óD   — e Zd ZU dZdZg Zded<   g d¢Zed„ ¦   «         Z	dS )ÚSplitz7``split`` option to polynomial manipulation functions. r–   r   r   )r¯   rµ   r°   r±   r·   r¸   r¹   c                ó,   — d|v rt          d¦  «        ‚d S )Nr–   z%'split' option is not implemented yet)ÚNotImplementedErrorr#   s     r   r%   zSplit.postprocess  s$   € à�gÐÐÝ%Ð&MÑNÔNÐNð Ðr   N©
r&   r'   r(   r)   r   r   r*   r   r,   r%   r   r   r   rä   rä   û  sc   € € € € € € ØAÐAà€Fà€HÐÐÐÑð ð  ð  €Hð ðOð Oñ „[ðOð Oð Or   rä   c                  óD   — e Zd ZU dZdZg Zded<   g d¢Zed„ ¦   «         Z	dS )ÚGaussianz:``gaussian`` option to polynomial manipulation functions. r±   r   r   )r¯   rµ   r°   r–   r·   r¸   r¹   c                ó�   — d|v r?|d         du r7t           j        j        j        |d<   t                               |¦  «         d S d S d S )Nr±   Tr°   )r§   r¨   rË   rÇ   Ú	Extensionr%   r#   s     r   r%   zGaussian.postprocess  sV   € à˜Ð Ð  W¨ZÔ%8¸DÐ%@Ð%@Ý %¤Ô 3Ô 8ˆG�HÑÝ×!Ò! 'Ñ*Ô*Ð*Ð*Ð*ð !Ð Ð%@Ð%@r   Nrç   r   r   r   ré   ré   
  s^   € € € € € € ØDÐDà€Fà€HÐÐÐÑð ð  ð  €Hð ð+ð +ñ „[ð+ð +ð +r   ré   c                  óZ   — e Zd ZU dZdZg Zded<   g d¢Zed„ ¦   «         Z	ed„ ¦   «         Z
dS )	rë   z;``extension`` option to polynomial manipulation functions. r·   r   r   )rµ   r°   r–   r±   r¸   r¹   c                óª   — |dk    rt          |¦  «        S |dk    rt          d¦  «        ‚t          |d¦  «        s|h}n|sd }nt          |¦  «        }|S )Nr‚   r   z.'False' is an invalid argument for 'extension'Ú__iter__)r3   r   r—   r^   )r   r·   s     r   r!   zExtension.preprocess#  sj   € à˜Š>ˆ>Ý˜	‘?”?Ð"Ø˜!Š^ˆ^ÝÐNÑOÔOÐOå˜9 jÑ1Ô1ð /Ø&˜K�	�	à ð /Ø $�I�Iå # I¡¤�IàÐr   c                óv   — d|v r2|d         dur*t          j        j        j        j        |d         Ž |d<   d S d S d S )Nr·   Tr°   )r§   r¨   rË   rÅ   rÛ   r#   s     r   r%   zExtension.postprocess4  sR   € à˜'Ð!Ð! g¨kÔ&:À$Ð&FÐ&FÝ %¤Ô 3Ô 6Ô FØ˜Ô%ð!'ˆG�HÑÐÐð "Ð!Ð&FÐ&Fr   N©r&   r'   r(   r)   r   r   r*   r   r,   r!   r%   r   r   r   rë   rë     sy   € € € € € € ØEÐEà€Fà€HÐÐÐÑðð ð €Hð ðð ñ „[ðð  ð'ð 'ñ „[ð'ð 'ð 'r   rë   c                  óZ   — e Zd ZU dZdZg Zded<   g d¢Zed„ ¦   «         Z	ed„ ¦   «         Z
dS )	ÚModulusz9``modulus`` option to polynomial manipulation functions. r¸   r   r   )rµ   r–   r°   r±   r·   c                ó|   — t          |¦  «        }|j        r|dk    rt          |¦  «        S t          d|z  ¦  «        ‚)Nr   z)'modulus' must a positive integer, got %s)r   Ú
is_IntegerrÐ   r   )r   r¸   s     r   r!   zModulus.preprocessC  sL   € å˜'Ñ"Ô"ˆàÔð 	G '¨A¢+ +Ý�w‘<”<ÐåØ;¸gÑEñGô Gð Gr   c                óž   — d|v rH|d         }|                      dd¦  «        }t          j        j                             ||¦  «        |d<   d S d S )Nr¸   r¹   Tr°   )rO   r§   r¨   rË   rÕ   )r   r$   r¸   r¹   s       r   r%   zModulus.postprocessM  sW   € à˜ÐÐØ˜iÔ(ˆGØŸš K°Ñ6Ô6ˆIÝ %¤Ô 3× 6Ò 6°wÀ	Ñ JÔ JˆG�HÑÐÐð  Ðr   Nrð   r   r   r   rò   rò   ;  sy   € € € € € € ØCÐCà€Fà€HÐÐÐÑØEÐEÐE€HàðGð Gñ „[ðGð ðKð Kñ „[ðKð Kð Kr   rò   c                  ó$   — e Zd ZdZdZdgZg d¢ZdS )Ú	Symmetricz;``symmetric`` option to polynomial manipulation functions. r¹   r¸   )rµ   r°   r–   r±   r·   N)r&   r'   r(   r)   r   r   r   r   r   r   r÷   r÷   U  s+   € € € € € ØEÐEà€Fàˆ{€HØEÐEÐE€H€H€Hr   r÷   c                  ó,   — e Zd ZdZdZed„ ¦   «         ZdS )ÚStrictz8``strict`` option to polynomial manipulation functions. rL   c                ó   — dS r|   r   r   s    r   r   zStrict.defaultc  r   r   N©r&   r'   r(   r)   r   r,   r   r   r   r   rù   rù   ^  s8   € € € € € ØBÐBà€Fàðð ñ „[ðð ð r   rù   c                  óJ   — e Zd ZdZdZg d¢Zed„ ¦   «         Zed„ ¦   «         ZdS )ÚAutoz4``auto`` flag to polynomial manipulation functions. Úauto)r¯   r°   r·   r±   c                ó   — dS r|   r   r   s    r   r   zAuto.defaulto  r   r   c                ó0   — d|v sd|v rd|vrd|d<   d S d S d S )Nr°   r¯   rþ   Fr   r#   s     r   r%   zAuto.postprocesss  s=   € à˜ÐÐ 7¨gÐ#5Ð#5¸6ÈÐ;PÐ;PØ#ˆG�F‰OˆOˆOð <QÐ;PÐ#5Ð#5r   N)	r&   r'   r(   r)   r   r   r,   r   r%   r   r   r   rý   rý   h  s^   € € € € € Ø>Ð>à€Fà8Ð8Ð8€Eàðð ñ „[ðð ð$ð $ñ „[ð$ð $ð $r   rý   c                  ó,   — e Zd ZdZdZed„ ¦   «         ZdS )ÚFracz6``auto`` option to polynomial manipulation functions. Úfracc                ó   — dS rv   r   r   s    r   r   zFrac.default~  ó   € àˆur   Nrû   r   r   r   r  r  y  s8   € € € € € Ø@Ð@à€Fàðð ñ „[ðð ð r   r  c                  ó,   — e Zd ZdZdZed„ ¦   «         ZdS )ÚFormalz6``formal`` flag to polynomial manipulation functions. Úformalc                ó   — dS rv   r   r   s    r   r   zFormal.defaultˆ  r  r   Nrû   r   r   r   r  r  ƒ  ó8   € € € € € Ø@Ð@à€Fàðð ñ „[ðð ð r   r  c                  ó   — e Zd ZdZdZdS )ÚPolysz5``polys`` flag to polynomial manipulation functions. r¨   N)r&   r'   r(   r)   r   r   r   r   r  r  �  s   € € € € € Ø?Ð?à€F€F€Fr   r  c                  ó,   — e Zd ZdZdZed„ ¦   «         ZdS )ÚIncludez7``include`` flag to polynomial manipulation functions. Úincludec                ó   — dS rv   r   r   s    r   r   zInclude.default˜  r  r   Nrû   r   r   r   r  r  “  s8   € € € € € ØAÐAà€Fàðð ñ „[ðð ð r   r  c                  ó,   — e Zd ZdZdZed„ ¦   «         ZdS )ÚAllz3``all`` flag to polynomial manipulation functions. Úallc                ó   — dS rv   r   r   s    r   r   zAll.default¢  r  r   Nrû   r   r   r   r  r  �  s8   € € € € € Ø=Ð=à€Fàðð ñ „[ðð ð r   r  c                  óB   — e Zd ZdZdZed„ ¦   «         Zed„ ¦   «         ZdS )ÚGenz3``gen`` flag to polynomial manipulation functions. r†   c                ó   — dS )Nr   r   r   s    r   r   zGen.default¬  s   € àˆqr   c                ó\   — t          |t          t          f¦  «        r|S t          d¦  «        ‚)Nz!invalid argument for 'gen' option)r‡   r   rÐ   r   )r   r†   s     r   r!   zGen.preprocess°  s-   € å�c�E¥3˜<Ñ(Ô(ð 	CØˆJåÐAÑBÔBÐBr   N©r&   r'   r(   r)   r   r,   r   r!   r   r   r   r  r  §  sX   € € € € € Ø=Ð=à€Fàðð ñ „[ðð ðCð Cñ „[ðCð Cð Cr   r  c                  ó,   — e Zd ZdZdZed„ ¦   «         ZdS )ÚSeriesz6``series`` flag to polynomial manipulation functions. Úseriesc                ó   — dS rv   r   r   s    r   r   zSeries.default½  r  r   Nrû   r   r   r   r  r  ¸  r
  r   r  c                  óB   — e Zd ZdZdZed„ ¦   «         Zed„ ¦   «         ZdS )ÚSymbolsz7``symbols`` flag to polynomial manipulation functions. râ   c                ó$   — t          dd¬¦  «        S )NÚsr‚   )Ústart)r
   r   s    r   r   zSymbols.defaultÇ  s   € å ¨1Ð-Ñ-Ô-Ð-r   c                ód   — t          |d¦  «        rt          |¦  «        S t          d|z  ¦  «        ‚)Nrî   z2expected an iterator or iterable container, got %s)r—   Úiterr   )r   râ   s     r   r!   zSymbols.preprocessË  s6   € å�7˜JÑ'Ô'ð 	^Ý˜‘=”=Ð åÐRÐU\Ñ\Ñ]Ô]Ð]r   Nr  r   r   r   r  r  Â  sX   € € € € € ØAÐAà€Fàð.ð .ñ „[ð.ð ð^ð ^ñ „[ð^ð ^ð ^r   r  c                  ó,   — e Zd ZdZdZed„ ¦   «         ZdS )ÚMethodz6``method`` flag to polynomial manipulation functions. Úmethodc                óx   — t          |t          ¦  «        r|                     ¦   «         S t          d|z  ¦  «        ‚)Nzexpected a string, got %s)r‡   r‰   Úlowerr   )r   r'  s     r   r!   zMethod.preprocessØ  s7   € å�f�cÑ"Ô"ð 	DØ—<’<‘>”>Ð!åÐ9¸FÑBÑCÔCÐCr   N)r&   r'   r(   r)   r   r,   r!   r   r   r   r&  r&  Ó  s=   € € € € € Ø@Ð@à€FàðDð Dñ „[ðDð Dð Dr   r&  c                óp   — |€d| }} t          |¦  «        dk    sd|vs| rt          | |¦  «        S |d         S )z9Construct options from keyword arguments or ... options. Nr   r‚   Úopt)rˆ   r   )rD   r?   s     r   Úbuild_optionsr,  à  sH   € à€|Ø˜ˆdˆå
ˆ4�y„y�A‚~€~˜ dÐ*Ð*¨dÐ*Ý�t˜TÑ"Ô"Ð"à�EŒ{Ðr   c                óî   — t          |¦  «        }|                      ¦   «         D ]P}	 t          j        |         j        r||vrt          d|z  ¦  «        ‚Œ1# t          $ r t          d|z  ¦  «        ‚w xY wdS )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'])

    rH   rG   N)r^   rQ   r   r>   r+   r	   r9   r   )r?   rK   Úargs      r   Úallowed_flagsr/  ë  s©   € õ( �‰JŒJ€Eà�yŠy‰{Œ{ð Bð Bˆð	BÝÔ" 3Ô'Ô/ð F°C¸uÐ4DÐ4DÝØ>ÀÑDñFô Fð Føøåð 	Bð 	Bð 	BÝÐ:¸SÑ@ÑAÔAÐAð	BøøøðBð Bs   §-AÁA2c                ó6   — d| vrt          | ¦  «        } || d<   | S )z$Update options with default values. rE   )rN   )r$   rE   s     r   Úset_defaultsr1  
  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   r.   r0   Útyper6   rN   r   ry   r   rŽ   rœ   r¤   r®   r´   r»   r¿   rä   ré   rë   rò   r÷   rù   rý   r  r  r  r  r  r  r  r  r&  r,  r/  r1  rf   r   r   r   ú<module>r:     s&  ðØ DÐ Dà "Ð "Ð "Ð "Ð "Ð "àˆ+€à %Ð %Ð %Ð %Ð %Ð %Ð %Ð %Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JØ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;à Ð Ð Ð à 	€	€	€	ðð ð ð ð ñ ô ð ð4ð ð ð ð ˆ6ñ ô ð ðgð gð gð gð g�Fñ gô gð gð.ð .ð .ð .ð .�ñ .ô .ð .ð ðoð oð oð oð oˆdñ oô oñ „ðoðd
ð 
ð 
ð 
ð 
ˆ] jð 
ñ 
ô 
ð 
ðð ð ð ð ˆ6˜Zð ñ ô ð ð:Cð Cð Cð Cð Cˆ&˜Jð Cñ Cô Cð Cð6Dð Dð Dð Dð Dˆ6˜Zð Dñ Dô Dð Dð,9ð 9ð 9ð 9ð 9ˆF˜jð 9ñ 9ô 9ð 9ð"/ð /ð /ð /ð /ˆM Zð /ñ /ô /ð /ðTð Tð Tð Tð Tˆ] jð Tñ Tô Tð Tð
Tð 
Tð 
Tð 
Tð 
T�¨ð 
Tñ 
Tô 
Tð 
Tðpdð pdð pdð pdð pdˆV˜zð pdñ pdô pdð pdðfOð Oð Oð Oð OˆM Zð Oñ Oô Oð Oð+ð +ð +ð +ð +ˆ}¨
ð +ñ +ô +ð +ð 'ð 'ð 'ð 'ð '� *ð 'ñ 'ô 'ð 'ðBKð Kð Kð Kð Kˆf 
ð Kñ Kô Kð Kð4Fð Fð Fð Fð F�¨ð Fñ Fô Fð Fðð ð ð ð ˆ] jð ñ ô ð ð$ð $ð $ð $ð $ˆ=˜$¨*ð $ñ $ô $ð $ð"ð ð ð ð ˆ=˜$¨*ð ñ ô ð ðð ð ð ð ˆ]˜D¨Jð ñ ô ð ðð ð ð ð ˆM˜4¨:ð ñ ô ð ðð ð ð ð ˆm˜T¨Zð ñ ô ð ðð ð ð ð ˆ-˜¨ð ñ ô ð ðCð Cð Cð Cð Cˆ$˜*ð Cñ Cô Cð Cð"ð ð ð ð ˆ]˜D¨Jð ñ ô ð ð^ð ^ð ^ð ^ð ^ˆd˜jð ^ñ ^ô ^ð ^ð"
Dð 
Dð 
Dð 
Dð 
DˆT˜Zð 
Dñ 
Dô 
Dð 
Dðð ð ð ðBð Bð Bð>ð ð ð ×  Ò  Ñ "Ô "Ð "Ð "Ð "r   