ó
    …~iÇ+  ã                   óØ   • S r SSKrSSKJrJrJrJrJr  SSKJ	r	J
r
JrJrJr  SSKJr  / SQrSS jrS	 rSS
 jrS rSS jrS rSS jrSS jrSS jrS rSS jrSS jrSS jrSS jrg)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   Úvarnamesc                 ó¢   • SSK Jn  U" X5      nU(       d  U(       d  U$ SSKnSSKJn  U" U SS9nU[        U5      R                  5       ;   a  U$ S$ )zget the module of the objectr   )r   Nr   )ÚgetnameT)Úforce)Úinspectr   ÚbuiltinsÚsourcer   ÚvarsÚkeys)ÚobjectÚ	_filenamer   ÚgetmodÚmoduler!   r   Únames           ÚH/home/mande/repo/quber/.venv/lib/python3.13/site-packages/dill/detect.pyr   r      sI   € å+Ù�FÓ&€FÞ–U 6˜MÛÝÙ�6 Ñ&€DØœt H›~×2Ñ2Ó4Ó4ˆ8Ð>¸$Ð>ó    c                 ó®  ^• [        U 5      (       a   U R                  R                  =(       d    0 nO'[        U 5      (       a  U R                  =(       d    0 nOgUR	                  5       nSSKJn  U" U SS9u  p4SR                  U5      mU4S jU 5       nU H  u  pg U" U5      X44:X  a  Us  $ M     g! [         a    / SpC NJf = f! [         a     M<  f = f)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   ó>   >#   • U  H  u  pUT;   d  M  X4v •  M     g 7f©N© )Ú.0r)   Úobjr   s      €r*   Ú	<genexpr>Úoutermost.<locals>.<genexpr>3   s   øé € ÐEªH™j˜t¸À¹‹z��zªHùs   ƒ“
)	r   Ú__func__Ú__globals__r   Úitemsr"   r-   Ú	ExceptionÚjoin)	ÚfuncÚ_globalsr-   ÚlinesÚlnumÚ_localsr)   r4   r   s	           @r*   r   r       sÍ   ø€ ô
 �‡~�~Ø—=‘=×,Ñ,×2°‰Ü	�D×	Ñ	Ø×#Ñ#×) r‰àØ�~‰~Ó€Hå&Ù$ T°TÑ:‰ˆð �7‰7�5‹>€DäE©HÓE€Gã‰ˆð	Ù˜cÓ" u lÓ2¸3²JÑ2ñ ð
 øô ó Ø˜Šdðûô ó 	Úð	ús$   Á/	B3 ÂCÂ3CÃCÃ
CÃCc           	      ó  • [        U 5      n [        U 5      (       d  / $ [        5       nU R                   HL  nUc  M  [        U5      nU(       d  M  UR	                  U5        U(       d  M6  U[        [        USS95      -  nMN     [        U5      $ )zAget the code objects for any nested functions (e.g. in a closure)T©Úrecurse)r   r   ÚsetÚ	co_constsÚaddr   Úlist)r<   rC   ÚnestedÚcos       r*   r   r   <   ss   € ä�‹:€DÜ�$�<‰< ˜Ü‹U€FØ�nŒnˆØ‰:‘xÜ�"‹Xˆßˆ2Ø�J‰J�rŒNßˆw˜¤#¤j°¸TÑ&BÓ"CÑCšñ ô �‹<Ðr+   c                 ó  • [        U 5      (       a  U R                  n [        U 5      (       a  U R                  n [	        U 5      (       a  U R
                  n [        U 5      (       a  U R                  n [        U 5      (       a  U $ g)zvget the code object for the given function or method

NOTE: use dill.source.getsource(CODEOBJ) to get the source code
N)	r   r7   r   Ú__code__r   Útb_framer   Úf_coder   ©r<   s    r*   r   r   I   s\   € ô
 �‡~�~˜dŸm™m�tÜ�$×Ñ §¡˜Ü�4×Ñ §¡˜$Üˆt‡}�}˜TŸ[™[�dÜˆd‡|�|˜D�[Ø
r+   c                 óÈ  • SSK n[        5       n[        X5       H»  nUR                  U5       H£  n[	        USS5      n[	        USS5      UL a  UR                  U5        M3  [	        USS5      UL a  UR                  U5        MV  [	        USS5      UL a  UR                  U5        My  [        US5      (       d  MŒ  XTL d  M’  UR                  U5        M¥     M½     [        U5      $ )a6  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   Nr7   rK   rM   Úco_code)ÚgcrD   r   Úget_referrersÚgetattrrF   ÚhasattrrG   )r<   rC   rQ   ÚfuncsrI   r4   Ú_s          r*   r   r   V   s¸   € ó Ü‹E€Eä˜Ö'ˆà×#Ñ# BÖ'ˆCä˜˜Z¨Ó.ˆAÜ�q˜* dÓ+¨rÒ1°5·9±9¸S¶>ä˜˜j¨$Ó/°2Ò5°u·y±yÀ¶~ä˜˜h¨Ó-°Ò3°U·Y±Y¸s¶^ä˜˜i×(Ó(¨S¬Y¸¿	¹	À#¾ó (ñ (ô" �‹;Ðr+   c                 óè   ^ ^• [        T 5      (       a  T R                  m [        T 5      (       a,  T R                  =(       d    SmT R                  R
                  m O0 $ UU 4S jn[        U" 5       5      $ )zcget objects defined in enclosing code that are referred to by func

returns a dict of {name:object}r2   c               3   ó’   >#   • [        TT5       H!  u  p UR                  nXR                  4v •  M#     g ! [         a     M3  f = f7fr1   )ÚzipÚcell_contentsÚ
ValueError)r)   ÚcrZ   Úclosuresr<   s      €€r*   Úget_cell_contentsÚ#freevars.<locals>.get_cell_contents€   sI   øé € Ü˜4 Ö*‰GˆDðØ !§¡�ð Ÿ™Ð'Ô'ò +øô ó Úðüs%   ƒA–6¢A¶
AÁ AÁAÁA)r   r7   r   Ú__closure__rK   Úco_freevarsÚdict)r<   r^   r]   s   ` @r*   r   r   u   s[   ù€ ô �‡~�~˜dŸm™m�tÜ�$×ÑØ×#Ñ#×) rˆØ�}‰}×(Ñ(‰àˆ	ö(ô Ñ!Ó#Ó$Ð$r+   c                 ó  • [        U 5      n U c
  [        5       $ SSKnSSKJn  UR
                  S:¬  n[        5       nU" S5       n [        R                  " U 5        SSS5        WR                  5       R                  5        H|  nSU;   d  M  UR                  S5      S	   R                  S
5      S   nU(       a3  UR                  UR                  SS5      R                  SS5      5        Mk  UR                  U5        M~     [        U S[        5       5       H@  n	U	(       d  M  U(       d  M  [!        U	5      (       d  M'  UR#                  [%        U	SS95        MB     [        U5      $ ! [         a     GNf = f! , (       d  f       GN"= f)z.get the names of any globals found within funcNr   r   )Úcapturei§ ÚstdoutÚ_GLOBALÚ(éÿÿÿÿÚ)zNULL + r/   z + NULLrE   TrB   )r   rG   ÚsysÚtemprd   Ú
hexversionrD   ÚdisÚ
IndexErrorÚgetvalueÚ
splitlinesÚsplitrF   ÚreplacerS   Útupler   Úupdater   )
r<   rC   rj   rd   ÚCAN_NULLÚnamesÚoutÚliner)   rI   s
             r*   r   r   ‹   s+  € ä�‹:€DØ�|œD›F�]ÛÝØ�~‰~ Ñ*€HÜ‹E€EÙ	�Ô	˜cð	Ü�GŠG�DŒM÷ 
ð
 —‘“×)Ñ)Ö+ˆØ˜ÕØ—:‘:˜c“? 2Ñ&×,Ñ,¨SÓ1°!Ñ4ˆDÞØ—	‘	˜$Ÿ,™, y°"Ó5×=Ñ=¸iÈÓLÖMà—	‘	˜$–ñ ,ô �d˜K¬«Ö1ˆßˆ2—'�'œf RŸj›jØ�L‰Lœ r°4Ñ8Ö9ñ 2ô �‹;Ðøô ó 	Úð	ú÷ 
Ö	ús*   ÁE7ÁE&Å&
E4Å0E7Å3E4Å4E7Å7
Fc                 ó6   • [        XU5      R                  5       $ )z@get the names of objects in the global scope referred to by func)r   r$   )r<   rC   Úbuiltins      r*   r   r   ¤   s   € ä�d WÓ-×2Ñ2Ó4Ð4r+   c                 óâ  ^	• [        U 5      (       a  U R                  n [        U 5      (       Ga[  U(       a&  [        [	        [
        5      5      R                  5       O0 m	U [        5       pUR                  =(       d    0  HG  n UR                  n[        XQU5      =(       d    0 nU R                  U5        T	R                  U5        MI     T	R                  UR                  =(       d    0 5        U(       d'  U R                  UR                  R                  5        GO/U R                  [!        UR                  5      5        U R                  5        H6  nT	R#                  U5      nXƒL a  M  U R                  [        USU5      5        M8     OÀ[%        U 5      (       a®  U(       a&  [        [	        [
        5      5      R                  5       O0 m	U(       d  U R                  n OmU R&                  n[        [!        U 5      5      n U R                  5        H6  nXsL a  M	  T	R#                  U5      nU R                  [        USU5      5        M8     O0 $ [)        U	4S jU  5       5      $ ! [         a     GMï  f = f)z`get objects defined in global scope that are referred to by func

return a dict of {name:object}Tc              3   ó@   >#   • U  H  oT;   d  M
  UTU   4v •  M     g 7fr1   r2   )r3   r)   Úglobss     €r*   r5   Úglobalvars.<locals>.<genexpr>Ú   s!   øé € ÐEªt t¸u±}Ó"��e˜D‘kÕ"ªtùs   ƒ	�)r   r7   r   r#   r   ÚsumÚcopyrD   r`   rZ   r   rt   r[   r8   rK   Úco_namesr   Úgetr   Úco_namerb   )
r<   rC   rz   Ú	orig_funcr4   rZ   Ú_varsÚkeyÚnested_funcr}   s
            @r*   r   r   ¨   sÐ  ø€ ô �‡~�~˜dŸm™m�tÜ�$×ÒÞ/6””Yœs“^Ó$×)Ñ)Ô+¸Bˆà¤£�4Ø×(Ñ(×.¨BÒ.ˆCð$Ø #× 1Ñ 1�ô # =¸7ÓC×IÀr�Ø—‘˜EÔ"Ø—‘˜UÖ#ñ /ð 	�‰�Y×*Ñ*×0¨bÔ1æØ�K‰K˜	×*Ñ*×3Ñ3Ö4à�K‰Kœ i×&8Ñ&8Ó9Ô:à—y‘y–{�Ø#Ÿi™i¨›n�ØÒ+áØ—‘œJ {°D¸'ÓBÖCò #ô 
��‰Þ/6””Yœs“^Ó$×)Ñ)Ô+¸BˆæØ—=‘=‰DàŸ™ˆIÜ”} TÓ*Ó+ˆDà—y‘y–{�ØÒ#áØ#Ÿi™i¨›n�Ø—‘œJ {°D¸'ÓBÖCò #ð ˆ	äÔE©tÓEÓEÐEøôM ó Ûðús   ÂIÉ
I.É-I.c                 ój   • [        U 5      n [        U 5      (       d  gU R                  U R                  4$ )zpget names of variables defined by func

returns a tuple (local vars, local vars referrenced by nested functions)r2   )r   r   Úco_varnamesÚco_cellvarsrN   s    r*   r   r   Ý   s0   € ô �‹:€DÜ�$�<‰<ØØ×Ñ˜T×-Ñ-Ð-Ð-r+   c                 óh  • [        U S5      (       d#  [        U SX5      4 Vs/ s H	  o3c  M  UPM     sn$ [        U SS5      (       a  U R                  5       OU n / nU  Vs/ s H&  oUU;  d  M
  UR	                  [        USX5      5      PM(       nU Vs/ s H	  o3c  M  UPM     sn$ s  snf s  snf s  snf )z'get items in object that fail to pickleÚ__iter__r   NÚvalues)rT   r   rS   r�   Úappend)r4   ÚexactÚsafeÚjÚ_objÚis         r*   r   r   ç   s¡   € ä�3�z×"Ñ"Ü& s¨1¨UÓ8Ñ:ÓLÒ:�a—Ñ:ÑLÐLÜ! # h¨t×4Ñ4ˆ#�*‰*Œ,¸#€CØ€DÙ69ÓK²c°Àd¹]Ó,€T‡[�[”˜A˜a Ó+Ö,±cÑKÙÓ-’t�!�A‘tÑ-Ð-ùò	 Mùò LùÚ-s"   ¢B%¬B%Á	B*Á, B*ÂB/ÂB/c                 óŽ   ^ ^^^^• SSK Jm  T(       d  T" T TT5      (       a  gT $ [        UUU UU4S j[        T 5       5       5      $ )zget objects that fail to pickler   ©ÚpicklesNc              3   ó”   >#   • U  H=  nT" [        TU5      TT5      (       a  M  U[        [        TU5      TS -
  TT5      4v •  M?     g7f©r   N)rS   r   ©r3   ÚattrÚdepthr�   r4   r–   r�   s     €€€€€r*   r5   Úbadobjects.<locals>.<genexpr>÷   sI   øé € ð NÚˆt¡w¬w°s¸4Ó/@ÀÀt×'Ló J�$œ
¤7¨3¨tÓ#4°U¸1±W¸UÀ4ÓHÕIÚùó
   ƒA¤$A)Údillr–   rb   Údir©r4   r›   r�   r�   r–   s   ````@r*   r   r   ñ   sG   ü€ åÞÙ�3�u˜T×"Ñ"¨4Øˆ
Ü÷ Nð NÜ˜3”xóNó Oð Or+   c                 ó    ^ ^^^^• SSK Jm  T(       d  T" T TT5      (       a  g[        T 5      $ [        UUU UU4S j[	        T 5       5       5      $ )z)get types for objects that fail to pickler   r•   Nc              3   ó”   >#   • U  H=  nT" [        TU5      TT5      (       a  M  U[        [        TU5      TS -
  TT5      4v •  M?     g7fr˜   )rS   r   r™   s     €€€€€r*   r5   Úbadtypes.<locals>.<genexpr>   sI   øé € ð NÚˆt¡w¬w°s¸4Ó/@ÀÀt×'Ló H�$œ¤¨¨TÓ!2°5¸±7¸5ÀÓFÕGÚùr�   )rž   r–   Útyperb   rŸ   r    s   ````@r*   r   r   ú   sL   ü€ åÞÙ�3�u˜T×"Ñ"¨4Ü�C‹yÐÜ÷ Nð NÜ˜3”xóNó Oð Or+   c                 ó  • SSK JnJn  U(       d^   U" U 5      nU(       a  X`:X  d   SU< SU < 35       e[        U5      [        U 5      :X  d!   S[        U5      < S[        U 5      < 35       eg0 n[        U 5       H0  n	 [        X	5      n
U" X¢U5      (       a  M  [        X¡S-
  X#5      X‰'   M2     U$ ! [         a    SSKnUR                  5       S   s $ f = f! [         a    SSKnUR                  5       S   X‰'    Mƒ  f = f)z*get errors for objects that fail to pickler   )r–   r€   zUnpickling produces z instead of Nr   )
rž   r–   r€   r¤   r:   rj   Úexc_inforŸ   rS   r   )r4   r›   r�   r�   r–   r€   Úpikrj   Ú_dictrš   Ú_attrs              r*   r   r     sÿ   € ç"Þð
	%Ù�s“)ˆCÞØ“zñ GÛ>AÂ#ÐFóG�zä˜“9¤ S£	Ó)ñ OÜ:>¸s¾)ÄDÈÅIÐNóOÐ)àð €EÜ�C–ˆð	Ü˜CÓ%ˆEñ
 �u 4×(Ó(Ü  ¨Q¡w¨uÓ:ˆE‹Kñ ð €Løô ó 	%ÛØ—<‘<“> !Ñ$Ò$ð	%ûô ó 	ÛØŸ,™,›.¨Ñ+ˆE‰KÚð	ús$   ‘AB1 Á?CÂ1!CÃCÃ#C?Ã>C?)NF)T)TF)FF)r   FF)Ú__doc__rm   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®      sp   ðñó ß FÕ Fç >Õ >Ý òB€ô?òô8ò
ôò>%ô,ô25ô2Fòj.ô.ôOôOõr+   