
    uYfj+                         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           C:\Users\Admin\Desktop\cercetare\experiment de trasmitere a informatiei din viitor in prezent\qiskit_env\Lib\site-packages\dill/detect.pyr   r      s    ++++++VFI&&F)U)6MOOO76&&&DtH~~22444488$>    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 )zget 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EjtCSz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&&&&&&$nTT:::tt   d775>>DEEEEHEEEG  S	~c""uTl223JJJ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$<<"UUFn D D:x"XX 	DJJrNNN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    
 ~~+dmt$-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    IIIEEEw'' G G##B'' 		G 		GCZ..Aq*d++r11599S>>>>j$//255uyy~~~~h--33UYYs^^^^i((FSBYY		#		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** 	( 	(GD! !   '''''	( 	(s   "
//)r   r6   r   __closure__rJ   co_freevarsdict)r;   r]   r\   s   ` @r*   r   r   u   s~     ~~+dmt$ #)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|DFF]JJJ~*HEEE			 c              ))++    ::c??2&,,S11!4D  		$,,y"55==iLLMMMM		$dK11 : : 	:' 	:fRjj 	:LLr4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     dGW--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|                     Ant%          |           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Ettu}}eDk"}}}}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    ~~+dmt$ +/6>Ys^^$$))+++B4	(.B 	$ 	$C$ # 1 #='7CCIrE"""U####     	Y*0b111 
	DKK	*34444KKi&899:::yy{{ D D#iinn)++J{D'BBCCCCD 
 /6>Ys^^$$))+++B 	D=DDI}T**++Dyy{{ D D)###iinnJ{D'BBCCCCD 	EEEEt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Laammmmr+   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Qd]]T[[Aa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    3z"" MLLJs1U488:LLLL!#ht44
=#**,,,#CDKKKKKKc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wwws4/@/@t'L'LN$
73t#4#4U1WU4HHI N N N N N Nr+   )dillr   r`   dirr4   r   r   r   r   s   ````@r*   r   r      s     73uT""/44
 N N N N N N N N3xx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wwws4/@/@t'L'LN$T!2!2575FFG N N N N N Nr+   )r   r   typer`   r   r   s   ````@r*   r   r      s     73uT""/44Cyy N N N N N N N N3xx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czzzz>Acc##F "zz99S		)))):>s))))DIIIN *))4 	% 	% 	%JJJ<<>>!$$$$	% EC ; ;	C%%EE 	 	 	JJJ,,..+E$KH	 wuU4(( 	; uQwuT::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+   