§
    1@Äj  ã                   óR   — d dl mZ d dlZd dlmZmZ d dlmZ  G d„ de¦  «        Z	dS )é    )Ú
ModuleTypeN)ÚConstantInferenceErrorÚ
NumbaError)Úirc                   ó>   — e Zd ZdZd„ Zd
d„Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
dS )ÚConstantInferencezì
    A constant inference engine for a given interpreter.
    Inference inspects the IR to try and compute a compile-time constant for
    a variable.

    This shouldn't be used directly, instead call Interpreter.infer_constant().
    c                 óF   — t          j        |¦  «        | _        i | _        d S ©N)ÚweakrefÚproxyÚ_func_irÚ_cache)ÚselfÚfunc_irs     úBC:\Projects\Historical\venv\Lib\site-packages\numba/core/consts.pyÚ__init__zConstantInference.__init__   s    € õ  œ gÑ.Ô.ˆŒØˆŒˆˆó    Nc                 ó*  — || j         vrP	 d|                      |¦  «        f| j         |<   n/# t          $ r"}d|j        |j        ff| j         |<   Y d}~nd}~ww xY w| j         |         \  }}|r|S |\  }}t          |t          ¦  «        r ||d|iŽ‚ ||Ž ‚)z£
        Infer a constant value for the given variable *name*.
        If no value can be inferred, numba.errors.ConstantInferenceError
        is raised.
        TFNÚloc)r   Ú	_do_inferr   Ú	__class__ÚargsÚ
issubclassr   )r   Únamer   ÚexcÚsuccessÚvalr   s          r   Úinfer_constantz ConstantInference.infer_constant   sà   € ð �t”{Ð"Ð"ðGØ%)¨4¯>ª>¸$Ñ+?Ô+?Ð$@�”˜DÑ!Ð!øÝ)ð Gð Gð Gð &+¨S¬]¸C¼HÐ,EÐ$F�”˜DÑ!Ð!Ð!Ð!Ð!Ð!øøøøðGøøøð ”{ 4Ô(‰ˆ�Øð 	!ØˆJà‰IˆC�Ý˜#�zÑ*Ô*ð !Ø�c˜4Ð) SÐ)Ð)Ð)à�c˜4�jÐ s   ‹+ «
AµAÁAc                 ó*   — t          d|›�d ¬¦  «        ‚)Nz%Constant inference not possible for: ©r   )r   )r   r   s     r   Ú_failzConstantInference._fail/   s,   € õ %Ð$Ø9<¸Ð>ÀDðJñ Jô Jð 	Jr   c                 ó¤  — t          |t          ¦  «        st          d|›�¦  «        ‚	 | j                             |¦  «        }n # t
          $ r t          d|›�¦  «        ‚w xY w	 |                     ¦   «         }nV# t          $ rI t          |t          j	        ¦  «        r|  
                    |¦  «        cY S |                      |¦  «         Y nw xY w|S )Nz%infer_constant() called with non-str zno single definition for )Ú
isinstanceÚstrÚ	TypeErrorr   Úget_definitionÚKeyErrorr   r   r   ÚExprÚ_infer_exprr!   )r   r   ÚdefnÚconsts       r   r   zConstantInference._do_infer8   s  € Ý˜$¥Ñ$Ô$ð 	'Ý�)Ø#˜tð&ñ 'ô 'ð 'ð	9Ø”=×/Ò/°Ñ5Ô5ˆDˆDøÝð 	9ð 	9ð 	9Ý(Ð(Ø15°Ð7ñ9ô 9ð 9ð	9øøøð	Ø×'Ò'Ñ)Ô)ˆEˆEøÝ%ð 	ð 	ð 	Ý˜$¥¤Ñ(Ô(ð .Ø×'Ò'¨Ñ-Ô-Ð-Ð-Ð-Ø�JŠJ�tÑÔÐÐÐð	øøøð ˆs#   ©A ÁA!Á%A: Á:9CÂ5CÃCc                 óæ  ‡ ‡— ‰j         dk    r<‰                      ‰j        j        ‰j        ¬¦  «        }‰                      |‰¦  «        S ‰j         dk    r<‰                      ‰j        j        ‰j        ¬¦  «        }‰                      |‰¦  «        S ‰j         dk    rˆˆ fd„‰j        D ¦   «         S ‰j         dk    r!t          ˆˆ fd„‰j        D ¦   «         ¦  «        S ‰  
                    ‰¦  «         d S )NÚcallr    ÚgetattrÚ
build_listc                 óR   •— g | ]#}‰                      |j        ‰j        ¬ ¦  «        ‘Œ$S ©r    ©r   r   r   ©Ú.0ÚiÚexprr   s     €€r   ú
<listcomp>z1ConstantInference._infer_expr.<locals>.<listcomp>R   s<   ø€ ð  ð  ð  À!�D×'Ò'¨¬°D´HÐ'Ñ=Ô=ð  ð  ð  r   Úbuild_tuplec              3   óZ   •K  — | ]%}‰                      |j        ‰j        ¬ ¦  «        V — Œ&dS )r    Nr2   r3   s     €€r   ú	<genexpr>z0ConstantInference._infer_expr.<locals>.<genexpr>U   sJ   øè è € ð %ð %Àq˜×,Ò,¨Q¬V¸¼Ð,ÑBÔBð %ð %ð %ð %ð %ð %r   )Úopr   Úfuncr   r   Ú_infer_callÚvalueÚ_infer_getattrÚitemsÚtupler!   )r   r6   r<   r>   s   ``  r   r)   zConstantInference._infer_exprI   s)  øø€ àŒ7�fÒÐØ×&Ò& t¤y¤~¸4¼8Ð&ÑDÔDˆDØ×#Ò# D¨$Ñ/Ô/Ð/ØŒW˜	Ò!Ð!Ø×'Ò'¨¬
¬¸T¼XÐ'ÑFÔFˆEØ×&Ò& u¨dÑ3Ô3Ð3ØŒW˜Ò$Ð$ð ð  ð  ð  ð  Ø”Jð ñ  ô  ð  àŒW˜Ò%Ð%Ýð %ð %ð %ð %ð %Øœð%ñ %ô %ñ %ô %ð %à�
Š
�4ÑÔÐÐÐr   c                 ó@  ‡ ‡— ‰j         s‰j        r‰                      ‰¦  «         |t          fv }t	          |t
          ¦  «        ot          |t          ¦  «        }|s|r+ˆˆ fd„‰j        D ¦   «         }|r ||Ž S |r||fS J d¦   «         ‚‰                      ‰¦  «         d S )Nc                 óR   •— g | ]#}‰                      |j        ‰j        ¬ ¦  «        ‘Œ$S r1   r2   )r4   Úar6   r   s     €€r   r7   z1ConstantInference._infer_call.<locals>.<listcomp>`   s<   ø€ ð ð ð À!�D×'Ò'¨¬°D´HÐ'Ñ=Ô=ð ð ð r   r   ÚUnreachable)	ÚkwsÚvarargr!   Úslicer#   Útyper   ÚBaseExceptionr   )r   r<   r6   Ú_sliceÚ_excr   s   ` `   r   r=   zConstantInference._infer_callY   sÞ   øø€ ØŒ8ð 	�t”{ð 	Ø�JŠJ�tÑÔÐà�%˜Ð!ˆÝ˜$¥Ñ%Ô%ÐI­*°T½=Ñ*IÔ*IˆØð 	(�Tð 	(ðð ð ð ð Ø”Iðñ ô ˆDàð 	(Ø�t˜T�{Ð"Øð (ð
 ˜T�zÐ!à'˜-Ñ'Ô'�qà�
Š
�4ÑÔÐÐÐr   c                 ó´   — t          |t          t          f¦  «        r&	 t          ||j        ¦  «        S # t
          $ r Y nw xY w|                      |¦  «         d S r
   )r#   r   rI   r.   ÚattrÚAttributeErrorr!   )r   r>   r6   s      r   r?   z ConstantInference._infer_getattro   sh   € Ý�e�j­$Ð/Ñ0Ô0ð 	ðÝ˜u d¤iÑ0Ô0Ð0øÝ!ð ð ð Ø�ðøøøà�
Š
�4ÑÔÐÐÐs   ž3 ³
A ¿A r
   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r!   r   r)   r=   r?   © r   r   r   r   	   s�   € € € € € ðð ðð ð ð!ð !ð !ð !ð.Jð Jð Jðð ð ð"ð ð ð ð ð ð,ð ð ð ð r   r   )
Útypesr   r   Únumba.core.errorsr   r   Ú
numba.corer   Úobjectr   rT   r   r   ú<module>rY      sˆ   ðØ Ð Ð Ð Ð Ð à €€€à @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø Ð Ð Ð Ð Ð ðmð mð mð mð m˜ñ mô mð mð mð mr   