§
    1@Äj›'  ã                   ó   — d Z ddlZddlZddlZddlmZ ddlmZ  G d„ d¦  «        Z G d„ dej	        d	¬
¦  «        Z
 G d„ d¦  «        Z G d„ de¦  «        Z G d„ d¦  «        Z e¦   «         Z G d„ de¬¦  «        ZdS )z[
This module contains utils for manipulating target configurations such as
compiler flags.
é    N)ÚMappingProxyType)Úutilsc                   ó^   — e Zd ZdZdZd„ Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Z	dS )ÚOptionz.An option to be used in ``TargetConfig``.
    ©Ú_typeÚ_defaultÚ_docc                ó0   — || _         || _        || _        dS )a-  
        Parameters
        ----------
        type :
            Type of the option value. It can be a callable.
            The setter always calls ``self._type(value)``.
        default :
            The default value for the option.
        doc : str
            Docstring for the option.
        Nr   )ÚselfÚtypeÚdefaultÚdocs       úHC:\Projects\Historical\venv\Lib\site-packages\numba/core/targetconfig.pyÚ__init__zOption.__init__   s   € ð ˆŒ
ØˆŒØˆŒ	ˆ	ˆ	ó    c                 ó   — | j         S ©N)r   ©r   s    r   r   zOption.type"   s
   € àŒzÐr   c                 ó   — | j         S r   )r	   r   s    r   r   zOption.default&   s
   € àŒ}Ðr   c                 ó   — | j         S r   )r
   r   s    r   r   z
Option.doc*   s
   € àŒyÐr   N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r   Úpropertyr   r   r   © r   r   r   r      sƒ   € € € € € ðð à+€Iðð ð ð  ðð ñ „Xðð ðð ñ „Xðð ðð ñ „Xðð ð r   r   c                   ó   — e Zd ZdS )Ú_FlagsStackN)r   r   r   r   r   r   r    r    /   s   € € € € € Ø€Dr   r    Úflags)Ú
stack_namec                   ó@   — e Zd ZdZed„ ¦   «         Zd„ Zd„ Zd„ Zd„ Z	dS )ÚConfigStackzºA stack for tracking target configurations in the compiler.

    It stores the stack in a thread-local class attribute. All instances in the
    same thread will see the same stack.
    c                 óL   —  | ¦   «         }|r|                      ¦   «         }nd}|S )z8Get the TOS or return None if no config is set.
        N)Útop)Úclsr   r!   s      r   Útop_or_nonezConfigStack.top_or_none9   s2   € ð ˆs‰uŒuˆØð 	Ø—H’H‘J”JˆEˆEð ˆEØˆr   c                 ó,   — t          ¦   «         | _        d S r   )r    Ú_stkr   s    r   r   zConfigStack.__init__E   s   € Ý‘M”MˆŒ	ˆ	ˆ	r   c                 ó4   — | j                              ¦   «         S r   )r*   r&   r   s    r   r&   zConfigStack.topH   s   € ØŒy�}Š}‰ŒÐr   c                 ó*   — t          | j        ¦  «        S r   )Úlenr*   r   s    r   Ú__len__zConfigStack.__len__K   s   € Ý�4”9‰~Œ~Ðr   c                 ó6   — | j                              |¦  «        S )zgReturns a contextmanager that performs ``push(flags)`` on enter and
        ``pop()`` on exit.
        )r*   Úenter)r   r!   s     r   r0   zConfigStack.enterN   s   € ð Œy�Š˜uÑ%Ô%Ð%r   N)
r   r   r   r   Úclassmethodr(   r   r&   r.   r0   r   r   r   r$   r$   3   su   € € € € € ðð ð
 ð	ð 	ñ „[ð	ð"ð "ð "ðð ð ðð ð ð&ð &ð &ð &ð &r   r$   c                   ó   — e Zd ZdZd„ Zd„ ZdS )Ú_MetaTargetConfigzÚMetaclass for ``TargetConfig``.

    When a subclass of ``TargetConfig`` is created, all ``Option`` defined
    as class members will be parsed and corresponding getters, setters, and
    delters will be inserted.
    c           	      óT  — i }t          |¦  «        D ]}|                     |j        ¦  «         Œ|                     |                      |¦  «        ¦  «         t	          |¦  «        | _        d„ }| j                             ¦   «         D ] \  }}t          | | |||¦  «        ¦  «         Œ!dS )zÊInvoked when subclass is created.

        Insert properties for each ``Option`` that are class members.
        All the options will be grouped inside the ``.options`` class
        attribute.
        c                 óV   ‡ ‡— ˆ ˆfd„}ˆ ˆfd„}ˆ fd„}t          |||‰j        ¦  «        S )Nc                 óD   •— | j                              ‰‰j        ¦  «        S r   )Ú_valuesÚgetr   )r   ÚnameÚoptions    €€r   Úgetterz=_MetaTargetConfig.__init__.<locals>.make_prop.<locals>.gettero   s   ø€ Ø”|×'Ò'¨¨f¬nÑ=Ô=Ð=r   c                 óB   •— ‰                      |¦  «        | j        ‰<   d S r   )r   r7   )r   Úvalr9   r:   s     €€r   Úsetterz=_MetaTargetConfig.__init__.<locals>.make_prop.<locals>.setterr   s!   ø€ Ø%+§[¢[°Ñ%5Ô%5�”˜TÑ"Ð"Ð"r   c                 ó   •— | j         ‰= d S r   )r7   ©r   r9   s    €r   Údelterz=_MetaTargetConfig.__init__.<locals>.make_prop.<locals>.delteru   s   ø€ Ø”L Ð&Ð&Ð&r   )r   r   )r9   r:   r;   r>   rA   s   ``   r   Ú	make_propz-_MetaTargetConfig.__init__.<locals>.make_propn   sq   øø€ ð>ð >ð >ð >ð >ð >ð6ð 6ð 6ð 6ð 6ð 6ð'ð 'ð 'ð 'ð 'õ ˜F F¨F°F´JÑ?Ô?Ð?r   N)ÚreversedÚupdateÚoptionsÚfind_optionsr   ÚitemsÚsetattr)r'   r9   ÚbasesÚdctÚoptsÚbase_clsrB   r:   s           r   r   z_MetaTargetConfig.__init__\   sÇ   € ð ˆõ ! ™œð 	*ð 	*ˆHØ�KŠK˜Ô(Ñ)Ô)Ð)Ð)Ø�Š�C×$Ò$ SÑ)Ô)Ñ*Ô*Ð*å& tÑ,Ô,ˆŒð
	@ð 
	@ð 
	@ð  œK×-Ò-Ñ/Ô/ð 	8ð 	8‰LˆD�&Ý�C˜˜y˜y¨¨vÑ6Ô6Ñ7Ô7Ð7Ð7ð	8ð 	8r   c                 ó>   — d„ |                      ¦   «         D ¦   «         S )z[Returns a new dict with all the items that are a mapping to an
        ``Option``.
        c                 óD   — i | ]\  }}t          |t          ¦  «        ¯||“ŒS r   )Ú
isinstancer   ©Ú.0ÚkÚvs      r   ú
<dictcomp>z2_MetaTargetConfig.find_options.<locals>.<dictcomp>�   s-   € ÐFÐFÐF™˜˜Aµ
¸1½fÑ0EÔ0EÐF��1ÐFÐFÐFr   )rG   )r'   rJ   s     r   rF   z_MetaTargetConfig.find_options}   s!   € ð GÐF §¢¡¤ÐFÑFÔFÐFr   N)r   r   r   r   r   rF   r   r   r   r3   r3   U   sB   € € € € € ðð ð8ð 8ð 8ðBGð Gð Gð Gð Gr   r3   c                   ó   — e Zd Zd„ ZdS )Ú_NotSetTypec                 ó   — dS )Nz<NotSet>r   r   s    r   Ú__repr__z_NotSetType.__repr__…   s   € Øˆzr   N)r   r   r   rX   r   r   r   rV   rV   „   s#   € € € € € ðð ð ð ð r   rV   c                   ó¼   — e Zd ZdZdgZddiZdd„Zd„ Zd„ Zd	„ Z	d
„ Z
d„ Zd„ Zefd„Zd„ Zdefd„Zd„ Zd„ Zedefd„¦   «         Zdefd„Zededefd„¦   «         ZdS )ÚTargetConfigaÿ  Base class for ``TargetConfig``.

    Subclass should fill class members with ``Option``. For example:

    >>> class MyTargetConfig(TargetConfig):
    >>>     a_bool_option = Option(type=bool, default=False, doc="a bool")
    >>>     an_int_option = Option(type=int, default=0, doc="an int")

    The metaclass will insert properties for each ``Option``. For example:

    >>> tc = MyTargetConfig()
    >>> tc.a_bool_option = True  # invokes the setter
    >>> print(tc.an_int_option)  # print the default
    r7   ÚwbitsiñÿÿÿNc                 óˆ   — i | _         |�8t          |t          ¦  «        sJ ‚| j                              |j         ¦  «         dS dS )z·
        Parameters
        ----------
        copy_from : TargetConfig or None
            if None, creates an empty ``TargetConfig``.
            Otherwise, creates a copy.
        N)r7   rO   rZ   rD   )r   Ú	copy_froms     r   r   zTargetConfig.__init__¡   sN   € ð ˆŒØÐ Ý˜i­Ñ6Ô6Ð6Ð6Ð6ØŒL×Ò 	Ô 1Ñ2Ô2Ð2Ð2Ð2ð !Ð r   c                 óB  — g }g }| j         D ]W}|› dt          | |¦  «        › �}|                      |¦  «        s|                     |¦  «         ŒB|                     |¦  «         ŒX| j        j        }|› dd                     |¦  «        › dd                     |¦  «        › d�S )Nú=ú(ú, z, [z]))rE   ÚgetattrÚis_setÚappendÚ	__class__r   Újoin)r   ÚargsÚdefsrR   ÚmsgÚclsnames         r   rX   zTargetConfig.__repr__®   sµ   € ð ˆØˆØ”ð 	!ð 	!ˆAØÐ+Ð+�  qÑ)Ô)Ð+Ð+ˆCØ—;’;˜q‘>”>ð !Ø—’˜CÑ Ô Ð Ð à—’˜CÑ Ô Ð Ð Ø”.Ô)ˆØÐCÐC˜DŸIšI d™OœOÐCÐC°·	²	¸$±´ÐCÐCÐCÐCr   c                 óx   — t          t          t          |                      ¦   «         ¦  «        ¦  «        ¦  «        S r   )ÚhashÚtupleÚsortedÚvaluesr   s    r   Ú__hash__zTargetConfig.__hash__¼   s(   € Ý•E�& §¢¡¤Ñ/Ô/Ñ0Ô0Ñ1Ô1Ð1r   c                 óŽ   — t          |t          ¦  «        r*|                      ¦   «         |                     ¦   «         k    S t          S r   )rO   rZ   ro   ÚNotImplemented)r   Úothers     r   Ú__eq__zTargetConfig.__eq__¿   s5   € Ý�e�\Ñ*Ô*ð 	"Ø—;’;‘=”= E§L¢L¡N¤NÒ2Ð2å!Ð!r   c                 ó*   ‡ — ˆ fd„‰ j         D ¦   «         S )z)Returns a dict of all the values
        c                 ó2   •— i | ]}|t          ‰|¦  «        “ŒS r   )rb   )rQ   rR   r   s     €r   rT   z'TargetConfig.values.<locals>.<dictcomp>È   s%   ø€ Ð:Ð:Ð:¨�•7˜4 Ñ#Ô#Ð:Ð:Ð:r   )rE   r   s   `r   ro   zTargetConfig.valuesÅ   s!   ø€ ð ;Ð:Ð:Ð:¨T¬\Ð:Ñ:Ô:Ð:r   c                 ó>   — |                       |¦  «         || j        v S )zIs the option set?
        )Ú_guard_optionr7   r@   s     r   rc   zTargetConfig.is_setÊ   s%   € ð 	×Ò˜4Ñ Ô Ð Ø�t”|Ð#Ð#r   c                 óf   — |                       |¦  «         | j                             |d¦  «         dS )z„Remove the option by name if it is defined.

        After this, the value for the option will be set to its default value.
        N)rx   r7   Úpopr@   s     r   ÚdiscardzTargetConfig.discardÐ   s6   € ð
 	×Ò˜4Ñ Ô Ð ØŒ×Ò˜˜tÑ$Ô$Ð$Ð$Ð$r   c                 ó   — |                       |¦  «         |                      |¦  «        sat          ¦   «         }|r5|                     ¦   «         }t	          | |t          ||¦  «        ¦  «         dS |t          urt	          | ||¦  «         dS dS dS )aL  Inherit flag from ``ConfigStack``.

        Parameters
        ----------
        name : str
            Option name.
        default : optional
            When given, it overrides the default value.
            It is only used when the flag is not defined locally and there is
            no entry in the ``ConfigStack``.
        N)rx   rc   r$   r&   rH   rb   Ú_NotSet)r   r9   r   Úcstkr&   s        r   Úinherit_if_not_setzTargetConfig.inherit_if_not_setØ   s¡   € ð 	×Ò˜4Ñ Ô Ð Ø�{Š{˜4Ñ Ô ð 	-Ý‘=”=ˆDØð -à—h’h‘j”j�Ý˜˜d¥G¨C°Ñ$6Ô$6Ñ7Ô7Ð7Ð7Ð7Ø¥Ð'Ð'Ý˜˜d GÑ,Ô,Ð,Ð,Ð,ð	-ð 	-ð (Ð'r   c                 ó2   —  t          | ¦  «        | ¦  «        S )zClone this instance.
        )r   r   s    r   ÚcopyzTargetConfig.copyî   s   € ð �t�D‰zŒz˜$ÑÔÐr   Úreturnc                 óŒ   — d„ |                       ¦   «         D ¦   «         }| j        j        }|› dd                     |¦  «        › d�S )z›Returns a ``str`` that summarizes this instance.

        In contrast to ``__repr__``, only options that are explicitly set will
        be shown.
        c                 ó"   — g | ]\  }}|› d |› �‘ŒS )r_   r   rP   s      r   ú
<listcomp>z(TargetConfig.summary.<locals>.<listcomp>ù   s&   € Ð<Ð<Ð<™t˜q !�1�
�
�q�
�
Ð<Ð<Ð<r   r`   ra   ú))Ú_summary_argsre   r   rf   )r   rg   rj   s      r   ÚsummaryzTargetConfig.summaryó   sN   € ð =Ð< t×'9Ò'9Ñ';Ô';Ð<Ñ<Ô<ˆØ”.Ô)ˆØÐ.Ð.˜DŸIšI d™OœOÐ.Ð.Ð.Ð.r   c                 ó^   — || j         vr#|›dt          | ¦  «        › �}t          |¦  «        ‚d S )Nz is not a valid option for )rE   r   Ú
ValueError)r   r9   ri   s      r   rx   zTargetConfig._guard_optioný   s<   € Ø�t”|Ð#Ð#ØÐDÐD½¸T¹
¼
ÐDÐDˆCÝ˜S‘/”/Ð!ð $Ð#r   c                 óä   — g }t          | j        ¦  «        D ]X}| j        |         }|                      |¦  «        r4t          | |¦  «        }|j        |k    r||f}|                     |¦  «         ŒY|S )z˜returns a sorted sequence of 2-tuple containing the
        ``(flag_name, flag_value)`` for flag that are set with a non-default
        value.
        )rn   rE   rc   rb   r   rd   )r   rg   rR   ÚoptÚflagvalrS   s         r   r‡   zTargetConfig._summary_args  sy   € ð
 ˆÝ˜œÑ%Ô%ð 	#ð 	#ˆAØ”,˜q”/ˆCØ�{Š{˜1‰~Œ~ð #Ý! $¨Ñ*Ô*�Ø”; 'Ò)Ð)Ø˜G˜�AØ—K’K ‘N”N�NøØˆr   c                 ó   — g }|                      d¦  «         |                      | j        j        ¦  «         |                     ddg¦  «         | j                             ¦   «         D ]A\  }}|                      |¦  «         |                      t          |j        ¦  «        ¦  «         ŒBd                     |¦  «         	                    ¦   «         S )z]Returns a ``bytes`` object suitable for use as a dictionary for
        compression.
        ÚnumbaÚTrueÚFalseÚ )
rd   re   r   ÚextendrE   rG   Ústrr   rf   Úencode)r'   ÚbufrR   rŒ   s       r   Ú_make_compression_dictionaryz)TargetConfig._make_compression_dictionary  s´   € ð
 ˆà�
Š
�7ÑÔÐà�
Š
�3”=Ô)Ñ*Ô*Ð*à�
Š
�F˜GÐ$Ñ%Ô%Ð%à”k×'Ò'Ñ)Ô)ð 	)ð 	)‰FˆAˆsØ�JŠJ�q‰MŒMˆMØ�JŠJ•s˜3œ;Ñ'Ô'Ñ(Ô(Ð(Ð(Ø�wŠw�s‰|Œ|×"Ò"Ñ$Ô$Ð$r   c                 ó¤  — |                       ¦   «         }t          j        d|t          j        dœ| j        ¤Ž}|                     |                      ¦   «                              ¦   «         ¦  «        g}|                     | 	                    ¦   «         ¦  «         t          j        d                     |¦  «        ¦  «                             ¦   «         S )z6Return a string suitable for symbol mangling.
        )ÚzdictÚlevelr   r   )r—   ÚzlibÚcompressobjÚZ_BEST_COMPRESSIONÚ_ZLIB_CONFIGÚcompressrˆ   r•   rd   ÚflushÚbase64Ú	b64encoderf   Údecode)r   r™   Úcompr–   s       r   Úget_mangle_stringzTargetConfig.get_mangle_string#  s®   € ð ×1Ò1Ñ3Ô3ˆåÔð 5 eµ4Ô3Jð 5ð 5Ø"&Ô"3ð5ð 5ˆð �}Š}˜TŸ\š\™^œ^×2Ò2Ñ4Ô4Ñ5Ô5Ð6ˆØ�
Š
�4—:’:‘<”<Ñ Ô Ð ÝÔ §¢¨¡¤Ñ.Ô.×5Ò5Ñ7Ô7Ð7r   Úmangledc                 óº  — d„ }t          j        d||¦  «        }t          j        |¦  «        }|                      ¦   «         }t          j        dd|i| j        ¤Ž}g }|r1|                     | 	                    |¦  «        ¦  «         |j
        }|°1|                     |                     ¦   «         ¦  «         d                     |¦  «                             ¦   «         S )zCReturns the demangled result from ``.get_mangle_string()``
        c                 óx   — t          t          d|                      d¦  «        dd …         z   d¦  «        ¦  «        S )NÚ0xr   é   é   )ÚchrÚintÚgroup)Úxs    r   Úreplz#TargetConfig.demangle.<locals>.repl5  s1   € Ý•s˜4 !§'¢'¨!¡*¤*¨Q¨R¨R¤.Ñ0°"Ñ5Ô5Ñ6Ô6Ð6r   z_[a-zA-Z0-9][a-zA-Z0-9]r™   r   r   )ÚreÚsubr¡   Ú	b64decoder—   r›   Údecompressobjrž   rd   Ú
decompressÚunconsumed_tailr    rf   r£   )r'   r¦   r°   Ú	unescapedÚrawr™   Údcr–   s           r   ÚdemanglezTargetConfig.demangle0  sÙ   € ð
	7ð 	7ð 	7å”FÐ5°t¸WÑEÔEˆ	åÔ˜yÑ)Ô)ˆà×0Ò0Ñ2Ô2ˆÝÔÐ@Ð@ eÐ@¨sÔ/?Ð@Ð@ˆØˆØð 	%Ø�JŠJ�r—}’} SÑ)Ô)Ñ*Ô*Ð*ØÔ$ˆCð ð 	%ð 	�
Š
�2—8’8‘:”:ÑÔÐØ�xŠx˜‰}Œ}×#Ò#Ñ%Ô%Ð%r   r   )r   r   r   r   r   rž   r   rX   rp   rt   ro   rc   r{   r}   r   r�   r”   rˆ   rx   r‡   r1   Úbytesr—   r¥   rº   r   r   r   rZ   rZ   Œ   st  € € € € € ðð ð �€Ið ˜S�>€Lð3ð 3ð 3ð 3ðDð Dð Dð2ð 2ð 2ð"ð "ð "ð;ð ;ð ;ð
$ð $ð $ð%ð %ð %ð 07ð -ð -ð -ð -ð, ð  ð  ð
/˜ð /ð /ð /ð /ð"ð "ð "ð
ð ð ð ð%¨Uð %ð %ð %ñ „[ð%ð"8 3ð 8ð 8ð 8ð 8ð ð&˜sð & sð &ð &ð &ñ „[ð&ð &ð &r   rZ   )Ú	metaclass)r   r±   r›   r¡   Útypesr   Ú
numba.corer   r   ÚThreadLocalStackr    r$   r   r3   rV   r}   rZ   r   r   r   ú<module>rÀ      sƒ  ððð ð 
€	€	€	Ø €€€Ø €€€à "Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ð Ð ðð ð ð ð ñ ô ð ðD	ð 	ð 	ð 	ð 	�%Ô(°Wð 	ñ 	ô 	ð 	ð&ð &ð &ð &ð &ñ &ô &ð &ðD,Gð ,Gð ,Gð ,Gð ,G˜ñ ,Gô ,Gð ,Gð^ð ð ð ð ñ ô ð ð
 ˆ+‰-Œ-€ðv&ð v&ð v&ð v&ð v&Ð.ð v&ñ v&ô v&ð v&ð v&ð v&r   