Ë
    ¯ŒjRt  ã                   ó¢  — d Z ddlmZ ddlZddlZddlZddlZddlZ	 ddlm	Z	 	 ddlmZ ddlmZmZ dZdZ	 ddlmZmZ d	Zd
ZdZdZej6                  dk\  reefZ G d„ de«      Z G d„ de«      Z  G d„ de«      Z! G d„ dee"«      Z#d„ Z$ ejJ                  ejL                  e$¬«      Z'defd„Z(efd„Z) G d„ de*«      Z+ G d„ de+«      Z, G d„ d e+«      Z- G d!„ d"e+«      Z. G d#„ d$e+«      Z/ G d%„ d&e+«      Z0 G d'„ d(e+«      Z1 G d)„ d*e*«      Z2 G d+„ d,e*«      Z3d-„ Z4y# e
$ r
 ddlm	Z	 Y �Œw xY w# e
$ r eZY �Œw xY w# e
$ r ddlmZmZ eZY �Œw xY w).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                   ó   — e Zd ZdZy)ÚJsonPatchExceptionzBase Json Patch exceptionN©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úS/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/jsonpatch.pyr   r   P   ó   „ Ú#r   r   c                   ó   — e Zd ZdZy)ÚInvalidJsonPatchz, Raised if an invalid JSON Patch is created Nr   r   r   r   r   r   T   s   „ Ú6r   r   c                   ó   — e Zd ZdZy)ÚJsonPatchConflicta
  Raised 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.
    Nr   r   r   r   r   r   X   s   „ òr   r   c                   ó   — e Zd ZdZy)ÚJsonPatchTestFailedz A Test operation failed Nr   r   r   r   r   r   a   r   r   r   c                 ó°   — t        j                  t        «      }| D ]  \  }}||   j                  |«       Œ t	        d„ |j                  «       D «       «      S )z'Convert duplicate keys values to lists.c              3   óP   K  — | ]  \  }}|t        |«      d k(  r|d   n|f–— Œ  y­w)r   r   N)Úlen)Ú.0ÚkeyÚvaluess      r   Ú	<genexpr>zmultidict.<locals>.<genexpr>l   s4   è ø€ ð ñ )‰KˆC�ð 
œ3˜v›;¨!Ò+ˆf�QŠi°Ô8Ù(ùs   ‚$&)ÚcollectionsÚdefaultdictÚlistÚappendÚdictÚitems)Úordered_pairsÚmdictr!   Úvalues       r   Ú	multidictr-   e   sX   € ô ×#Ñ#¤DÓ)€EÛ#‰
ˆˆUØˆc‰
×Ñ˜%Õ ð $ô ñ ð !Ÿ;™;œ=óó ð r   )Úobject_pairs_hookFc                 ó�   — t        |t        «      rt        j                  ||¬«      }nt        ||¬«      }|j	                  | |«      S )a¬  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_placer1   s       r   Úapply_patchr:   x   sA   € ôB �%œÔ$Ü×%Ñ% e¸Ð%ÓE‰ä˜%¨[Ô9ˆØ�;‰;�s˜HÓ%Ð%r   c                 ó2   — t         j                  | ||¬«      S )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
    r0   )r4   Ú	from_diff)ÚsrcÚdstr1   s      r   Ú
make_patchr?       s   € ô* ×Ñ˜s C°[ÐÓAÐAr   c                   óv   — e Zd ZdZefd„Zd„ Zd„ Zd„ Zd„ Z	e
d„ «       Ze
d„ «       Zej                  d	„ «       Zy
)ÚPatchOperationz'A single operation inside a JSON Patch.c                 ód  — || _         |j                  d«      st        d«      ‚t        |d   | j                   «      r&|d   j                  | _        |d   | _        || _        y |d   | _        	 | j                  | j
                  «      | _        || _        y # t        $ r}t        d«      ‚d }~ww xY w)NÚpathz#Operation must have a 'path' memberzInvalid 'path')	r1   Ú__contains__r   r2   rC   ÚlocationÚpointerÚ	TypeErrorÚ	operation)ÚselfrH   r1   Úexs       r   Ú__init__zPatchOperation.__init__»   s°   € Ø&ˆÔà×%Ñ% fÔ-Ü"Ð#HÓIÐIä�i Ñ'¨×)9Ñ)9Ô:Ø% fÑ-×2Ñ2ˆDŒMØ$ VÑ,ˆDŒLð #ˆ�ð & fÑ-ˆDŒMð9Ø#×/Ñ/°·±Ó>�”ð #ˆ�øô ò 9Ü&Ð'7Ó8Ð8ûð9ús   Á. B Â	B/ÂB*Â*B/c                 ó   — t        d«      ‚)zGAbstract method that applies a patch operation to the specified object.z%should implement the patch operation.)ÚNotImplementedError)rI   Úobjs     r   r6   zPatchOperation.applyÍ   s   € ä!Ð"IÓJÐJr   c                 óZ   — t        t        | j                  j                  «       «      «      S ©N)ÚhashÚ	frozensetrH   r)   ©rI   s    r   Ú__hash__zPatchOperation.__hash__Ñ   s   € Ü”I˜dŸn™n×2Ñ2Ó4Ó5Ó6Ð6r   c                 óV   — t        |t        «      sy| j                  |j                  k(  S ©NF)r2   rA   rH   ©rI   Úothers     r   Ú__eq__zPatchOperation.__eq__Ô   s"   € Ü˜%¤Ô0ØØ�~‰~ §¡Ñ0Ð0r   c                 ó   — | |k(   S rP   r   rW   s     r   Ú__ne__zPatchOperation.__ne__Ù   ó   € Ø˜5‘=Ð!Ð!r   c                 óR   — dj                  | j                  j                  d d «      S )NÚ/éÿÿÿÿ)ÚjoinrF   ÚpartsrS   s    r   rC   zPatchOperation.pathÜ   s"   € à�x‰x˜Ÿ™×*Ñ*¨3¨BÐ/Ó0Ð0r   c                 ó˜   — 	 t        | j                  j                  d   «      S # t        $ r | j                  j                  d   cY S w xY w)Nr_   )ÚintrF   ra   Ú
ValueErrorrS   s    r   r!   zPatchOperation.keyà   sE   € ð	*Ü�t—|‘|×)Ñ)¨"Ñ-Ó.Ð.øÜò 	*Ø—<‘<×%Ñ% bÑ)Ò)ð	*ús   ‚!$ ¤"A	ÁA	c                 ó°   — t        |«      | j                  j                  d<   | j                  j                  | _        | j                  | j
                  d<   y )Nr_   rC   )ÚstrrF   ra   rC   rE   rH   )rI   r,   s     r   r!   zPatchOperation.keyç   s=   € ä!$ U£ˆ�‰×Ñ˜2ÑØŸ™×)Ñ)ˆŒØ!%§¡ˆ�‰�vÒr   N)r   r   r   r   r   rK   r6   rT   rY   r[   ÚpropertyrC   r!   Úsetterr   r   r   rA   rA   ¸   sb   „ Ù1à.9ó #ò$Kò7ò1ò
"ð ñ1ó ð1ð ñ*ó ð*ð 	‡Z�Zñ/ó ñ/r   rA   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)ÚRemoveOperationz/Removes an object property or an array element.c                 ó$  — | j                   j                  |«      \  }}t        |t        «      r*t        |t        «      st        dj                  |«      «      ‚	 ||= |S # t        t        f$ r!}dj                  |«      }t        |«      ‚d }~ww xY w)Nzinvalid array index '{0}'z(can't remove a non-existent object '{0}')
rF   Úto_lastr2   r   rc   r   ÚformatÚKeyErrorÚ
IndexErrorr   )rI   rN   ÚsubobjÚpartrJ   Úmsgs         r   r6   zRemoveOperation.applyñ   s‰   € Ø—|‘|×+Ñ+¨CÓ0‰ˆ�ä�fœhÔ'´
¸4ÄÔ0EÜ&Ð'B×'IÑ'IÈ$Ó'OÓPÐPð	)Ø�t�ð
 ˆ
øô	 œ*Ð%ò 	)Ø<×CÑCÀDÓIˆCÜ# CÓ(Ð(ûð	)ús   ÁA ÁBÁ.B
Â
Bc                 óz   — | j                   |k(  r+| j                  |k\  r| xj                  dz  c_        |S |dz  }|S ©Nr   ©rC   r!   ©rI   rC   r!   s      r   Ú_on_undo_removezRemoveOperation._on_undo_removeÿ   s=   € Ø�9‰9˜ÒØ�x‰x˜3ŠØ—’˜A‘•ð ˆ
ð �q‘�Øˆ
r   c                 óz   — | j                   |k(  r+| j                  |kD  r| xj                  dz  c_        |S |dz  }|S rt   ru   rv   s      r   Ú_on_undo_addzRemoveOperation._on_undo_add  ó=   € Ø�9‰9˜ÒØ�x‰x˜#Š~Ø—’˜A‘•ð ˆ
ð �q‘�Øˆ
r   N©r   r   r   r   r6   rw   ry   r   r   r   rj   rj   î   s   „ Ù9òòór   rj   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)ÚAddOperationz,Adds an object property or an array element.c                 ó  — 	 | j                   d   }| j                  j	                  |«      \  }}t        |t        «      rJ|dk(  r|j                  |«       |S |t        |«      kD  s|dk  rt        d«      ‚|j                  ||«       |S t        |t        «      r|€|}|S |||<   |S |€#t        dj                  t        |«      «      «      ‚t        dj                  | j                  |«      «      ‚# t        $ r}t        d«      ‚d }~ww xY w)Nr,   ú/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})rH   rn   r   rF   rl   r2   r
   r'   r   r   Úinsertr	   rG   rm   ÚtyperE   )rI   rN   r,   rJ   rp   rq   s         r   r6   zAddOperation.apply  s#  € ð	CØ—N‘N 7Ñ+ˆEð
 —|‘|×+Ñ+¨CÓ0‰ˆ�ä�fœoÔ.Ø�sŠ{Ø—‘˜eÔ$ð& ˆ
ð# œ˜F›Ò# t¨a¢xÜ'Ð(FÓGÐGð —‘˜d EÔ*ð ˆ
ô ˜¤Ô/Øˆ|Ø�ð ˆ
ð  %��t‘ð ˆ
ð	 ˆ|ÜÐ ;× BÑ BÄ4ÈÃ<Ó PÓQÐQä'Ð(\×(cÑ(cÐdh×dqÑdqÐswÓ(xÓyÐyøô5 ò 	CÜ"ØAóCð Cûð	Cús   ‚C0 Ã0	D	Ã9DÄD	c                 óz   — | j                   |k(  r+| j                  |kD  r| xj                  dz  c_        |S |dz  }|S rt   ru   rv   s      r   rw   zAddOperation._on_undo_remove3  rz   r   c                 óz   — | j                   |k(  r+| j                  |kD  r| xj                  dz  c_        |S |dz  }|S rt   ru   rv   s      r   ry   zAddOperation._on_undo_add;  rz   r   Nr{   r   r   r   r}   r}     s   „ Ù6òò@ór   r}   c                   ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)ÚReplaceOperationz?Replaces an object property or an array element by a new value.c                 ó  — 	 | j                   d   }| j                  j	                  |«      \  }}|€|S |dk(  rt        d«      ‚t        |t        «      r|t        |«      k\  s|dk  r…t        d«      ‚t        |t        «      r ||vrfdj                  |«      }t        |«      ‚|€#t        dj                  t        |«      «      «      ‚t        d	j                  | j                  |«      «      ‚|||<   |S # t        $ r}t        d«      ‚d }~ww xY w)
Nr,   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‚   )rH   rn   r   rF   rl   r2   r
   r   r   r	   rm   rG   r„   rE   )rI   rN   r,   rJ   rp   rq   rr   s          r   r6   zReplaceOperation.applyG  s  € ð	CØ—N‘N 7Ñ+ˆEð
 —|‘|×+Ñ+¨CÓ0‰ˆ�àˆ<ØˆLà�3Š;Ü"Ð#\Ó]Ð]ä�fœoÔ.Ø”s˜6“{Ò" d¨Q¢hÜ'Ð(GÓHÐHä˜¤Ô/Ø˜6Ñ!ØA×HÑHÈÓN�Ü'¨Ó,Ð,àˆ|ÜÐ ;× BÑ BÄ4ÈÃ<Ó PÓQÐQä'Ð(\×(cÑ(cÐdh×dqÑdqÐswÓ(xÓyÐyàˆˆt‰Øˆ
øô7 ò 	CÜ"ØAóCð Cûð	Cús   ‚C2 Ã2	DÃ;DÄDc                 ó   — |S rP   r   rv   s      r   rw   z ReplaceOperation._on_undo_removeg  ó   € Øˆ
r   c                 ó   — |S rP   r   rv   s      r   ry   zReplaceOperation._on_undo_addj  r‹   r   Nr{   r   r   r   rˆ   rˆ   D  s   „ ÙIòò@ór   rˆ   c                   óf   — e Zd ZdZd„ Zed„ «       Zed„ «       Zej                  d„ «       Zd„ Z	d„ Z
y)	ÚMoveOperationz?Moves an object property or an array element to a new location.c                 óÎ  — 	 t        | j                  d   | j                  «      r| j                  d   }n| j                  | j                  d   «      }|j                  |«      \  }}	 ||   }| j                  |k(  r|S t        |t        «      r&| j                  j                  |«      rt        d«      ‚t        d| j                  d   dœ| j                  ¬«      j                  |«      }t        d| j                  |dœ| j                  ¬«      j                  |«      }|S # t        $ r}t	        d«      ‚d }~ww xY w# t        t        f$ r}t        t        |«      «      ‚d }~ww xY w)	NÚfromú.The operation does not contain a 'from' memberz*Cannot move values into their own childrenÚremove©ÚoprC   r0   Úadd©r”   rC   r,   )r2   rH   r1   rn   r   rl   ro   r   rf   rF   r	   Úcontainsrj   r6   r}   rE   ©rI   rN   Úfrom_ptrrJ   rp   rq   r,   s          r   r6   zMoveOperation.applyq  sg  € ð	BÜ˜$Ÿ.™.¨Ñ0°$×2BÑ2BÔCØŸ>™>¨&Ñ1‘à×+Ñ+¨D¯N©N¸6Ñ,BÓC�ð
  ×'Ñ'¨Ó,‰ˆ�ð	-Ø˜4‘LˆEð
 �<‰<˜8Ò#ØˆJä�fœnÔ-Ø—‘×%Ñ% hÔ/Ü#Ð$PÓQÐQäØØ—N‘N 6Ñ*ñ
ð ×'Ñ'ô)÷ */©¨s«ð 	ô
 ØØ—M‘MØñ
ð ×'Ñ'ô	)÷ */©¨s«ð	 	ð ˆ
øô; ò 	BÜ"Ø@óBð Bûð	Bûô œ*Ð%ò 	-Ü#¤C¨£GÓ,Ð,ûð	-ús0   ‚AD  Á(D< Ä 	D9Ä)D4Ä4D9Ä<E$ÅEÅE$c                 óz   — | j                  | j                  d   «      }dj                  |j                  d d «      S )Nr�   r^   r_   )r1   rH   r`   ra   ©rI   r™   s     r   Ú	from_pathzMoveOperation.from_path–  s5   € à×#Ñ# D§N¡N°6Ñ$:Ó;ˆØ�x‰x˜Ÿ™ s¨Ð+Ó,Ð,r   c                 ó¬   — | j                  | j                  d   «      }	 t        |j                  d   «      S # t        $ r |j                  d   cY S w xY w©Nr�   r_   )r1   rH   rc   ra   rG   r›   s     r   Úfrom_keyzMoveOperation.from_key›  sR   € à×#Ñ# D§N¡N°6Ñ$:Ó;ˆð	&Ü�x—~‘~ bÑ)Ó*Ð*øÜò 	&Ø—>‘> "Ñ%Ò%ð	&ús    8 ¸AÁAc                 ó¢   — | j                  | j                  d   «      }t        |«      |j                  d<   |j                  | j                  d<   y rž   )r1   rH   rf   ra   rC   )rI   r,   r™   s      r   rŸ   zMoveOperation.from_key£  s?   € à×#Ñ# D§N¡N°6Ñ$:Ó;ˆÜ  ›Zˆ�‰�rÑØ!)§¡ˆ�‰�vÒr   c                 óì   — | j                   |k(  r*| j                  |k\  r| xj                  dz  c_        n|dz  }| j                  |k(  r+| j                  |kD  r| xj                  dz  c_        |S |dz  }|S rt   ©rœ   rŸ   rC   r!   rv   s      r   rw   zMoveOperation._on_undo_remove©  sl   € Ø�>‰>˜TÒ!Ø�}‰} Ò#Ø—’ Ñ"–à�q‘�Ø�9‰9˜ÒØ�x‰x˜#Š~Ø—’˜A‘•ð ˆ
ð �q‘�Øˆ
r   c                 óì   — | j                   |k(  r*| j                  |kD  r| xj                  dz  c_        n|dz  }| j                  |k(  r+| j                  |kD  r| xj                  dz  c_        |S |dz  }|S rt   r¢   rv   s      r   ry   zMoveOperation._on_undo_add¶  sl   € Ø�>‰>˜TÒ!Ø�}‰}˜sÒ"Ø—’ Ñ"–à�q‘�Ø�9‰9˜ÒØ�x‰x˜#Š~Ø—’˜A‘•ð ˆ
ð �q‘�Øˆ
r   N)r   r   r   r   r6   rg   rœ   rŸ   rh   rw   ry   r   r   r   rŽ   rŽ   n  sU   „ ÙIò#ðJ ñ-ó ð-ð ñ&ó ð&ð ‡_�_ñ/ó ð/ò
ór   rŽ   c                   ó   — e Zd ZdZd„ Zy)ÚTestOperationz!Test value by specified location.c           
      ó”  — 	 | j                   j                  |«      \  }}|€|}n| j                   j                  ||«      }	 | j                  d   }||k7  r1d}t	        |j                  |t        |«      |t        |«      «      «      ‚|S # t        $ r}t	        t        |«      «      ‚d }~ww xY w# t        $ r}t        d«      ‚d }~ww xY w)Nr,   r   z0{0} ({1}) is not equal to tested value {2} ({3}))rF   rl   Úwalkr   r   rf   rH   rn   r   rm   r„   )rI   rN   rp   rq   ÚvalrJ   r,   rr   s           r   r6   zTestOperation.applyÇ  sÚ   € ð	/ØŸ<™<×/Ñ/°Ó4‰LˆF�DØˆ|Ø‘à—l‘l×'Ñ'¨°Ó5�ð	CØ—N‘N 7Ñ+ˆEð
 �%Š<ØDˆCÜ% c§j¡j°´d¸3³iØ16¼¸U»ó'Eó Fð Fð ˆ
øô $ò 	/Ü%¤c¨"£gÓ.Ð.ûð	/ûô
 ò 	CÜ"ØAóCð Cûð	Cús/   ‚?B	 ÁB. Â		B+ÂB&Â&B+Â.	CÂ7CÃCN©r   r   r   r   r6   r   r   r   r¥   r¥   Ä  s
   „ Ù+ór   r¥   c                   ó   — e Zd ZdZd„ Zy)ÚCopyOperationzA Copies an object property or an array element to a new location c                 ó”  — 	 | j                  | j                  d   «      }|j	                  |«      \  }}	 t        j                  ||   «      }t        d| j                  |dœ| j                   ¬«      j                  |«      }|S # t        $ r}t        d«      ‚d }~ww xY w# t        t        f$ r}t        t        |«      «      ‚d }~ww xY w)Nr�   r‘   r•   r–   r0   )r1   rH   rn   r   rl   ÚcopyÚdeepcopyro   r   rf   r}   rE   r6   r˜   s          r   r6   zCopyOperation.applyâ  s×   € ð	BØ×'Ñ'¨¯©°vÑ(>Ó?ˆHð
  ×'Ñ'¨Ó,‰ˆ�ð	-Ü—M‘M &¨¡,Ó/ˆEô ØØ—M‘MØñ
ð ×'Ñ'ô	)÷ */©¨s«ð	 	ð ˆ
øô! ò 	BÜ"Ø@óBð Bûð	Bûô œ*Ð%ò 	-Ü#¤C¨£GÓ,Ð,ûð	-ús.   ‚B µB Â	BÂBÂBÂCÂ.CÃCNr©   r   r   r   r«   r«   ß  s
   „ ÙKór   r«   c            	       óæ   — e Zd Z eej
                  «      Z ee«      Z e	e
eeeeedœ«      Z	 efd„Zd„ Zd„ ZeZd„ Zd„ Zd„ Zd„ Zed	efd
„«       Zedd	efd„«       Zdd„Zed„ «       Zdd„Z d„ Z!y	)r4   )r’   r•   ÚreplaceÚmoveÚtestr­   c                 óš   — || _         || _        | j                   D ].  }t        |t        «      rt	        d«      ‚| j                  |«       Œ0 y )NzMDocument is expected to be sequence of operations, got a sequence of strings.)r8   r1   r2   r3   r   Ú_get_operation)rI   r8   r1   r”   s       r   rK   zJsonPatch.__init__2  sR   € ØˆŒ
Ø&ˆÔð —*”*ˆBô ˜"œjÔ)Ü&ð (Pó Qð Qð ×Ñ Õ#ñ r   c                 ó"   — | j                  «       S )zstr(self) -> self.to_string())Ú	to_stringrS   s    r   Ú__str__zJsonPatch.__str__J  s   € à�~‰~ÓÐr   c                 ó,   — t        | j                  «      S rP   )Úboolr8   rS   s    r   Ú__bool__zJsonPatch.__bool__N  ó   € Ü�D—J‘JÓÐr   c                 ó,   — t        | j                  «      S rP   )Úiterr8   rS   s    r   Ú__iter__zJsonPatch.__iter__S  r»   r   c                 ó>   — t        t        | j                  «      «      S rP   )rQ   ÚtupleÚ_opsrS   s    r   rT   zJsonPatch.__hash__V  s   € Ü”E˜$Ÿ)™)Ó$Ó%Ð%r   c                 óV   — t        |t        «      sy| j                  |j                  k(  S rV   )r2   r4   rÁ   rW   s     r   rY   zJsonPatch.__eq__Y  s"   € Ü˜%¤Ô+ØØ�y‰y˜EŸJ™JÑ&Ð&r   c                 ó   — | |k(   S rP   r   rW   s     r   r[   zJsonPatch.__ne__^  r\   r   Nc                 óF   — |xs | j                   } ||«      } | ||¬«      S )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.
        r0   )Újson_loader)ÚclsÚ	patch_strÚloadsr1   rÅ   r8   s         r   r5   zJsonPatch.from_stringa  s)   € ð  Ò.˜sŸ™ˆÙ˜IÓ&ˆÙ�5 kÔ2Ð2r   Tc                 ó®   — |xs | j                   }t        ||||¬«      }|j                  dd||«       t        |j	                  «       «      } | ||¬«      S )aC  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
        r0   Ú N)Újson_dumperÚDiffBuilderÚ_compare_valuesr&   Úexecute)	rÆ   r=   r>   ÚoptimizationÚdumpsr1   rË   ÚbuilderÚopss	            r   r<   zJsonPatch.from_diffu  sT   € ð> Ò.˜sŸ™ˆÜ˜c 3¨ÀÔMˆØ×Ñ  D¨#¨sÔ3Ü�7—?‘?Ó$Ó%ˆÙ�3 KÔ0Ð0r   c                 óF   — |xs | j                   } || j                  «      S )z!Returns patch set as JSON string.)rË   r8   )rI   rÐ   rË   s      r   r¶   zJsonPatch.to_stringš  s!   € àÒ/˜t×/Ñ/ˆÙ˜4Ÿ:™:Ó&Ð&r   c                 óT   — t        t        | j                  | j                  «      «      S rP   )rÀ   Úmapr´   r8   rS   s    r   rÁ   zJsonPatch._opsŸ  s   € ä”S˜×,Ñ,¨d¯j©jÓ9Ó:Ð:r   c                 óx   — |st        j                  |«      }| j                  D ]  }|j                  |«      }Œ |S )a5  Applies 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Á   r6   )rI   rN   r9   rH   s       r   r6   zJsonPatch.apply£  s8   € ñ Ü—-‘- Ó$ˆCàŸœˆIØ—/‘/ #Ó&‰Cð #ð ˆ
r   c                 óö   — d|vrt        d«      ‚|d   }t        |t        «      st        d«      ‚|| j                  vrt        dj	                  |«      «      ‚| j                  |   } ||| j
                  ¬«      S )Nr”   z&Operation does not contain 'op' memberzOperation's op must be a stringzUnknown operation {0!r}r0   )r   r2   r3   Ú
operationsrm   r1   )rI   rH   r”   rÆ   s       r   r´   zJsonPatch._get_operation¸  sy   € Ø�yÑ Ü"Ð#KÓLÐLà�t‰_ˆä˜"œjÔ)Ü"Ð#DÓEÐEà�T—_‘_Ñ$Ü"Ð#<×#CÑ#CÀBÓ#GÓHÐHà�o‰o˜bÑ!ˆÙ�9¨$×*:Ñ*:Ô;Ð;r   rP   )F)"r   r   r   ÚstaticmethodÚjsonrÐ   rË   Ú
_jsonloadsrÅ   r   rj   r}   rˆ   rŽ   r¥   r«   rØ   r   rK   r·   rº   Ú__nonzero__r¾   rT   rY   r[   Úclassmethodr5   r<   r¶   rg   rÁ   r6   r´   r   r   r   r4   r4   ø  sÉ   „ Ù˜tŸz™zÓ*€KÙ˜zÓ*€Ká!Ø!ØØ#ØØØñ#ó €Jð,ðZ +6ó $ò0 ò ð €Kò ò&ò'ò
"ð Ø*.¸Kò 3ó ð3ð& à(,°DØ#ò"1ó ð"1óH'ð
 ñ;ó ð;óó*<r   r4   c                   óz   — e Zd Zej                  efd„Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zy)rÌ   c                 ó‚   — || _         || _        i i g| _        g g g| _        g x| _        }|| _        || _        ||d g|d d  y rP   )rÐ   r1   Úindex_storageÚindex_storage2Ú_DiffBuilder__rootÚsrc_docÚdst_doc)rI   rã   rä   rÐ   r1   Úroots         r   rK   zDiffBuilder.__init__Ê  sS   € ØˆŒ
Ø&ˆÔØ  "˜XˆÔØ! 2˜hˆÔØÐˆŒ�dØˆŒØˆŒØ˜˜tÐ$ˆ‰Q‰r   c                 óø   — |t        |«      f}	 | j                  |   }|j                  |«      }|€|g||<   y ||   j                  |«       y # t        $ r# | j
                  |   j                  ||f«       Y y w xY wrP   )r„   rà   Úgetr'   rG   rá   )rI   r,   ÚindexÚstÚ	typed_keyÚstorageÚstoreds          r   Ústore_indexzDiffBuilder.store_indexÔ  s„   € ØœD ›KÐ(ˆ	ð		?Ø×(Ñ(¨Ñ,ˆGØ—[‘[ Ó+ˆFØˆ~Ø&+ W�˜	Ò"à˜	Ñ"×)Ñ)¨%Õ0øäò 	?Ø×Ñ Ñ#×*Ñ*¨I°uÐ+=Ö>ð	?ús   �(A ¸A Á)A9Á8A9c                 ó>  — |t        |«      f}	 | j                  |   j                  |«      }|r|j                  «       S y # t        $ rS | j
                  |   }t        t        |«      dz
  dd«      D ]%  }||   d   |k(  sŒ|j                  |«      d   c cY S  Y y w xY w)Nr   r_   r   )r„   rà   rç   ÚpoprG   rá   Úranger   )rI   r,   ré   rê   rì   rë   Úis          r   Ú
take_indexzDiffBuilder.take_indexá  s£   € ØœD ›KÐ(ˆ	ð		-Ø×'Ñ'¨Ñ+×/Ñ/°	Ó:ˆFÙØ—z‘z“|Ð#ð øô ò 	-Ø×)Ñ)¨"Ñ-ˆGÜœ3˜w›<¨™>¨2¨rÖ2�Ø˜1‘:˜a‘= IÓ-Ø"Ÿ;™; q›>¨!Ñ,Ô,ò 3ð	-ús   �/A  Á ?BÂ BÂBÂBc                 óH   — | j                   }|d   }|||gx|d<   |d<   |d   S )Nr   r   ©râ   )rI   r”   rå   Úlasts       r   rƒ   zDiffBuilder.insertî  s6   € Ø�{‰{ˆØ�A‰wˆØ! 4¨Ð,Ð,ˆˆQ‰�$�q‘'Ø�A‰wˆr   c                 ó.   — |\  }}}||d<   ||d<   g |d d  y )Nr   r   r   )rI   rè   Ú	link_prevÚ	link_nextÚ_s        r   r’   zDiffBuilder.removeô  s)   € Ø"'Ñˆ	�9˜aØ ˆ	�!‰Ø ˆ	�!‰Øˆ‰a‰r   c              #   óZ   K  — | j                   }|d   }||ur|d   –— |d   }||urŒy y ­w©Nr   é   rô   )rI   Ústartrå   Úcurrs       r   Ú	iter_fromzDiffBuilder.iter_fromú  s<   è ø€ Ø�{‰{ˆØ�Q‰xˆØ˜$ÑØ�q‘'ŠMØ˜‘7ˆDð ˜$Ôùó   ‚&+©+c              #   óZ   K  — | j                   }|d   }||ur|d   –— |d   }||urŒy y ­wrû   rô   )rI   rå   rþ   s      r   r¾   zDiffBuilder.__iter__  s<   è ø€ Ø�{‰{ˆØ�A‰wˆØ˜$ÑØ�q‘'ŠMØ˜‘7ˆDð ˜$Ôùr   c              #   óž  K  — | j                   }|d   }||ur´|d   |ur‘|d   |d   d   }}|j                  |j                  k(  rkt        |«      t        k(  rYt        |«      t        k(  rGt        d|j                  |j                  d   dœ| j                  ¬«      j                  –— |d   d   }Œœ|d   j                  –— |d   }||urŒ³y y ­w)Nr   rü   r°   r,   r–   r0   )râ   rE   r„   rj   r}   rˆ   rH   r1   )rI   rå   rþ   Úop_firstÚ	op_seconds        r   rÎ   zDiffBuilder.execute  sà   è ø€ Ø�{‰{ˆØ�A‰wˆØ˜$ÑØ�A‰w˜dÑ"Ø&*¨1¡g¨t°A©w°q©z˜)�Ø×$Ñ$¨	×(:Ñ(:Ò:Ü˜X›¬/Ò9Ü˜Y›¬<Ò7Ü*Ø'Ø )× 2Ñ 2Ø!*×!4Ñ!4°WÑ!=ñ,ð $(×#3Ñ#3ô	5÷ 6?±Yò	?ð
   ™7 1™:�DØà�q‘'×#Ñ#Ò#Ø˜‘7ˆDð ˜$Ôùs   ‚CCÃCc                 óŽ  — | j                  |t        «      }|�à|d   }t        |j                  «      t        k(  rSt        |«      t        k(  rA| j                  |«      D ]-  }|j                  |j                  |j                  «      |_        Œ/ | j                  |«       |j                  t        ||«      k7  rAt        d|j                  t        ||«      dœ| j                  ¬«      }| j                  |«       y y t        dt        ||«      |dœ| j                  ¬«      }| j                  |«      }| j                  ||t         «       y )Nrü   r±   ©r”   r�   rC   r0   r•   r–   )rò   Ú
_ST_REMOVEr„   r!   rc   rÿ   rw   rC   r’   rE   Ú
_path_joinrŽ   r1   rƒ   r}   rí   Ú_ST_ADD)	rI   rC   r!   Úitemrè   r”   ÚvÚnew_opÚ	new_indexs	            r   Ú_item_addedzDiffBuilder._item_added  s  € Ø—‘ ¤jÓ1ˆØÐØ�q‘ˆBÜ�B—F‘F‹|œsÒ"¤t¨C£y´CÒ'7ØŸ™¨Ö.�AØ×.Ñ.¨r¯w©w¸¿¹Ó?�B•Fð /ð �K‰K˜ÔØ�{‰{œj¨¨sÓ3Ò3Ü&Ø ØŸK™KÜ& t¨SÓ1ñ(ð  $×/Ñ/ô	1�ð
 —‘˜FÕ#ð 4ô "ØÜ" 4¨Ó-Øñ#ð  ×+Ñ+ô	-ˆFð
 Ÿ™ FÓ+ˆIØ×Ñ˜T 9¬gÕ6r   c                 ó®  — t        dt        ||«      dœ| j                  ¬«      }| j                  |t        «      }| j                  |«      }|�ñ|d   }|j                  j                  | j                  «      d   }t        |«      t        k(  rA| j                  |«      D ]-  }	|	j                  |j                  |j                  «      |_        Œ/ | j                  |«       |j                   |j                   k7  r5t#        d|j                   |j                   dœ| j                  ¬«      }||d<   y | j                  |«       y | j%                  ||t&        «       y )Nr’   r“   r0   rü   r   r±   r  )rj   r  r1   rò   r	  rƒ   rF   rl   rä   r„   r&   rÿ   ry   rC   r!   r’   rE   rŽ   rí   r  )
rI   rC   r!   r
  r  rè   r  r”   Ú
added_itemr  s
             r   Ú_item_removedzDiffBuilder._item_removed5  s'  € Ü ØÜ˜t SÓ)ñ"
ð ×'Ñ'ô)ˆð —‘ ¤gÓ.ˆØ—K‘K Ó'ˆ	ØÐØ�q‘ˆBð
 Ÿ™×+Ñ+¨D¯L©LÓ9¸!Ñ<ˆJÜ�JÓ¤4Ò'ØŸ™¨Ö.�AØŸ^™^¨B¯G©G°R·V±VÓ<�B•Fð /ð �K‰K˜ÔØ�‰ "§+¡+Ò-Ü&Ø Ø"ŸO™OØŸK™Kñ(ð  $×/Ñ/ô	1�ð
  &�	˜!’ð —‘˜IÕ&ð ×Ñ˜T 9¬jÕ9r   c           	      ól   — | j                  t        dt        ||«      |dœ| j                  ¬«      «       y )Nr°   r–   r0   )rƒ   rˆ   r  r1   )rI   rC   r!   r
  s       r   Ú_item_replacedzDiffBuilder._item_replacedV  s6   € Ø�‰Ô$ØÜ˜t SÓ)Øñ&
ð ×'Ñ'ô	)õ 	*r   c                 ó\  — t        |j                  «       «      }t        |j                  «       «      }||z
  }||z
  }|D ]!  }| j                  |t        |«      ||   «       Œ# |D ]!  }| j	                  |t        |«      ||   «       Œ# ||z  D ]  }| j                  ||||   ||   «       Œ y rP   )ÚsetÚkeysr  rf   r  rÍ   )	rI   rC   r=   r>   Úsrc_keysÚdst_keysÚ
added_keysÚremoved_keysr!   s	            r   Ú_compare_dictszDiffBuilder._compare_dicts]  s«   € Ü�s—x‘x“z“?ˆÜ�s—x‘x“z“?ˆØ Ñ(ˆ
Ø (Ñ*ˆãˆCØ×Ñ˜t¤S¨£X¨s°3©xÕ8ð  ó ˆCØ×Ñ˜T¤3 s£8¨S°©XÕ6ð ð ˜hÔ&ˆCØ× Ñ   s¨C°©H°c¸#±hÕ?ñ 'r   c                 óT  — t        |«      t        |«      }}t        ||«      }t        ||«      }t        |«      D ]ì  }||k  r³||   ||   }
}	|	|
k(  rŒt	        |	t
        «      r.t	        |
t
        «      r| j                  t        ||«      |	|
«       ŒVt	        |	t        «      r.t	        |
t        «      r| j                  t        ||«      |	|
«       Œ”| j                  |||	«       | j                  |||
«       Œ»||kD  r| j                  ||||   «       Œ×| j                  ||||   «       Œî y rP   )r   ÚmaxÚminrð   r2   r	   r  r  r
   Ú_compare_listsr  r  )rI   rC   r=   r>   Úlen_srcÚlen_dstÚmax_lenÚmin_lenr!   ÚoldÚnews              r   r  zDiffBuilder._compare_listsl  s  € Ü˜s›8¤S¨£X�ˆÜ�g˜wÓ'ˆÜ�g˜wÓ'ˆÜ˜–>ˆCØ�WŠ}Ø˜s™8 S¨¡X�S�Ø˜#’:Øä ¤^Ô4Ü˜s¤NÔ3Ø×'Ñ'¬
°4¸Ó(=¸sÀCÕHä ¤_Ô5Ü" 3¬Ô8Ø×'Ñ'¬
°4¸Ó(=¸sÀCÕHð ×&Ñ& t¨S°#Ô6Ø×$Ñ$ T¨3°Õ4à˜7Ò"Ø×"Ñ" 4¨°#°c±(Õ;ð × Ñ   s¨C°©HÕ5ñ- "r   c                 ój  — t        |t        «      r.t        |t        «      r| j                  t        ||«      ||«       y t        |t        «      r.t        |t        «      r| j                  t        ||«      ||«       y | j                  |«      | j                  |«      k(  ry | j                  |||«       y rP   )r2   r	   r  r  r
   r  rÐ   r  )rI   rC   r!   r=   r>   s        r   rÍ   zDiffBuilder._compare_valuesˆ  s�   € Ü�cœ>Ô*Ü˜3¤Ô/Ø×Ñ¤
¨4°Ó 5°s¸CÕ@ä˜œ_Ô-Ü˜3¤Ô0Ø×Ñ¤
¨4°Ó 5°s¸CÕ@ð �Z‰Z˜‹_ §
¡
¨3£Ò/Øð ×Ñ  c¨3Õ/r   N)r   r   r   rÚ   rÐ   r   rK   rí   rò   rƒ   r’   rÿ   r¾   rÎ   r  r  r  r  r  rÍ   r   r   r   rÌ   rÌ   È  sS   „ à/3¯z©zÀ{ó %ò?ò-òòòòòò(7ò2:òB*ò@ò6ó80r   rÌ   c                 ól   — |€| S | dz   t        |«      j                  dd«      j                  dd«      z   S )Nr^   Ú~z~0z~1)rf   r°   ru   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
   Úunicoderf   Ú
__author__Ú__version__Ú__website__Ú__license__Úversion_infoÚbytesr3   Ú	Exceptionr   r   r   ÚAssertionErrorr   r-   ÚpartialrÈ   rÛ   r:   r?   ÚobjectrA   rj   r}   rˆ   rŽ   r¥   r«   r4   rÌ   r  r   r   r   Ú<module>r;     s¦  ðñB &å 'ã Û Û Û Û 
ð%Ý(ðÝ&÷
 :ð €Ø€
ðß?ð 0€
Ø€Ø@€Ø$€ð ×Ñ�vÒØ˜�€Jô$˜ô $ô7Ð)ô 7ôÐ*ô ô$Ð,¨nô $òð  ˆY×Ñ˜tŸz™z¸YÔ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0ónGøðe ò %ß$Ð$ð%ûð
 ò àÓðûð ò ß;Ø
ƒCðús3   žD ¥D- ¸D; ÄD*Ä)D*Ä-D8Ä7D8Ä;EÅE