
    biy                        U d dl mZ d dlZd dlZd dlmZ  e       Zded<    e       Z	ded<   dZ
 ej                  ej                        Z G d d	      Zy)
    )annotationsN)Anyobject	NOT_FOUNDNULL2   c                      e Zd Ze	 	 	 	 	 	 dd       Ze	 d	 	 	 	 	 	 	 	 	 d	d       Ze	 	 d
	 	 	 	 	 	 	 	 	 	 	 dd       Ze	 	 d
	 	 	 	 	 	 	 	 	 	 	 dd       Ze	 	 	 	 	 	 	 	 dd       Z	y)DeduperReloaderPatchingMixinc                   t        | |t              }|t        u ryt        j                  j	                  t        j
                  |             j                  }t        j                  j	                  t        j
                  |            j                  }||yd}t        dt              D ]_  }t        j                  |t        |z  z   t        j                  t        j                              j                  j                  |k(  s\|} |S  |S )N   )getattrr   ctypesc_void_pfrom_buffer	py_objectvaluerange_MAX_FIELD_SEARCH_OFFSETcastPOINTER_N_BYTESPOINTERcontents)objfieldfield_valueobj_addr
field_addrretoffsets          r/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/IPython/extensions/deduperreload/deduperreload_patching.pyinfer_field_offsetz/DeduperReloaderPatchingMixin.infer_field_offset   s    
 c5)4)#??..v/?/?/DEKK__001A1A+1NOUU
z1A78 	F779X(55
 
	 
    Nc                   t        ||t              }|t        u ry || j                  ||      }|dk(  ry t        j                  j                  t        j                  |            j                  }|t        u rd}n<t        j                  j                  t        j                  |            j                  }||y |2t        j                  j                  t        j                  |             |d t        fvr2t        j                  j                  t        j                  |             |t        j                  |t        |z  z   t        j                  t        j                              j                  _        y )Nr   r   )r   r   r"   r   r   r   r   r   r   	pythonapi	Py_DecRef	Py_IncRefr   r   r   r   )clsr   r   	new_valuer    
prev_valuer   new_value_addrs           r!   try_write_readonly_attrz4DeduperReloaderPatchingMixin.try_write_readonly_attr&   s0    S%3
">++C7FR<??..v/?/?/DEKK)*N#__88  +e  ~5!&&v'7'7
'CDT4L(&&v'7'7	'BC * 	//1P	

(5r#   c                   t        ||t              }|r|nt        ||t              }|t        u s|t        u ry ||u ry ||dk  r| j                  ||      }n|dk  r|rJ |J | j                  ||      }| j                  ||||       y )Nr   )r    )r   r   r"   r,   )r(   oldnewr   new_is_valuer    	old_valuer)   s           r!   try_patch_readonly_attrz4DeduperReloaderPatchingMixin.try_patch_readonly_attrF   s     C	2	'CWS%-K		!Y)%;)#"vz++C7FaZ###(((++C7F##C	&#Ir#   c                    	 t        |||r|       y t        ||             y # t        t        t        f$ r | j                  |||||       Y y w xY wN)setattrr   AttributeError	TypeError
ValueErrorr2   )r(   r.   r/   r   r0   r    s         r!   try_patch_attrz+DeduperReloaderPatchingMixin.try_patch_attr]   sP    	OC|Me9LM	:6 	O''S%vN	Os   # # )AAc                   g }t        |j                  j                  xs g |j                  xs g       D ]  \  }}t	        |j
                        rZ||j                  j                  v rB|j                  |j                  |j                  j                  j                  |                u|j                  |        | j                  ||d       d}|j                  |j                  | j                  |d      }|j                  |j                  '| j                  |t        |      xs t        dd|       dD ]  }| j                  |||        |r| j                  ||d       y y )N__code__r   __closure__T)r0   r    )__defaults____kwdefaults____doc____dict____self__)zipr;   co_freevarsr<   callablecell_contentsappendindexr9   r"   r2   tupler   )	r(   to_patch_toto_patch_from	is_methodnew_closurefreevarclosure_valr    attrs	            r!   patch_functionz+DeduperReloaderPatchingMixin.patch_functionk   ss    $'""..4"m6O6O6USU%
 	0 G[ 223{33???""++#,,88>>wG "";/	0 	;zB""*}/H/H/T++M=IF"".-2K2K2W''k"*d! (  N 	AD{M4@	A'']JO r#   )r   r   r   strreturnintr4   )
r   r   r   rQ   r)   r   r    z
int | NonerR   None)Fr   )r.   r   r/   r   r   rQ   r0   boolr    rS   rR   rT   )rI   r   rJ   r   rK   rU   rR   rT   )
__name__
__module____qualname__staticmethodr"   classmethodr,   r2   r9   rP    r#   r!   r
   r
      sm    
 .  "** * 	*
 * 
* *>  #JJ J 	J
 J J 
J J,  #OO O 	O
 O O 
O O "P"P.1"P>B"P	"P "Pr#   r
   )
__future__r   r   systypingr   r   r   __annotations__r   r   sizeofr   r   r
   r[   r#   r!   <module>ra      sQ    "  
 H	6 xf  &--0AP APr#   