
    \DiRt                        S r SSKJr  SSKrSSKrSSKrSSKrSSKr SSKJ	r	   SSKJr  SSKJrJr  SrSr SSKJrJr  S	rS
rSrSr\R6                  S:  a  \\4r " S S\5      r " S S\5      r  " S S\5      r! " S S\\"5      r#S r$\RJ                  " \RL                  \$S9r'S\4S jr(\4S jr) " S S\*5      r+ " S S\+5      r, " S S \+5      r- " S! S"\+5      r. " S# S$\+5      r/ " S% S&\+5      r0 " S' S(\+5      r1 " S) S*\*5      r2 " S+ S,\*5      r3S- r4g! \
 a
    SSKJ	r	   GNf = f! \
 a    \r GNf = f! \
 a    SSKJrJr  \r GNf = f).zApply JSON-Patches (RFC 6902)     )unicode_literalsN)Sequence)MappingProxyType)JsonPointerJsonPointerException   )MutableMappingMutableSequenceu    Stefan Kögl <stefan@skoegl.net>z1.33z0https://github.com/stefankoegl/python-json-patchzModified BSD License)   r   c                       \ rS rSrSrSrg)JsonPatchExceptionP   zBase Json Patch exception N__name__
__module____qualname____firstlineno____doc____static_attributes__r       Q/var/www/html/Aiprofessor/professorTrac/lib/python3.13/site-packages/jsonpatch.pyr   r   P       #r   r   c                       \ rS rSrSrSrg)InvalidJsonPatchT   z+Raised if an invalid JSON Patch is created r   Nr   r   r   r   r   r   T   s    6r   r   c                       \ rS rSrSrSrg)JsonPatchConflictX   zRaised if patch could not be applied due to conflict situation such as:
- attempt to add object key when it already exists;
- attempt to operate with nonexistence object key;
- attempt to insert value to array at position beyond its size;
- etc.
r   Nr   r   r   r   r   r   X   s    r   r   c                       \ rS rSrSrSrg)JsonPatchTestFaileda   zA Test operation failed r   Nr   r   r   r   r!   r!   a   r   r   r!   c                     [         R                  " [        5      nU  H  u  p#X   R                  U5        M     [	        S UR                  5        5       5      $ )z'Convert duplicate keys values to lists.c              3   V   #    U  H  u  pU[        U5      S :X  a  US   OU4v   M!     g7f)r   r   N)len).0keyvaluess      r   	<genexpr>multidict.<locals>.<genexpr>l   s1       )KC 
3v;!+fQi8(s   '))collectionsdefaultdictlistappenddictitems)ordered_pairsmdictr'   values       r   	multidictr4   e   sT     ##D)E#

%  $   !;;=  r   )object_pairs_hookFc                     [        U[        5      (       a  [        R                  XS9nO	[        XS9nUR	                  X5      $ )aL  Apply list of patches to specified json document.

:param doc: Document object.
:type doc: dict

:param patch: JSON patch as list of dicts or raw JSON-encoded string.
:type patch: list or str

:param in_place: While :const:`True` patch will modify target document.
                 By default patch will be applied to document copy.
:type in_place: bool

:param pointer_cls: JSON pointer class to use.
:type pointer_cls: Type[JsonPointer]

:return: Patched document object.
:rtype: dict

>>> doc = {'foo': 'bar'}
>>> patch = [{'op': 'add', 'path': '/baz', 'value': 'qux'}]
>>> other = apply_patch(doc, patch)
>>> doc is not other
True
>>> other == {'foo': 'bar', 'baz': 'qux'}
True
>>> patch = [{'op': 'add', 'path': '/baz', 'value': 'qux'}]
>>> apply_patch(doc, patch, in_place=True) == {'foo': 'bar', 'baz': 'qux'}
True
>>> doc == other
True
pointer_cls)
isinstance
basestring	JsonPatchfrom_stringapply)docpatchin_placer8   s       r   apply_patchrA   x   s>    B %$$%%e%E%9;;s%%r   c                 *    [         R                  XUS9$ )a  Generates patch by comparing two document objects. Actually is
a proxy to :meth:`JsonPatch.from_diff` method.

:param src: Data source document object.
:type src: dict

:param dst: Data source document object.
:type dst: dict

:param pointer_cls: JSON pointer class to use.
:type pointer_cls: Type[JsonPointer]

>>> src = {'foo': 'bar', 'numbers': [1, 3, 4, 8]}
>>> dst = {'baz': 'qux', 'numbers': [1, 4, 7]}
>>> patch = make_patch(src, dst)
>>> new = patch.apply(src)
>>> new == dst
True
r7   )r;   	from_diff)srcdstr8   s      r   
make_patchrF      s    * s[AAr   c                       \ rS rSrSr\4S jrS rS rS r	S r
\S 5       r\S	 5       r\R                  S
 5       rSrg)PatchOperation   z'A single operation inside a JSON Patch.c                 h   X l         UR                  S5      (       d  [        S5      e[        US   U R                   5      (       a  US   R                  U l        US   U l        O+US   U l         U R                  U R
                  5      U l        Xl        g ! [         a  n[        S5      eS nAff = f)Npathz#Operation must have a 'path' memberzInvalid 'path')	r8   __contains__r   r9   rK   locationpointer	TypeError	operation)selfrP   r8   exs       r   __init__PatchOperation.__init__   s    &%%f--"#HIIi')9)9::%f-22DM$V,DL%f-DM9#//> #  9&'7889s   0 B 
B1!B,,B1c                     [        S5      e)zGAbstract method that applies a patch operation to the specified object.z%should implement the patch operation.)NotImplementedError)rQ   objs     r   r=   PatchOperation.apply   s    !"IJJr   c                 Z    [        [        U R                  R                  5       5      5      $ N)hash	frozensetrP   r0   rQ   s    r   __hash__PatchOperation.__hash__   s    Idnn224566r   c                 `    [        U[        5      (       d  gU R                  UR                  :H  $ NF)r9   rH   rP   rQ   others     r   __eq__PatchOperation.__eq__   s%    %00~~00r   c                     X:X  + $ rZ   r   rb   s     r   __ne__PatchOperation.__ne__       !!r   c                 R    SR                  U R                  R                  S S 5      $ )N/)joinrN   partsr]   s    r   rK   PatchOperation.path   s"    xx**3B/00r   c                      [        U R                  R                  S   5      $ ! [         a    U R                  R                  S   s $ f = f)Nrl   )intrN   rn   
ValueErrorr]   s    r   r'   PatchOperation.key   sE    	*t||))"-.. 	*<<%%b))	*s   !$ #A
	A
c                     [        U5      U R                  R                  S'   U R                  R                  U l        U R                  U R
                  S'   g )Nrl   rK   )strrN   rn   rK   rM   rP   )rQ   r3   s     r   r'   rs      s=    !$U2))!%vr   )rM   rP   rN   r8   N)r   r   r   r   r   r   rS   r=   r^   rd   rg   propertyrK   r'   setterr   r   r   r   rH   rH      sb    1.9 #$K71
" 1 1 * * 	ZZ/ /r   rH   c                   *    \ rS rSrSrS rS rS rSrg)RemoveOperation   z/Removes an object property or an array element.c                 6   U R                   R                  U5      u  p#[        U[        5      (       a/  [        U[        5      (       d  [        SR                  U5      5      e X#	 U$ ! [        [        4 a!  nSR                  U5      n[        U5      eS nAff = f)Nzinvalid array index '{0}'z(can't remove a non-existent object '{0}')
rN   to_lastr9   r   rq   r   formatKeyError
IndexErrorr   )rQ   rW   subobjpartrR   msgs         r   r=   RemoveOperation.apply   s    ||++C0fh''
40E0E&'B'I'I$'OPP	)
 
	 *% 	)<CCDIC#C((	)s   #A' 'B7BBc                 ~    U R                   U:X  a,  U R                  U:  a  U =R                  S-  sl        U$ US-  nU$ Nr   rK   r'   rQ   rK   r'   s      r   _on_undo_removeRemoveOperation._on_undo_remove   s=    99xx3A 
 q
r   c                 ~    U R                   U:X  a,  U R                  U:  a  U =R                  S-  sl        U$ US-  nU$ r   r   r   s      r   _on_undo_addRemoveOperation._on_undo_add  =    99xx#~A 
 q
r   r   N	r   r   r   r   r   r=   r   r   r   r   r   r   ry   ry      s    9r   ry   c                   *    \ rS rSrSrS rS rS rSrg)AddOperationi  z,Adds an object property or an array element.c                 6    U R                   S   nU R                  R	                  U5      u  pE[        U[        5      (       aM  US:X  a  UR                  U5        U$ U[        U5      :  d  US:  a  [        S5      eUR                  XR5         U$ [        U[        5      (       a  Uc  UnU$ X$U'    U$ Uc#  [        SR                  [        U5      5      5      e[        SR                  U R                  U5      5      e! [         a  n[        S5      eS nAff = f)Nr3   /The operation does not contain a 'value' member-r   zcan't insert outside of listinvalid document type {0}2unable to fully resolve json pointer {0}, part {1})rP   r~   r   rN   r|   r9   r
   r.   r%   r   insertr	   rO   r}   typerM   )rQ   rW   r3   rR   r   r   s         r   r=   AddOperation.apply  s#   	CNN7+E
 ||++C0fo..s{e$& 
# F#tax'(FGG d* 
 //| 
  %t 
	 | ; B B4< PQQ'(\(c(cdhdqdqsw(xyy5  	C"AC C	Cs   C> >
DDDc                 ~    U R                   U:X  a,  U R                  U:  a  U =R                  S-  sl        U$ US-  nU$ r   r   r   s      r   r   AddOperation._on_undo_remove3  r   r   c                 ~    U R                   U:X  a,  U R                  U:  a  U =R                  S-  sl        U$ US-  nU$ r   r   r   s      r   r   AddOperation._on_undo_add;  r   r   r   Nr   r   r   r   r   r     s    6@r   r   c                   *    \ rS rSrSrS rS rS rSrg)ReplaceOperationiD  z?Replaces an object property or an array element by a new value.c                 >    U R                   S   nU R                  R	                  U5      u  pEUc  U$ US:X  a  [        S5      e[        U[        5      (       a!  U[        U5      :  d  US:  a  [        S5      eO[        U[        5      (       a"  XT;  a  SR                  U5      n[        U5      eOKUc#  [        SR                  [        U5      5      5      e[        S	R                  U R                  U5      5      eX$U'   U$ ! [         a  n[        S5      eS nAff = f)
Nr3   r   r   z7'path' with '-' can't be applied to 'replace' operationr   zcan't replace outside of listz)can't replace a non-existent object '{0}'r   r   )rP   r~   r   rN   r|   r9   r
   r%   r   r	   r}   rO   r   rM   )rQ   rW   r3   rR   r   r   r   s          r   r=   ReplaceOperation.applyG  s%   	CNN7+E
 ||++C0<L3;"#\]]fo..s6{"dQh'(GHH '/ //!AHHN',, " | ; B B4< PQQ'(\(c(cdhdqdqsw(xyyt
7  	C"AC C	Cs   D 
DDDc                     U$ rZ   r   r   s      r   r    ReplaceOperation._on_undo_removeg      
r   c                     U$ rZ   r   r   s      r   r   ReplaceOperation._on_undo_addj  r   r   r   Nr   r   r   r   r   r   D  s    I@r   r   c                   n    \ rS rSrSrS r\S 5       r\S 5       r\R                  S 5       rS r
S rS	rg
)MoveOperationin  z?Moves an object property or an array element to a new location.c                     [        U R                  S   U R                  5      (       a  U R                  S   nOU R                  U R                  S   5      n UR                  U5      u  pE XE   nU R                  U:X  a  U$ [        U[        5      (       a+  U R                  R                  U5      (       a  [        S5      e[        SU R                  S   S.U R                  S9R                  U5      n[        SU R                  US.U R                  S9R                  U5      nU$ ! [         a  n[	        S5      eS nAff = f! [        [        4 a  n[        [        U5      5      eS nAff = f)	Nfrom.The operation does not contain a 'from' memberz*Cannot move values into their own childrenremoveoprK   r7   addr   rK   r3   )r9   rP   r8   r~   r   r|   r   r   ru   rN   r	   containsry   r=   r   rM   rQ   rW   from_ptrrR   r   r   r3   s          r   r=   MoveOperation.applyq  sl   	B$..0$2B2BCC>>&1++DNN6,BC
  '',	-LE
 <<8#Jfn--%%h//#$PQQNN6*
 '') */s 	
 MM
 ''	) */s	 	 
;  	B"@B B	B *% 	-#CG,,	-s4   7D) D) -E )
E3D>>EE/E**E/c                 z    U R                  U R                  S   5      nSR                  UR                  S S 5      $ )Nr   rk   rl   )r8   rP   rm   rn   rQ   r   s     r   	from_pathMoveOperation.from_path  s5    ##DNN6$:;xxs+,,r   c                     U R                  U R                  S   5      n [        UR                  S   5      $ ! [         a    UR                  S   s $ f = fNr   rl   )r8   rP   rq   rn   rO   r   s     r   from_keyMoveOperation.from_key  sR    ##DNN6$:;	&x~~b)** 	&>>"%%	&s   8 AAc                     U R                  U R                  S   5      n[        U5      UR                  S'   UR                  U R                  S'   g r   )r8   rP   ru   rn   rK   )rQ   r3   r   s      r   r   r     s?    ##DNN6$:; Zr!)vr   c                     U R                   U:X  a+  U R                  U:  a  U =R                  S-  sl        OUS-  nU R                  U:X  a,  U R                  U:  a  U =R                  S-  sl        U$ US-  nU$ r   r   r   rK   r'   r   s      r   r   MoveOperation._on_undo_remove  sl    >>T!}}#"q99xx#~A 
 q
r   c                     U R                   U:X  a+  U R                  U:  a  U =R                  S-  sl        OUS-  nU R                  U:X  a,  U R                  U:  a  U =R                  S-  sl        U$ US-  nU$ r   r   r   s      r   r   MoveOperation._on_undo_add  sl    >>T!}}s""q99xx#~A 
 q
r   r   N)r   r   r   r   r   r=   rv   r   r   rw   r   r   r   r   r   r   r   r   n  sU    I#J - - & & __/ /
r   r   c                       \ rS rSrSrS rSrg)TestOperationi  z!Test value by specified location.c           
          U R                   R                  U5      u  p#Uc  UnOU R                   R                  X#5      n  U R                  S   nXF:w  a1  Sn[	        UR                  U[        U5      U[        U5      5      5      eU$ ! [         a  n[	        [        U5      5      eS nAff = f! [         a  n[        S5      eS nAff = f)Nr3   r   z0{0} ({1}) is not equal to tested value {2} ({3}))rN   r|   walkr   r!   ru   rP   r~   r   r}   r   )rQ   rW   r   r   valrR   r3   r   s           r   r=   TestOperation.apply  s    	/<<//4LF|ll''5	CNN7+E
 <DC%cjjd3i16U'E F F 
 $ 	/%c"g..	/
  	C"AC C	Cs4   "B	 B	 B/ 	
B,B''B,/
C	9CC	r   Nr   r   r   r   r   r=   r   r   r   r   r   r     s
    +r   r   c                       \ rS rSrSrS rSrg)CopyOperationi  z@Copies an object property or an array element to a new location c                     U R                  U R                  S   5      nUR	                  U5      u  pE [
        R                  " XE   5      n[        SU R                  US.U R                   S9R                  U5      nU$ ! [         a  n[        S5      eS nAff = f! [        [        4 a  n[        [        U5      5      eS nAff = f)Nr   r   r   r   r7   )r8   rP   r~   r   r|   copydeepcopyr   r   ru   r   rM   r=   r   s          r   r=   CopyOperation.apply  s    	B''v(>?H
  '',	-MM&,/E MM
 ''	) */s	 	 
!  	B"@B B	B *% 	-#CG,,	-s.   A? B ?
B	BBC,C  Cr   Nr   r   r   r   r   r     s
    Kr   r   c            	           \ rS rSr\" \R                  5      r\" \5      r	\
" \\\\\\S.5      r \4S jrS rS r\rS rS rS rS	 r\S
\4S j5       r\SS
\4S j5       rSS jr\S 5       r SS jr!S r"Sr#g
)r;   i  )r   r   replacemovetestr   c                     Xl         X l        U R                    H4  n[        U[        5      (       a  [	        S5      eU R                  U5        M6     g )NzMDocument is expected to be sequence of operations, got a sequence of strings.)r?   r8   r9   r:   r   _get_operation)rQ   r?   r8   r   s       r   rS   JsonPatch.__init__2  sQ    
& **B "j))& (P Q Q # r   c                 "    U R                  5       $ )zstr(self) -> self.to_string())	to_stringr]   s    r   __str__JsonPatch.__str__J  s    ~~r   c                 ,    [        U R                  5      $ rZ   )boolr?   r]   s    r   __bool__JsonPatch.__bool__N      DJJr   c                 ,    [        U R                  5      $ rZ   )iterr?   r]   s    r   __iter__JsonPatch.__iter__S  r   r   c                 >    [        [        U R                  5      5      $ rZ   )r[   tuple_opsr]   s    r   r^   JsonPatch.__hash__V  s    E$))$%%r   c                 `    [        U[        5      (       d  gU R                  UR                  :H  $ ra   )r9   r;   r   rb   s     r   rd   JsonPatch.__eq__Y  s%    %++yyEJJ&&r   c                     X:X  + $ rZ   r   rb   s     r   rg   JsonPatch.__ne__^  ri   r   Nc                 H    U=(       d    U R                   nU" U5      nU " XSS9$ )a`  Creates JsonPatch instance from string source.

:param patch_str: JSON patch as raw string.
:type patch_str: str

:param loads: A function of one argument that loads a serialized
              JSON string.
:type loads: function

:param pointer_cls: JSON pointer class to use.
:type pointer_cls: Type[JsonPointer]

:return: :class:`JsonPatch` instance.
r7   )json_loader)cls	patch_strloadsr8   r   r?   s         r   r<   JsonPatch.from_stringa  s'      .sI&522r   Tc                     U=(       d    U R                   n[        XXeS9nUR                  SSX5        [        UR	                  5       5      nU " XS9$ )a  Creates JsonPatch instance based on comparison of two document
objects. Json patch would be created for `src` argument against `dst`
one.

:param src: Data source document object.
:type src: dict

:param dst: Data source document object.
:type dst: dict

:param dumps: A function of one argument that produces a serialized
              JSON string.
:type dumps: function

:param pointer_cls: JSON pointer class to use.
:type pointer_cls: Type[JsonPointer]

:return: :class:`JsonPatch` instance.

>>> src = {'foo': 'bar', 'numbers': [1, 3, 4, 8]}
>>> dst = {'baz': 'qux', 'numbers': [1, 4, 7]}
>>> patch = JsonPatch.from_diff(src, dst)
>>> new = patch.apply(src)
>>> new == dst
True
r7    N)json_dumperDiffBuilder_compare_valuesr-   execute)	r   rD   rE   optimizationdumpsr8   r   builderopss	            r   rC   JsonPatch.from_diffu  sL    > .scMD#37??$%300r   c                 P    U=(       d    U R                   nU" U R                  5      $ )z!Returns patch set as JSON string.)r   r?   )rQ   r   r   s      r   r   JsonPatch.to_string  s!    /t//4::&&r   c                 T    [        [        U R                  U R                  5      5      $ rZ   )r   mapr   r?   r]   s    r   r   JsonPatch._ops  s    S,,djj9::r   c                     U(       d  [         R                  " U5      nU R                   H  nUR                  U5      nM     U$ )zApplies the patch to a given object.

:param obj: Document object.
:type obj: dict

:param in_place: Tweaks the way how patch would be applied - directly to
                 specified `obj` or to its copy.
:type in_place: bool

:return: Modified `obj`.
)r   r   r   r=   )rQ   rW   r@   rP   s       r   r=   JsonPatch.apply  s8     --$CI//#&C # 
r   c                     SU;  a  [        S5      eUS   n[        U[        5      (       d  [        S5      eX R                  ;  a  [        SR	                  U5      5      eU R                  U   nU" XR
                  S9$ )Nr   z&Operation does not contain 'op' memberzOperation's op must be a stringzUnknown operation {0!r}r7   )r   r9   r:   
operationsr}   r8   )rQ   rP   r   r   s       r   r   JsonPatch._get_operation  sx    y "#KLLt_"j))"#DEE__$"#<#C#CB#GHHoob!9*:*:;;r   )r?   r8   rZ   )F)$r   r   r   r   staticmethodjsonr   r   
_jsonloadsr   r   ry   r   r   r   r   r   r  r   rS   r   r   __nonzero__r   r^   rd   rg   classmethodr<   rC   r   rv   r   r=   r   r   r   r   r   r;   r;     s    tzz*Kz*K!!## J,Z +6 $0   K &'
" *.K 3 3& (,D#"1 "1H'
 ; ;*<r   r;   c                       \ rS rSr\R
                  \4S jrS rS r	S r
S rS rS rS	 rS
 rS rS rS rS rS rSrg)r   i  c                 x    X0l         X@l        0 0 /U l        / / /U l        / =U l        nXl        X l        XUS /US S & g rZ   )r   r8   index_storageindex_storage2_DiffBuilder__rootsrc_docdst_doc)rQ   r  r  r   r8   roots         r   rS   DiffBuilder.__init__  sI    
& "X!2hdt$Qr   c                     U[        U5      4n U R                  U   nUR                  U5      nUc  U/XT'   g XT   R                  U5        g ! [         a"    U R
                  U   R                  XB45         g f = frZ   )r   r  getr.   rO   r  )rQ   r3   indexst	typed_keystoragestoreds          r   store_indexDiffBuilder.store_index  s~    DK(			?((,G[[+F~&+W""))%0 	?#**I+=>	?s   (A A )A87A8c                 N   U[        U5      4n U R                  U   R                  U5      nU(       a  UR                  5       $ g ! [         aU    U R
                  U   n[        [        U5      S-
  SS5       H&  nXV   S   U:X  d  M  UR                  U5      S   s  s $     g f = f)Nr   rl   r   )r   r  r  poprO   r  ranger%   )rQ   r3   r  r  r  r  is          r   
take_indexDiffBuilder.take_index  s    DK(			-''+//	:Fzz|#   	-))"-G3w<>2r2:a=I-";;q>!,, 3	-s   4A >B$B$B$#B$c                 F    U R                   nUS   nX2U/=US'   US'   US   $ )Nr   r   r  )rQ   r   r  lasts       r   r   DiffBuilder.insert  s4    {{Aw!,,Q$q'Awr   c                 (    Uu  p#nX2S'   X#S'   / US S & g )Nr   r   r   )rQ   r  	link_prev	link_next_s        r   r   DiffBuilder.remove  s#    "'	a ! !ar   c              #   \   #    U R                   nUS   nX2La  US   v   US   nX2La  M  g g 7fNr      r$  )rQ   startr  currs       r   	iter_fromDiffBuilder.iter_from  s7     {{Qxq'M7D    &,,c              #   \   #    U R                   nUS   nX!La  US   v   US   nX!La  M  g g 7fr-  r$  )rQ   r  r0  s      r   r   DiffBuilder.__iter__  s7     {{Awq'M7D r3  c              #     #    U R                   nUS   nX!La  US   ULa  US   US   S   pCUR                  UR                  :X  ak  [        U5      [        :X  aX  [        U5      [        :X  aE  [        SUR                  UR                  S   S.U R                  S9R                  v   US   S   nM  US   R                  v   US   nX!La  M  g g 7f)Nr   r.  r   r3   r   r7   )r  rM   r   ry   r   r   rP   r8   )rQ   r  r0  op_first	op_seconds        r   r   DiffBuilder.execute  s     {{AwAwd"&*1gtAwqz)$$	(:(::X/9Y<7*' ) 2 2!*!4!4W!=, $(#3#3	5 6?Y	?
  71:Dq'###7D s   C	CCc                    U R                  U[        5      nUb  US   n[        UR                  5      [        :X  aV  [        U5      [        :X  aC  U R                  U5       H.  nUR                  UR                  UR                  5      Ul        M0     U R                  U5        UR                  [        X5      :w  a=  [        SUR                  [        X5      S.U R                  S9nU R                  U5        g g [        S[        X5      US.U R                  S9nU R                  U5      nU R                  X8[         5        g )Nr.  r   r   r   rK   r7   r   r   )r!  
_ST_REMOVEr   r'   rq   r1  r   rK   r   rM   
_path_joinr   r8   r   r   r  _ST_ADD)	rQ   rK   r'   itemr  r   vnew_op	new_indexs	            r   _item_addedDiffBuilder._item_added  s   j1qBBFF|s"tCyC'7.A..rww?BF / KK{{j33& KK&t1(  $//	1
 F# 4 ""4-#  ++	-F
 F+ITg6r   c                    [        S[        X5      S.U R                  S9nU R                  U[        5      nU R                  U5      nUb  US   nUR                  R                  U R                  5      S   n[        U5      [        :X  aC  U R                  U5       H.  n	U	R                  UR                  UR                  5      Ul        M0     U R                  U5        UR                   UR                   :w  a1  [#        SUR                   UR                   S.U R                  S9nXFS'   g U R                  U5        g U R%                  X6[&        5        g )Nr   r   r7   r.  r   r   r;  )ry   r=  r8   r!  r>  r   rN   r|   r  r   r-   r1  r   rK   r'   r   rM   r   r  r<  )
rQ   rK   r'   r?  rA  r  rB  r   
added_itemr@  s
             r   _item_removedDiffBuilder._item_removed5  s!    t)"
 '') g.KK'	qB
 ++DLL9!<JJ4'.A^^BGGRVV<BF / KK"++-& "OOKK(  $//	1
  &! I& Tj9r   c           	      d    U R                  [        S[        X5      US.U R                  S95        g )Nr   r   r7   )r   r   r=  r8   )rQ   rK   r'   r?  s       r   _item_replacedDiffBuilder._item_replacedV  s4    $t)&
 ''	) 	*r   c                 X   [        UR                  5       5      n[        UR                  5       5      nXT-
  nXE-
  nU H!  nU R                  U[        U5      X(   5        M#     U H!  nU R	                  U[        U5      X8   5        M#     XE-   H  nU R                  XX(   X8   5        M     g rZ   )setkeysrG  ru   rC  r   )	rQ   rK   rD   rE   src_keysdst_keys
added_keysremoved_keysr'   s	            r   _compare_dictsDiffBuilder._compare_dicts]  s    sxxz?sxxz?(
*CtSXsx8   CT3s8SX6  &C  CHch? 'r   c                 j   [        U5      [        U5      pT[        XE5      n[        XE5      n[        U5       H  nX:  a  X(   X8   pX:X  a  M  [	        U	[
        5      (       a2  [	        U
[
        5      (       a  U R                  [        X5      X5        M]  [	        U	[        5      (       a2  [	        U
[        5      (       a  U R                  [        X5      X5        M  U R                  XU	5        U R                  XU
5        M  XE:  a  U R                  XX(   5        M  U R                  XX8   5        M     g rZ   )r%   maxminr  r9   r	   rS  r=  r
   _compare_listsrG  rC  )rQ   rK   rD   rE   len_srclen_dstmax_lenmin_lenr'   oldnews              r   rX  DiffBuilder._compare_listsl  s    s8SXg'g'>C}8SXS:^44sN33''
4(=sH_55"388''
4(=sH &&t#6$$T4"""4#(;   CH5- "r   c                    [        U[        5      (       a1  [        U[        5      (       a  U R                  [        X5      X45        g [        U[        5      (       a1  [        U[        5      (       a  U R                  [        X5      X45        g U R                  U5      U R                  U5      :X  a  g U R                  XU5        g rZ   )r9   r	   rS  r=  r
   rX  r   rJ  )rQ   rK   r'   rD   rE   s        r   r   DiffBuilder._compare_values  s    c>**3//
4 5s@_--300
4 5s@ ZZ_

3/ 3/r   )__rootr  r   r  r  r8   r  N)r   r   r   r   r  r   r   rS   r  r!  r   r   r1  r   r   rC  rG  rJ  rS  rX  r   r   r   r   r   r   r     sS    /3zz{ %?-(72:B*@680r   r   c                 n    Uc  U $ U S-   [        U5      R                  SS5      R                  SS5      -   $ )Nrk   ~z~0z~1)ru   r   r   s     r   r=  r=    s9    
{#:C((d3;;CFFFr   )5r   
__future__r   r+   r   	functoolsr  syscollections.abcr   ImportErrortypesr   r/   jsonpointerr   r   r>  r<  r	   r
   unicoderu   
__author____version____website____license__version_infobytesr:   	Exceptionr   r   r   AssertionErrorr!   r4   partialr   r  rA   rF   objectrH   ry   r   r   r   r   r   r;   r   r=  r   r   r   <module>rw     s  B & '     
%(&
 : 
? 0
@$ vJ$ $7) 7* $,n $  tzzYG
 &+ %&P &1 B03/V 3/ln D1> 1h'~ 'TSN SlN 6N 2M< M<`T0& T0nGe  %$$%
    ;
Cs3   D D. D= D+*D+.D:9D:=EE