
    h                     *   S r SSKrSSKrSSKrSSKr SSKrSr\	" \SS 5      r
0 r0 r\" \\\\\\45      r\" S \\R(                  \R*                  \R,                  \4 5       5      rS r\S\S\S\S\S\S\S\R6                  S\R8                  S\R:                  S0
4S	 jrSS
 jrS r SS jr!S r"\#r#S r$\$\l#        \%" \S5      (       a  \?&\" \R(                  RO                  5       5       H  r(\" \(5        M     \ " 5         g! \ a    Sr Nf = f)z@
Module to show if an object has changed since it was memorised
    NTFgetrefcountc                     g)Nr    )xs    E/home/james-whalen/.local/lib/python3.13/site-packages/dill/__diff.py<lambda>r      s    1    c              #   8   #    U  H  n[        U5      v   M     g 7fN)id).0is     r   	<genexpr>r   !   s      %  $!1  $s   c                 |    [        U 5      [        ;   d  [        U 5      [         L a  U [        ;   a  g[        U SS5      $ )zI
Gets all the attributes of an object though its __dict__ or return None
N__dict__)typebuiltins_typesgetattr)objs    r   	get_attrsr   %   s5     CyN"
s)t
~ 53
D))r	   c                     U R                   n[        nX!;   a*  X   (       a   U" U S5      (       a  U R	                  5       $ U $ g[
        (       a^  U[        R                  [        R                  R                  R                  4;   a&  U R                  (       a  U R                  (       a  U $ / $ U" U S5      (       aj  U" U S5      (       a\  U" U S5      (       aN  U" US5      (       a@  U" US5      (       a2  U" US5      (       a$  SX'   U" U S5      (       a  U R	                  5       $ U $ SX'   g! [         a    [        U 5      n GN3f = f)z1
Gets all the items in a sequence or return None
copy__contains____iter____len__TFN)	__class__AttributeErrorr   hasattrr   	HAS_NUMPYnumpyndarraymacoreMaskedConstantshapesize)r   cacheo_typehsattrs       r   get_seqr*   /   s    F=c6""xxz!J  
v%--1M1M!NN99JI	^	$	$Z)@)@#y!!fV^&D&D&*%%&*C*C#v88:
-  cs   D) )EEc                 V  ^ [        U 5      nU[        ;   a  U(       a
  U[        ;   a  g[         m[        U 5      nUc  SnO#[	        U4S jUR                  5        5       5      n[        U 5      nUc  SnOa[        US5      (       a$  [	        U4S jUR                  5        5       5      nO,[        US5      (       d  SnOU Vs/ s H  nT" U5      PM     nnXF4[        U'   U [        U'   [        nUb*  UR                  5        V	V
s/ s H  u  pU" U
5      PM       n	n
Ubv  [        US5      (       a3  UR                  5        V	Vs/ s H  u  pU" U	5      U" U5      4PM       n	ng[        US5      (       a  U Vs/ s H
  o" U5      PM       ngU" U5        ggs  snf s  sn
n	f s  snn	f s  snf )z
Adds an object to the memo, and recursively adds all the objects
attributes, and if it is a container, its items. Use force=True to update
an object already in the memo. Updating is not recursively done.
Nc              3   <   >#    U  H  u  pUT" U5      4v   M     g 7fr   r   r   keyvalueid_s      r   r   memorise.<locals>.<genexpr>_   s     E9ZSSZ(9s   itemsc              3   H   >#    U  H  u  pT" U5      T" U5      4v   M     g 7fr   r   r-   s      r   r   r1   e   s      Hi
s3xE
+is   "r   )
r   memo	dont_memor   dictr2   r*   r   	id_to_objmemorise)r   forceobj_idgattrs_idsseq_idr   memr.   r/   itemr0   s               @r   r8   r8   Q   st    WF~ev':
C#AyE1779EEAy	G		HaggiHHQ	"""#$!Q#a&!$#DLIf
C}&'ggi0i
Ui0}1gggi)' #hD	"') q)$$'()qtTq)a&  % 	1) *s   FFF 7F&c                      [         R                  [        R                  [        p!n [	        [         R                  5       5       VVs/ s H#  u  p4U" U5      S:  d  M  U " U5      U" U5      4PM%       nng s  snnf )N   )r7   popr4   r   listr2   )itopmpsrcr0   r   s        r   release_gonerH   {   s]    MM488[cD*.y/@*A *AhcC1 d3iC*A  s   A4A4c                 \  ^ U(       a  S[         R                  ;   a  [         ?Uc  0 n[        U 5      nXA;   a  U(       a  [	        X   5      $ X   $ U[
        ;   a  0 S/X'   U(       a  gX   $ U[        ;  a  U(       a  g[        S[        U 5      -   5      e0 S4X'   [        n[        n[        U 5      mTc  0 nOn[        U   S   nUR                  n	[        U4S jU 5       5      nTR                  5        H-  u  pU" U5      U	" U
S5      :w  d  U" XSS5      (       d  M)  XU
'   M/     [        U 5      nSnUb  [        US5      (       a  [        U   S	   n[!        U5      [!        U5      :w  a  SnO[        U S
5      (       a`  UR                  n	UR                  5        H?  u  pU" U5      U	" U" U
5      5      :w  d   U" XSS5      (       d  U" XSS5      (       d  M=  Sn  O8   O5[#        X5       H&  u  nnU" U5      U:w  d  U" UUSS5      (       d  M$  Sn  O   X}4X'   U(       a  U=(       d    U$ X}4$ )a/  
Check an object against the memo. Returns a list in the form
(attribute changes, container changed). Attribute changes is a dict of
attribute name to attribute value. container changed is a boolean.
If simple is true, just returns a boolean. None for either item means
that it has not been checked yet
_NFTzObject not memorised r   c              3   :   >#    U  H  oT;  d  M
  US 4v   M     g 7fr   r   )r   r.   attrss     r   r    whats_changed.<locals>.<genexpr>   s     KYcU:JzDzYs   	r      r2   )builtinsr   rJ   r   anyr5   r4   RuntimeErrorstrwhats_changedr   getr6   r2   r*   r   lenzip)r   seensimplefirstr:   chngdr0   changed	obj_attrsobj_getr.   or2   seq_diffobj_seqr@   r   jrL   s                     @r   rS   rS      s    (###
<DWF~t|$$| E{|	t	6SABB;DLE
C cNE}LO	--KYKKkkmFC1vd++uQdE/J/J  $
 CLEHy 9 9v,q/J#g,&HS'""kkG"[[]	t9C 11CtU33De44#H + E+1q6Q;%4u"="=#H , $DL"("r	   c                  "    SUS'   [        U 0 UD6$ )NTrX   )rS   )argskwdss     r   has_changedre      s    DN$'$''r	   c                      [        [        R                  R                  5       5      n[	        U 0 UD6n[        [        R                  R                  5       5      R                  U5      nU H  n[        [        R                  U   5        M!     U$ )zb
Replaces the default __import__, to allow a module to be memorised
before the user can change it
)setsysmoduleskeys
__import__
differencer8   )rc   rd   beforemodafterms         r   _imprq      sk    
 !!#$F
d
#d
#C  "#..v6EQ  Jr	   rJ   )F)NFT))__doc__rO   osrh   typesnumpy.mar    r   ImportErrorr   r   r4   r7   rg   rR   rD   r6   	frozensetintr   ri   path_importer_cacheenvironr5   r   tupler   
ModuleTypeFunctionTypeBuiltinFunctionTyper*   r8   rH   rS   re   rk   rq   r   rJ   valuesrn   r   r	   r   <module>r      sZ    	 
 I
 c=*5
 
	c4sIs;< %ckk33J3JZZ $ % %	* UIudD#tdE4u((%1C1CU115: D'TK\( 

  
8S
 ""$%CSM & m  Is   D DD