
    uYfs                     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         C:\Users\Admin\Desktop\cercetare\experiment de trasmitere a informatiei din viitor in prezent\qiskit_env\Lib\site-packages\dill/pointers.pyr   r      s<     EC%00EYY[[F}}tM    c                     t           j        }fd}t          |d          s|fn|}d |D             }t          | |||          ddd         }|S )zFind 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gg((((((r   N)gcget_referentshasattr
find_chainr   r   r   r   	edge_func	predicater   s    `     r   r   r   %   sk      I0000I%fi88DfYYfF(((((FsIy%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0I%fi88DfYYfF(((((FsIy%@@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:   EEWWaLEggt_FF
JJr,   
JJr%yy
JJr%yy
JJr&zz
JJr&zz
JJr#-//""###
JJr#-""##$$$JLLL
 )19V 	HEF$06

+V$$$ F$0 Lr&zz"I!	&))IJJr)}}%%%# ) )f::''f::U**(.
E"V**%)/F2f::&LL(((%  )& 5Lr   )r   )r   r   )r2   r   )__all__r'   r6   _dillr	   r   r
   r   r   r   r   r*   	refobjectr   r   r   <module>rD      s    ?
>
> 				 



 - - - - - - ' ' ' ' ' '   (   "   :       H 			r   