§
    ðyIfs  ã                   óZ   — g d ¢Z ddlZddlZddlmZ ddlmZ dd„Zdd„Z	dd	„Z
dd„ZeZdS ))ÚparentÚ	referenceÚatÚparentsÚchildrené    Né   )Ú_proxy_helper)Ú_locate_object© c                 ób   — d}t          | |||¦  «        }|                     ¦   «         }|| u rdS |S )al  
>>> listiter = iter([4,5,6,7])
>>> obj = parent(listiter, list)
>>> obj == [4,5,6,7]  # actually 'is', but don't have handle any longer
True

NOTE: objtype can be a single type (e.g. int or list) or a tuple of types.

WARNING: if obj is a sequence (e.g. list), may produce unexpected results.
Parent finds *one* parent (e.g. the last member of the sequence).
    r   N)r   Úpop)ÚobjÚobjtypeÚignoreÚdepthÚchainr   s         úA/var/www/piapp/venv/lib/python3.11/site-packages/dill/pointers.pyr   r      s<   € ð €EÝ�C˜ %¨Ñ0Ô0€EØ�YŠY‰[Œ[€FØ�€}€}ØˆtØ€Mó    c                 ó¢   ‡— t           j        }ˆfd„}t          |d¦  «        s|fn|}d„ |D ¦   «         }t          | |||¦  «        ddd…         }|S )zúFind the chain of referents for obj. Chain will end with obj.

    objtype: an object type or tuple of types to search for
    depth: search depth (e.g. depth=2 is 'grandparents')
    ignore: an object or tuple of objects to ignore in the search
    c                 ó$   •— t          | ‰¦  «        S ©N©Ú
isinstance©Úxr   s    €r   ú<lambda>zparents.<locals>.<lambda>-   ó   ø€ �* Q¨Ñ0Ô0€ r   Ú__len__c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r   ©Úid©Ú.0r   s     r   ú	<genexpr>zparents.<locals>.<genexpr>0   ó(   è è € Ð(Ð(˜#�b�‰gŒgÐ(Ð(Ð(Ð(Ð(Ð(r   Néÿÿÿÿ)ÚgcÚget_referentsÚhasattrÚ
find_chain©r   r   r   r   Ú	edge_funcÚ	predicater   s    `     r   r   r   %   sk   ø€ õ Ô €IØ0Ð0Ð0Ð0€Iå% f¨iÑ8Ô8ÐDˆfˆYˆY¸f€FØ(Ð( Ð(Ñ(Ô(€FÝ�s˜I y°%Ñ8Ô8¸¸¸2¸Ô>€Eà€Lr   c                 ó’   ‡— t           j        }ˆfd„}t          |d¦  «        s|fn|}d„ |D ¦   «         }t          | ||||¦  «        }|S )a  Find the chain of referrers for obj. Chain will start with obj.

    objtype: an object type or tuple of types to search for
    depth: search depth (e.g. depth=2 is 'grandchildren')
    ignore: an object or tuple of objects to ignore in the search

    NOTE: a common thing to ignore is all globals, 'ignore=(globals(),)'

    NOTE: repeated calls may yield different results, as python stores
    the last value in the special variable '_'; thus, it is often good
    to execute something to replace '_' (e.g. >>> 1+1).
    c                 ó$   •— t          | ‰¦  «        S r   r   r   s    €r   r   zchildren.<locals>.<lambda>D   r   r   r   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r   r    r"   s     r   r$   zchildren.<locals>.<genexpr>G   r%   r   )r'   Úget_referrersr)   r*   r+   s    `     r   r   r   6   sb   ø€ õ Ô €IØ0Ð0Ð0Ð0€Iå% f¨iÑ8Ô8ÐDˆfˆYˆY¸f€FØ(Ð( Ð(Ñ(Ô(€FÝ�s˜I y°%¸Ñ@Ô@€Eà€Lr   é   c                 ó  — | g}t          | ¦  «        di}t          | ¦  «        d i}t          |¦  «        }|                     t          |¦  «        ¦  «         |                     t          |¦  «        ¦  «         |                     t          |¦  «        ¦  «         |                     t          |¦  «        ¦  «         |                     t          |¦  «        ¦  «         |                     t          t          j        ¦   «         ¦  «        ¦  «         |                     t          t          j        d¦  «        ¦  «        ¦  «         t          j        ¦   «          |�r(|                     d¦  «        }	 ||	¦  «        rY|	g}
|t          |	¦  «                 �?|t          |	¦  «                 }	|
                     |	¦  «         |t          |	¦  «                 ­?|
S |t          |	¦  «                 }||k     r‘ ||	¦  «        }|                     t          |¦  «        ¦  «         |D ]a}t          |¦  «        |v rŒt          |¦  «        |vr<|dz   |t          |¦  «        <   |	|t          |¦  «        <   |                     |¦  «         Œb|�°(| gS )Nr   r   )	r!   ÚsetÚaddÚsysÚ	_getframer'   Úcollectr   Úappend)r   r-   r,   Ú	max_depthÚextra_ignoreÚqueuer   r   r   Útargetr   ÚtdepthÚ	referrersÚsources                 r   r*   r*   S   s:  € ØˆE€EÝ�‰WŒW�aˆL€EÝ�‰gŒg�tˆ_€FÝ�ÑÔ€FØ
‡J‚J�r�,ÑÔÑ Ô Ð Ø
‡J‚J�r�%‰yŒyÑÔÐØ
‡J‚J�r�%‰yŒyÑÔÐØ
‡J‚J�r�&‰zŒzÑÔÐØ
‡J‚J�r�&‰zŒzÑÔÐØ
‡J‚J�r•#”-‘/”/Ñ"Ô"Ñ#Ô#Ð#Ø
‡J‚J�r•#”- Ñ"Ô"Ñ#Ô#Ñ$Ô$Ð$Ý„J�L„L€LØ
ñ )Ø—’˜1‘”ˆØˆ9�VÑÔð 	Ø�HˆEØ�˜F™œÔ$Ð0Ø¥ 6¡
¤
Ô+�Ø—’˜VÑ$Ô$Ð$ð �˜F™œÔ$Ð0ð ˆLØ•r˜&‘z”zÔ"ˆØ�IÒÐØ!˜	 &Ñ)Ô)ˆIØ�JŠJ•r˜)‘}”}Ñ%Ô%Ð%Ø#ð )ð )�Ý�f‘:”: Ð'Ð'ØÝ�f‘:”: UÐ*Ð*Ø(.°©
�E�"˜V™*œ*Ñ%Ø)/�F�2˜f™:œ:Ñ&Ø—L’L Ñ(Ô(Ð(øð% ñ )ð& ˆ5€Lr   )r   )r   r   )r2   r   )Ú__all__r'   r6   Ú_dillr	   r   r
   r   r   r   r   r*   Ú	refobjectr   r   r   ú<module>rD      s¤   ðð ?Ð
>Ð
>€à 	€	€	€	Ø 
€
€
€
à -Ð -Ð -Ð -Ð -Ð -Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'ðð ð ð ð(ð ð ð ð"ð ð ð ð: ð  ð  ð  ðH €	€	€	r   