§
    ðyIfj+  ã                   óÆ   — d Z ddlZddlmZmZmZmZmZ ddlm	Z	m
Z
mZmZmZ ddlmZ g d¢Zdd	„Zd
„ Zdd„Zd„ Zdd„Zd„ Zdd„Zdd„Zdd„Zd„ Zdd„Zdd„Zdd„Zdd„ZdS )z=
Methods for detecting objects leading to pickling failures.
é    N)ÚismethodÚ
isfunctionÚistracebackÚisframeÚiscodeé   )ÚparentÚ	referenceÚatÚparentsÚchildren)Útrace)ÚbaditemsÚ
badobjectsÚbadtypesÚcodeÚerrorsÚfreevarsÚ	getmoduleÚ
globalvarsÚ
nestedcodeÚnestedglobalsÚ	outermostÚreferredglobalsÚreferrednestedr   ÚvarnamesFc                 ó®   — ddl m}  || |¦  «        }|s|s|S ddl}ddlm}  || d¬¦  «        }|t          |¦  «                             ¦   «         v r|ndS )zget the module of the objectr   )r   Nr   )ÚgetnameT)Úforce)Úinspectr   ÚbuiltinsÚsourcer   ÚvarsÚkeys)ÚobjectÚ	_filenamer   ÚgetmodÚmoduler!   r   Únames           ú?/var/www/piapp/venv/lib/python3.11/site-packages/dill/detect.pyr   r      s‰   € à+Ð+Ð+Ð+Ð+Ð+ØˆV�F˜IÑ&Ô&€FØÐ)�UÐ) 6˜MØ€O€O€OØÐÐÐÐÐØˆ7�6 Ð&Ñ&Ô&€DØ�t H™~œ~×2Ò2Ñ4Ô4Ð4Ð4ˆ8ˆ8¸$Ð>ó    c                 óš  ‡— t          | ¦  «        r| j        j        pi }nt          | ¦  «        r
| j        pi }ndS |                     ¦   «         }ddlm}  || d¬¦  «        \  }}n# t          $ r g d}}Y nw xY wd                     |¦  «        Šˆfd„|D ¦   «         }|D ]+\  }}	  ||¦  «        ||fk    r|c S Œ# t          $ r Y Œ(w xY wdS )z–get outermost enclosing object (i.e. the outer function in a closure)

    NOTE: this is the object-equivalent of getsource(func, enclosing=True)
    Nr   )ÚgetsourcelinesT)Ú	enclosingÚ c              3   ó.   •K  — | ]\  }}|‰v ¯	||fV — Œd S ©N© )Ú.0r)   Úobjr   s      €r*   ú	<genexpr>zoutermost.<locals>.<genexpr>3   s/   øè è € ÐEÐE™j˜t C¸À¸¸��Sˆz¸¸¸¸ÐEÐEr+   )	r   Ú__func__Ú__globals__r   Úitemsr"   r-   Ú	ExceptionÚjoin)	ÚfuncÚ_globalsr-   ÚlinesÚlnumÚ_localsr)   r4   r   s	           @r*   r   r       s4  ø€ õ
 ��~„~ð Ø”=Ô,Ð2°ˆˆÝ	�DÑ	Ô	ð ØÔ#Ð) rˆˆàˆØ�~Š~ÑÔ€Hà&Ð&Ð&Ð&Ð&Ð&Ø$�n T°TÐ:Ñ:Ô:‰ˆˆtˆtøÝð ð ð Ø˜ˆdˆˆˆðøøøà�7Š7�5‰>Œ>€DàEÐEÐEÐE¨HÐEÑEÔE€Gàð ð ‰ˆˆSð	Øˆ~˜cÑ"Ô" u¨T lÒ2Ð2¸3°J°J°JÐ2øÝð 	ð 	ð 	ØˆDð	øøøà
€Fs$   ÁA& Á&A7Á6A7Â%B;Â;
CÃCTc                 ó(  — t          | ¦  «        } t          | ¦  «        sg S t          ¦   «         }| j        D ]N}|€Œt          |¦  «        }|r8|                     |¦  «         |r!|t          t          |d¬¦  «        ¦  «        z  }ŒOt          |¦  «        S )zAget the code objects for any nested functions (e.g. in a closure)NT©Úrecurse)r   r   ÚsetÚ	co_constsÚaddr   Úlist)r;   rB   ÚnestedÚcos       r*   r   r   <   s”   € å�‰:Œ:€DÝ�$‰<Œ<Ð" ˜Ý‰UŒU€FØŒnð Dð DˆØˆ:�xÝ�"‰XŒXˆØð 	DØ�JŠJ�r‰NŒNˆNØÐC˜¥#¥j°¸TÐ&BÑ&BÔ&BÑ"CÔ"CÑC˜øÝ�‰<Œ<Ðr+   c                 óØ   — t          | ¦  «        r| j        } t          | ¦  «        r| j        } t	          | ¦  «        r| j        } t          | ¦  «        r| j        } t          | ¦  «        r| S dS )z~get the code object for the given function or method

    NOTE: use dill.source.getsource(CODEOBJ) to get the source code
    N)	r   r6   r   Ú__code__r   Útb_framer   Úf_coder   ©r;   s    r*   r   r   I   se   € õ
 ��~„~Ð+˜dœm�tÝ�$ÑÔÐ- ¤˜Ý�4ÑÔÐ. ¤˜$Ýˆt�}„}Ð(˜Tœ[�dÝˆd�|„|Ð ˜D�[Ø
€Fr+   c                 ó  — ddl }t          ¦   «         }t          | |¦  «        D ]Ï}|                     |¦  «        D ]·}t	          |dd¦  «        }t	          |dd¦  «        |u r|                     |¦  «         Œ<t	          |dd¦  «        |u r|                     |¦  «         Œet	          |dd¦  «        |u r|                     |¦  «         ŒŽt          |d¦  «        r||u r|                     |¦  «         Œ¸ŒÐt          |¦  «        S )aJ  get functions defined inside of func (e.g. inner functions in a closure)

    NOTE: results may differ if the function has been executed or not.
    If len(nestedcode(func)) > len(referrednested(func)), try calling func().
    If possible, python builds code objects, but delays building functions
    until func() is called.
    r   Nr6   rJ   rL   Úco_code)ÚgcrC   r   Úget_referrersÚgetattrrE   ÚhasattrrF   )r;   rB   rP   ÚfuncsrH   r4   Ú_s          r*   r   r   V   s  € ð €I€I€IÝ‰EŒE€Eå˜˜wÑ'Ô'ð Gð Gˆà×#Ò# BÑ'Ô'ð 		Gð 		GˆCå˜˜Z¨Ñ.Ô.ˆAÝ�q˜* dÑ+Ô+¨rÐ1Ð1°5·9²9¸S±>´>°>°>å˜˜j¨$Ñ/Ô/°2Ð5Ð5°u·y²yÀ±~´~°~°~å˜˜h¨Ñ-Ô-°Ð3Ð3°U·Y²Y¸s±^´^°^°^å˜˜iÑ(Ô(ÐF¨S°B¨Y¨Y¸¿	º	À#¹¼¸øð		Gõ �‰;Œ;Ðr+   c                 óº   ‡ ‡— t          ‰ ¦  «        r‰ j        Š t          ‰ ¦  «        r‰ j        pdŠ‰ j        j        Š ni S ˆˆ fd„}t           |¦   «         ¦  «        S )zgget objects defined in enclosing code that are referred to by func

    returns a dict of {name:object}r2   c               3   ó€   •K  — t          ‰‰¦  «        D ])\  } }	 |j        }n# t          $ r Y Œw xY w| |j        fV — Œ*d S r1   )ÚzipÚcell_contentsÚ
ValueError)r)   ÚcrY   Úclosuresr;   s      €€r*   Úget_cell_contentsz#freevars.<locals>.get_cell_contents€   sr   øè è € Ý˜4 Ñ*Ô*ð 	(ð 	(‰GˆD�!ðØ !¤��øÝð ð ð Ø�ðøøøà˜œÐ'Ð'Ð'Ð'Ð'ð	(ð 	(s   š"¢
/®/)r   r6   r   Ú__closure__rJ   Úco_freevarsÚdict)r;   r]   r\   s   ` @r*   r   r   u   s~   øø€ õ ��~„~Ð+˜dœm�tÝ�$ÑÔð ØÔ#Ð) rˆØŒ}Ô(ˆˆàˆ	ð(ð (ð (ð (ð (ð (õ Ð!Ð!Ñ#Ô#Ñ$Ô$Ð$r+   c                 ó,  — t          | ¦  «        } | €t          ¦   «         S ddl}ddlm} |j        dk    }t          ¦   «         } |d¦  «        5 }t          j        | ¦  «         ddd¦  «         n# 1 swxY w Y   |                     ¦   «          	                    ¦   «         D ]�}d|v r‰| 
                    d¦  «        d	          
                    d
¦  «        d         }|r>|                     |                     dd¦  «                             dd¦  «        ¦  «         Œz|                     |¦  «         Œ�t          | dt          ¦   «         ¦  «        D ]9}	|	r5|r3t          |	¦  «        r$|                     t#          |	d¬¦  «        ¦  «         Œ:t          |¦  «        S )z.get the names of any globals found within funcNr   r   )Úcapturei§ ÚstdoutÚ_GLOBALú(éÿÿÿÿú)zNULL + r/   z + NULLrD   TrA   )r   rF   ÚsysÚtemprb   Ú
hexversionrC   ÚdisÚgetvalueÚ
splitlinesÚsplitrE   ÚreplacerR   Útupler   Úupdater   )
r;   rB   rh   rb   ÚCAN_NULLÚnamesÚoutÚliner)   rH   s
             r*   r   r   ‹   sÀ  € å�‰:Œ:€DØ€|�D™FœF�]Ø€J€J€JØÐÐÐÐÐØŒ~ Ò*€HÝ‰EŒE€EØ	ˆ�Ñ	Ô	ð ˜cÝŒ�‰Œˆðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð à—’‘”×)Ò)Ñ+Ô+ð  ð  ˆØ˜ÐÐØ—:’:˜c‘?”? 2Ô&×,Ò,¨SÑ1Ô1°!Ô4ˆDØð  Ø—	’	˜$Ÿ,š, y°"Ñ5Ô5×=Ò=¸iÈÑLÔLÑMÔMÐMÐMà—	’	˜$‘”�øÝ�d˜K­©¬Ñ1Ô1ð :ð :ˆØð 	:�'ð 	:�f R™jœjð 	:Ø�LŠL� r°4Ð8Ñ8Ô8Ñ9Ô9Ð9øÝ�‰;Œ;Ðs   ÁA/Á/A3Á6A3c                 óH   — t          | ||¦  «                             ¦   «         S )z@get the names of objects in the global scope referred to by func)r   r$   )r;   rB   Úbuiltins      r*   r   r   ¡   s    € å�d˜G WÑ-Ô-×2Ò2Ñ4Ô4Ð4r+   c                 óä  ‡	— t          | ¦  «        r| j        } t          | ¦  «        �rd|r3t          t	          t
          ¦  «        ¦  «                             ¦   «         ni Š	| t          ¦   «         } }|j        pi D ]W}	 |j	        }t          |||¦  «        pi }|                      |¦  «         ‰	                     |¦  «         ŒH# t          $ r Y ŒTw xY w‰	                     |j        pi ¦  «         |s!|                      |j        j        ¦  «         �nH|                      t!          |j        ¦  «        ¦  «         |                      ¦   «         D ]@}‰	                     |¦  «        }||u rŒ|                      t          |d|¦  «        ¦  «         ŒAnËt%          | ¦  «        rº|r3t          t	          t
          ¦  «        ¦  «                             ¦   «         ni Š	|s| j        } n{| j        }t          t!          | ¦  «        ¦  «        } |                      ¦   «         D ]@}||u rŒ‰	                     |¦  «        }|                      t          |d|¦  «        ¦  «         ŒAni S t)          ˆ	fd„| D ¦   «         ¦  «        S )zdget objects defined in global scope that are referred to by func

    return a dict of {name:object}Tc              3   ó4   •K  — | ]}|‰v ¯|‰|         fV — Œd S r1   r2   )r3   r)   Úglobss     €r*   r5   zglobalvars.<locals>.<genexpr>×   s0   øè è € ÐEÐE t°t¸u°}°}��e˜D”kÐ"°}°}°}°}ÐEÐEr+   )r   r6   r   r#   r   ÚsumÚcopyrC   r^   rY   r   rq   rZ   r7   rJ   Úco_namesr   Úgetr   Úco_namer`   )
r;   rB   rw   Ú	orig_funcr4   rY   Ú_varsÚkeyÚnested_funcrz   s
            @r*   r   r   ¥   sŠ  ø€ õ ��~„~Ð+˜dœm�tÝ�$ÑÔñ +Ø/6Ð>••Y�s‘^”^Ñ$Ô$×)Ò)Ñ+Ô+Ð+¸Bˆà¥¡¤�4ˆ	ØÔ(Ð.¨Bð 	$ð 	$ˆCð$Ø #Ô 1�õ # =°'¸7ÑCÔCÐIÀr�Ø—’˜EÑ"Ô"Ð"Ø—’˜UÑ#Ô#Ð#Ð#øõ ð ð ð Ø�ðøøøð 	�Š�YÔ*Ð0¨bÑ1Ô1Ð1àð 
	DØ�KŠK˜	Ô*Ô3Ñ4Ô4Ð4Ñ4à�KŠK� iÔ&8Ñ9Ô9Ñ:Ô:Ð:à—y’y‘{”{ð Dð D�Ø#Ÿiši¨™nœn�Ø )Ð+Ð+àØ—’�J {°D¸'ÑBÔBÑCÔCÐCÐCðDõ 
�‰Œð Ø/6Ð>••Y�s‘^”^Ñ$Ô$×)Ò)Ñ+Ô+Ð+¸Bˆàð 	DØ”=ˆDˆDàœˆIÝ•} TÑ*Ô*Ñ+Ô+ˆDà—y’y‘{”{ð Dð D�Ø˜)Ð#Ð#àØ#Ÿiši¨™nœn�Ø—’�J {°D¸'ÑBÔBÑCÔCÐCÐCðDð ˆ	åÐEÐEÐEÐE¨tÐEÑEÔEÑEÔEÐEs   Á;C Ã 
CÃCc                 ó^   — t          | ¦  «        } t          | ¦  «        sdS | j        | j        fS )ztget names of variables defined by func

    returns a tuple (local vars, local vars referrenced by nested functions)r2   )r   r   Úco_varnamesÚco_cellvarsrM   s    r*   r   r   Ú   s3   € õ �‰:Œ:€DÝ�$‰<Œ<ð ØˆrØÔ˜TÔ-Ð-Ð-r+   c                 óì   ‡‡‡— t          | d¦  «        sd„ t          | d‰‰¦  «        fD ¦   «         S t          | dd¦  «        r|                      ¦   «         n| } g Šˆˆˆfd„| D ¦   «          d„ ‰D ¦   «         S )z'get items in object that fail to pickleÚ__iter__c                 ó   — g | ]}|®|‘ŒS r1   r2   ©r3   Újs     r*   ú
<listcomp>zbaditems.<locals>.<listcomp>ç   s   € ÐLÐLÐL�a¸a¸m�¸m¸m¸mr+   r   ÚvaluesNc           
      ób   •— g | ]+}|‰v¯‰                      t          |d ‰‰¦  «        ¦  «        ‘Œ,S )r   )Úappendr   )r3   ÚiÚ_objÚexactÚsafes     €€€r*   rŒ   zbaditems.<locals>.<listcomp>ê   s8   ø€ ÐKÐKÐK°¸QÀd¸]¸]€T‡[‚[•˜A˜a  dÑ+Ô+Ñ,Ô,¸]¸]¸]r+   c                 ó   — g | ]}|®|‘ŒS r1   r2   rŠ   s     r*   rŒ   zbaditems.<locals>.<listcomp>ë   s   € Ð-Ð-Ð-�!˜q˜}ˆA˜}˜}˜}r+   )rS   r   rR   r�   )r4   r’   r“   r‘   s    ``@r*   r   r   ä   s˜   øøø€ å�3�zÑ"Ô"ð MØLÐL�J s¨1¨U°4Ñ8Ô8Ð:ÐLÑLÔLÐLÝ! # h¨tÑ4Ô4Ð
=ˆ#�*Š*‰,Œ,ˆ,¸#€CØ€DØKÐKÐKÐKÐKÐK°cÐKÑKÔKÐKØ-Ð-�tÐ-Ñ-Ô-Ð-r+   c                 ó–   ‡ ‡‡‡‡— ddl mŠ ‰s ‰‰ ‰‰¦  «        rdS ‰ S t          ˆˆˆ ˆˆfd„t          ‰ ¦  «        D ¦   «         ¦  «        S )zget objects that fail to pickler   ©ÚpicklesNc              3   ó˜   •K  — | ]D} ‰t          ‰|¦  «        ‰‰¦  «        °|t          t          ‰|¦  «        ‰d z
  ‰‰¦  «        fV — ŒEdS ©r   N)rR   r   ©r3   ÚattrÚdepthr’   r4   r—   r“   s     €€€€€r*   r5   zbadobjects.<locals>.<genexpr>ô   s}   øè è € ð Nð NØ w w­w°s¸4Ñ/@Ô/@ÀÀtÑ'LÔ'LðN�$�
¥7¨3¨tÑ#4Ô#4°U¸1±W¸UÀ4ÑHÔHÐIð Nð Nð Nð Nð Nð Nr+   )Údillr—   r`   Údir©r4   rœ   r’   r“   r—   s   ````@r*   r   r   î   sž   øøøøø€ àÐÐÐÐÐØð Øˆ7�3�u˜TÑ"Ô"Ð/¨4¨4Øˆ
Ýð Nð Nð Nð Nð Nð Nð Nð NÝ˜3‘x”xðNñ Nô Nñ Oô Oð Or+   c                 ó°   ‡ ‡‡‡‡— ddl mŠ ‰s ‰‰ ‰‰¦  «        rdS t          ‰ ¦  «        S t          ˆˆˆ ˆˆfd„t	          ‰ ¦  «        D ¦   «         ¦  «        S )z)get types for objects that fail to pickler   r–   Nc              3   ó˜   •K  — | ]D} ‰t          ‰|¦  «        ‰‰¦  «        °|t          t          ‰|¦  «        ‰d z
  ‰‰¦  «        fV — ŒEdS r™   )rR   r   rš   s     €€€€€r*   r5   zbadtypes.<locals>.<genexpr>ý   s}   øè è € ð Nð NØ w w­w°s¸4Ñ/@Ô/@ÀÀtÑ'LÔ'LðN�$�¥¨¨TÑ!2Ô!2°5¸±7¸5ÀÑFÔFÐGð Nð Nð Nð Nð Nð Nr+   )r�   r—   Útyper`   rž   rŸ   s   ````@r*   r   r   ÷   s¥   øøøøø€ àÐÐÐÐÐØð Øˆ7�3�u˜TÑ"Ô"Ð/¨4¨4Ý�C‰yŒyÐÝð Nð Nð Nð Nð Nð Nð Nð NÝ˜3‘x”xðNñ Nô Nñ Oô Oð Or+   c                 óN  — ddl m}m} |sž	  || ¦  «        }|r|| k    sJ d|›d| ›�¦   «         ‚t          |¦  «        t          | ¦  «        k    s*J dt          |¦  «        ›dt          | ¦  «        ›�¦   «         ‚dS # t          $ r! ddl}|                     ¦   «         d         cY S w xY wi }t          | ¦  «        D ]j}		 t          | |	¦  «        }
n1# t          $ r$ ddl}|                     ¦   «         d         ||	<   Y ŒAw xY w ||
||¦  «        st          |
|dz
  ||¦  «        ||	<   Œk|S )z*get errors for objects that fail to pickler   )r—   r|   zUnpickling produces z instead of Nr   )
r�   r—   r|   r¢   r9   rh   Úexc_inforž   rR   r   )r4   rœ   r’   r“   r—   r|   Úpikrh   Ú_dictr›   Ú_attrs              r*   r   r      s�  € à"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Øð %ð
	%Ø�$�s‘)”)ˆCØð GØ˜c’z�z�z�zØ>A¸c¸cÀ#À#ÐFñ "”z�zå˜‘9”9¥ S¡	¤	Ò)Ð)Ð)Ð)Ý:>¸s¹)¼)¸)¸)ÅDÈÁIÄIÀIÐNñ *Ô)Ð)à�4øÝð 	%ð 	%ð 	%ØˆJˆJˆJØ—<’<‘>”> !Ô$Ð$Ð$Ð$ð	%øøøð €EÝ�C‘”ð ;ð ;ˆð	Ý˜C Ñ%Ô%ˆEˆEøÝð 	ð 	ð 	ØˆJˆJˆJØŸ,š,™.œ.¨Ô+ˆE�$‰KØˆHð	øøøð ˆw�u˜U 4Ñ(Ô(ð 	;Ý   u¨Q¡w¨u°TÑ:Ô:ˆE�$‰KøØ€Ls$   ŒA-A; Á;(B&Â%B&Â=CÃ+C<Ã;C<)NF)T)TF)FF)r   FF)Ú__doc__rk   r    r   r   r   r   r   Úpointersr	   r
   r   r   r   Úloggerr   Ú__all__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r2   r+   r*   ú<module>r¬      s¯  ððð ð €
€
€
Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ Fà >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø Ð Ð Ð Ð Ð ðBð Bð B€ð?ð ?ð ?ð ?ðð ð ð8ð ð ð ð
ð 
ð 
ðð ð ð ð>%ð %ð %ð,ð ð ð ð,5ð 5ð 5ð 5ð2Fð 2Fð 2Fð 2Fðj.ð .ð .ð.ð .ð .ð .ðOð Oð Oð OðOð Oð Oð Oðð ð ð ð ð r+   