§
    ñyIfö  ã                  óL  — d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
mZmZmZmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZ ddlmZ ddlmZmZmZmZ ddlm Z  ddl!m"Z"m#Z# ddl$m%Z%m&Z& dZ' G d„ dej(        ¦  «        Z)d(d)d„Z*	 d(d*d„Z+d+d„Z,d,d"„Z- ee-d#¬$¦  «        Z.d-d'„Z/dS ).z9Astroid hooks for understanding functools library module.é    )Úannotations)ÚIterator)Úpartial)Úchain)ÚBoundMethodÚ	argumentsÚextract_nodeÚnodesÚobjects)ÚInferenceContext)ÚInferenceErrorÚUseInferenceDefault)Úinference_tip)Úobjectmodel)ÚAstroidManager)Ú
AssignNameÚ	AttributeÚCallÚName)ÚFunctionDef)ÚInferenceResultÚSuccessfulInferenceResult)ÚUninferableBaseÚ
safe_inferzfunctools.lru_cachec                  óT   — e Zd ZdZed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         ZdS )ÚLruWrappedModelz²Special attribute model for functions decorated with functools.lru_cache.

    The said decorators patches at decoration time some functions onto
    the decorated function.
    c                ó   — | j         S ©N)Ú	_instance)Úselfs    úQ/var/www/piapp/venv/lib/python3.11/site-packages/astroid/brain/brain_functools.pyÚattr___wrapped__z LruWrappedModel.attr___wrapped__"   s
   € àŒ~Ðó    c                óz   ‡— t          d¦  «        Š G ˆfd„dt          ¦  «        } || j        | j        ¬¦  «        S )NzQ
        from functools import _CacheInfo
        _CacheInfo(0, 0, 0, 0)
        c                  ó    •— e Zd Z	 d	d
ˆ fd„ZdS )ú=LruWrappedModel.attr_cache_info.<locals>.CacheInfoBoundMethodNÚcallerú SuccessfulInferenceResult | NoneÚcontextúInferenceContext | NoneÚreturnúIterator[InferenceResult]c              3  ó:   •K  — t          ‰¦  «        }|€J ‚|V — d S r   )r   )r    r'   r)   ÚresÚ
cache_infos       €r!   Úinfer_call_resultzOLruWrappedModel.attr_cache_info.<locals>.CacheInfoBoundMethod.infer_call_result0   s,   øè è € õ
 ! Ñ,Ô,�Ø���Ø�	�	�	�	�	r#   r   )r'   r(   r)   r*   r+   r,   )Ú__name__Ú
__module__Ú__qualname__r0   )r/   s   €r!   ÚCacheInfoBoundMethodr&   /   s=   ø€ € € € € ð 48ðð ð ð ð ð ð ð ð r#   r4   ©ÚproxyÚbound)r	   r   r   )r    r4   r/   s     @r!   Úattr_cache_infozLruWrappedModel.attr_cache_info&   sg   ø€ å!ðñ
ô 
ˆ
ð	ð 	ð 	ð 	ð 	ð 	ð 	¥;ñ 	ô 	ð 	ð $Ð#¨$¬.ÀÄÐOÑOÔOÐOr#   c                óz   — t          d¦  «        }t          || j        j                             ¦   «         ¬¦  «        S )Nzdef cache_clear(self): passr5   )r	   r   r   ÚparentÚscope)r    Únodes     r!   Úattr_cache_clearz LruWrappedModel.attr_cache_clear;   s4   € åÐ=Ñ>Ô>ˆÝ ¨T¬^Ô-B×-HÒ-HÑ-JÔ-JÐKÑKÔKÐKr#   N)r1   r2   r3   Ú__doc__Úpropertyr"   r8   r=   © r#   r!   r   r      sw   € € € € € ðð ð ðð ñ „Xðð ðPð Pñ „XðPð( ðLð Lñ „XðLð Lð Lr#   r   Nr)   r*   r+   ÚNonec                ó>   —  t          ¦   «         | ¦  «        | _        d S r   )r   Úspecial_attributes)r<   r)   s     r!   Ú_transform_lru_cacherD   A   s"   € ð 0�oÑ/Ô/°Ñ5Ô5€DÔÐÐr#   r<   ú
nodes.Callú!Iterator[objects.PartialFunction]c           	     óÞ  — t           j                             | |¬¦  «        }t          |j        ¦  «        }|dk     rt          d¦  «        ‚|dk    r|j        st          d¦  «        ‚|j        d         }	 t          |                     |¬¦  «        ¦  «        }n!# t          t          f$ r}t
          |‚d }~ww xY wt          |t          ¦  «        rt          d¦  «        ‚t          |t          ¦  «        st          d¦  «        ‚|j        sg }n5t          |j        j        pd|j        j        pd|j        j        pd¦  «        }d	„ |D ¦   «         }t%          |j        ¦  «        |z
  rt          d
¦  «        ‚t'          j        ||j        |j        |j        | j        ¬¦  «        }|                     |j        |j        |j        |j        |j        |j        |j        ¬¦  «         tA          |f¦  «        S )N)r)   é   z-functools.partial takes at least one argumentz>functools.partial needs at least to have some filled argumentsr   z!Cannot infer the wrapped functionz&The wrapped function is not a functionr@   c                óF   — h | ]}t          |t          ¦  «        ¯|j        ’ŒS r@   )Ú
isinstancer   Úname)Ú.0Úparams     r!   ú	<setcomp>z/_functools_partial_inference.<locals>.<setcomp>k   s9   € ð ð ð ØµzÀ%ÍÑ7TÔ7TðØŒ
ðð ð r#   z,wrapped function received unknown parameters)rK   ÚlinenoÚ
col_offsetr:   )ÚargsÚbodyÚ
decoratorsÚreturnsÚtype_comment_returnsÚtype_comment_argsÚdoc_node)!r   ÚCallSiteÚ	from_callÚlenÚpositional_argumentsr   Úkeyword_argumentsÚnextÚinferr   ÚStopIterationrJ   r   r   rQ   r   ÚposonlyargsÚ
kwonlyargsÚsetr   ÚPartialFunctionrK   rO   rP   r:   ÚpostinitrR   rS   rT   rU   rV   rW   Úiter)	r<   r)   ÚcallÚnumber_of_positionalÚpartial_functionÚinferred_wrapped_functionÚexcÚfunction_parametersÚparameter_namess	            r!   Ú_functools_partial_inferencerm   K   sC  € õ Ô×'Ò'¨°gÐ'Ñ>Ô>€DÝ˜tÔ8Ñ9Ô9ÐØ˜aÒÐÝ!Ð"QÑRÔRÐRØ˜qÒ Ð ¨Ô)?Ð Ý!ØLñ
ô 
ð 	
ð Ô0°Ô3Ðð+Ý$(Ð)9×)?Ò)?ÈÐ)?Ñ)PÔ)PÑ$QÔ$QÐ!Ð!øÝ�MÐ*ð +ð +ð +Ý! sÐ*øøøøð+øøøåÐ+­_Ñ=Ô=ð GÝ!Ð"EÑFÔFÐFÝÐ/µÑ=Ô=ð LÝ!Ð"JÑKÔKÐKð %Ô)ð 
Ø ÐÐå#Ø%Ô*Ô/Ð5°2Ø%Ô*Ô6Ð<¸"Ø%Ô*Ô5Ð;¸ñ
ô 
Ðð
ð Ø 3ðñ ô €Oõ ˆ4Ô!Ñ"Ô" _Ñ4ð RÝ!Ð"PÑQÔQÐQåÔ.ØØ&Ô+Ø(Ô/Ø,Ô7ØŒ{ðñ ô Ðð ×ÒØ&Ô+Ø&Ô+Ø,Ô7Ø)Ô1Ø6ÔKØ3ÔEØ*Ô3ð ñ ô ð õ Ð!Ð#Ñ$Ô$Ð$s   Á5#B ÂB7Â*B2Â2B7Úboolc                ó–   — | j         sdS | j         j        D ]2}t          |t          t          f¦  «        sŒt          |d¦  «        r dS Œ3dS )z=Check if the given function node is decorated with lru_cache.FÚ	lru_cacheT)rS   r
   rJ   r   r   Ú_looks_like_functools_member)r<   Ú	decorators     r!   Ú_looks_like_lru_cachers   „   sb   € àŒ?ð ØˆuØ”_Ô*ð ð ˆ	Ý˜)¥iµÐ%6Ñ7Ô7ð 	ØÝ'¨	°;Ñ?Ô?ð 	Ø�4�4ð	àˆ5r#   úAttribute | CallÚmemberÚstrc                óV  — t          | t          ¦  «        r| j        |k    S t          | j        t          ¦  «        r| j        j        |k    S t          | j        t          ¦  «        rD| j        j        |k    o3t          | j        j        t          ¦  «        o| j        j        j        dk    S dS )z?Check if the given Call node is the wanted member of functools.Ú	functoolsF)rJ   r   ÚattrnameÚfuncr   rK   Úexpr)r<   ru   s     r!   rq   rq   �   s›   € å�$�	Ñ"Ô"ð 'ØŒ} Ò&Ð&Ý�$”)�TÑ"Ô"ð (ØŒyŒ~ Ò'Ð'Ý�$”)�YÑ'Ô'ð 
àŒIÔ &Ò(ð 3Ý˜4œ9œ>­4Ñ0Ô0ð3à”	”Ô# {Ò2ð	
ð
 ˆ5r#   r   )ru   Úmanagerr   c                ó¸   — |                       t          t          t          ¦  «         |                       t          t          t          ¦  «        t          ¦  «         d S r   )Úregister_transformr   rD   rs   r   r   rm   Ú_looks_like_partial)r|   s    r!   Úregisterr€   ¢   sP   € Ø×Ò�{Õ,@ÕBWÑXÔXÐXà×ÒÝÝÕ2Ñ3Ô3Ýñô ð ð ð r#   r   )r)   r*   r+   rA   )r<   rE   r)   r*   r+   rF   )r+   rn   )r<   rt   ru   rv   r+   rn   )r|   r   r+   rA   )0r>   Ú
__future__r   Úcollections.abcr   rx   r   Ú	itertoolsr   Úastroidr   r   r	   r
   r   Úastroid.contextr   Úastroid.exceptionsr   r   Úastroid.inference_tipr   Úastroid.interpreterr   Úastroid.managerr   Úastroid.nodes.node_classesr   r   r   r   Úastroid.nodes.scoped_nodesr   Úastroid.typingr   r   Úastroid.utilr   r   Ú	LRU_CACHEÚFunctionModelr   rD   rm   rs   rq   r   r€   r@   r#   r!   ú<module>r�      s  ðð
 @Ð ?à "Ð "Ð "Ð "Ð "Ð "à $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HØ ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ /Ð /Ð /Ð /Ð /Ð /Ø +Ð +Ð +Ð +Ð +Ð +Ø *Ð *Ð *Ð *Ð *Ð *Ø HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HØ 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EØ 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4Ð 4à!€	ð#Lð #Lð #Lð #Lð #L�kÔ/ñ #Lô #Lð #LðL6ð 6ð 6ð 6ð 6ð :>ð6%ð 6%ð 6%ð 6%ð 6%ðr	ð 	ð 	ð 	ðð ð ð ð �gÐ:À9ÐMÑMÔMÐ ðð ð ð ð ð r#   