Ë
    M`�p  ã                   ól  — 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mZ dZdZ	 ddlmZmZ dZd	Zd
ZdZej4                  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jH                  ejJ                  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*«      Z/ G d&„ d'e*«      Z0 G d(„ d)e)«      Z1 G d*„ d+e)«      Z2d,„ Z3y# 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)ÚMappingProxyType)ÚJsonPointerÚJsonPointerExceptioné   )ÚMutableMappingÚMutableSequenceu    Stefan KÃ¶gl <stefan@skoegl.net>z1.32z0https://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__© ó    ú+/usr/lib/python3/dist-packages/jsonpatch.pyr   r   J   ó   „ Ú#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   N   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   R   s   „ òr   r   c                   ó   — e Zd ZdZy)ÚJsonPatchTestFailedz A Test operation failed Nr   r   r   r   r   r   [   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>f   s4   è ø€ ò ñ ˆC�ð 
œ3˜v›;¨!Ò+ˆf�QŠi°Ô8ñùs   ‚$&)ÚcollectionsÚdefaultdictÚlistÚappendÚdictÚitems)Úordered_pairsÚmdictr    Úvalues       r   Ú	multidictr,   _   s]   € ô ×#Ñ#¤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_placer0   s       r   Úapply_patchr9   r   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
    r/   )r3   Ú	from_diff)ÚsrcÚdstr0   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')	r0   Ú__contains__r   r1   rB   ÚlocationÚpointerÚ	TypeErrorÚ	operation)ÚselfrG   r0   Ú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)rH   Úobjs     r   r5   zPatchOperation.applyÇ   s   € ä!Ð"IÓJÐJr   c                 óZ   — t        t        | j                  j                  «       «      «      S ©N)ÚhashÚ	frozensetrG   r(   ©rH   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)r1   r@   rG   ©rH   Úothers     r   Ú__eq__zPatchOperation.__eq__Î   s"   € Ü˜%¤Ô0ØØ�~‰~ §¡Ñ0Ð0r   c                 ó   — | |k(   S rO   r   rV   s     r   Ú__ne__zPatchOperation.__ne__Ó   ó   € Ø˜5‘=Ð!Ð!r   c                 óR   — dj                  | j                  j                  d d «      S )Nú/éÿÿÿÿ)ÚjoinrE   ÚpartsrR   s    r   rB   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^   )ÚintrE   r`   Ú
ValueErrorrR   s    r   r    zPatchOperation.keyÚ   sE   € ð	*Ü�t—|‘|×)Ñ)¨"Ñ-Ó.Ð.øÜò 	*Ø—<‘<×%Ñ% bÑ)Ò)ð	*ús   ‚!$ ¤"A	ÁA	c                 ó°   — t        |«      | j                  j                  d<   | j                  j                  | _        | j                  | j
                  d<   y )Nr^   rB   )ÚstrrE   r`   rB   rD   rG   )rH   r+   s     r   r    zPatchOperation.keyá   s=   € ä!$ U£ˆ�‰×Ñ˜2ÑØŸ™×)Ñ)ˆŒØ!%§¡ˆ�‰�vÒr   N)r   r   r   r   r   rJ   r5   rS   rX   rZ   ÚpropertyrB   r    Úsetterr   r   r   r@   r@   ²   sb   „ Ù1à.9ó #ò$Kò7ò1ò
"ð ñ1ó ð1ð ñ*ó ð*ð 	‡Z�Zñ/ó ñ/r   r@   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                  |«      \  }}	 ||= |S # t        t        f$ r!}dj	                  |«      }t        |«      ‚d }~ww xY w)Nz(can't remove a non-existent object '{0}')rE   Úto_lastÚKeyErrorÚ
IndexErrorÚformatr   )rH   rM   ÚsubobjÚpartrI   Úmsgs         r   r5   zRemoveOperation.applyë   s_   € Ø—|‘|×+Ñ+¨CÓ0‰ˆ�ð	)Ø�t�ð
 ˆ
øô	 œ*Ð%ò 	)Ø<×CÑCÀDÓIˆCÜ# CÓ(Ð(ûð	)ús    % ¥A´AÁAc                 óz   — | j                   |k(  r+| j                  |k\  r| xj                  dz  c_        |S |dz  }|S ©Nr   ©rB   r    ©rH   rB   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 rs   rt   ru   s      r   Ú_on_undo_addzRemoveOperation._on_undo_addý   ó=   € Ø�9‰9˜ÒØ�x‰x˜#Š~Ø—’˜A‘•ð ˆ
ð �q‘�Øˆ
r   N©r   r   r   r   r5   rv   rx   r   r   r   ri   ri   è   s   „ Ù9òòór   ri   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})rG   rl   r   rE   rk   r1   r	   r&   r   r   Úinsertr   rF   rn   ÚtyperD   )rH   rM   r+   rI   ro   rp   s         r   r5   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 rs   rt   ru   s      r   rv   zAddOperation._on_undo_remove)  ry   r   c                 óz   — | j                   |k(  r+| j                  |kD  r| xj                  dz  c_        |S |dz  }|S rs   rt   ru   s      r   rx   zAddOperation._on_undo_add1  ry   r   Nrz   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�   )rG   rl   r   rE   rk   r1   r	   r   r   r   rn   rF   rƒ   rD   )rH   rM   r+   rI   ro   rp   rq   s          r   r5   zReplaceOperation.apply=  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 rO   r   ru   s      r   rv   z ReplaceOperation._on_undo_remove]  ó   € Øˆ
r   c                 ó   — |S rO   r   ru   s      r   rx   zReplaceOperation._on_undo_add`  rŠ   r   Nrz   r   r   r   r‡   r‡   :  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©ÚoprB   r/   Úadd©r“   rB   r+   )r1   rG   r0   rl   r   rk   rm   r   re   rE   r   Úcontainsri   r5   r|   rD   ©rH   rM   Úfrom_ptrrI   ro   rp   r+   s          r   r5   zMoveOperation.applyg  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^   )r0   rG   r_   r`   ©rH   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^   )r0   rG   rb   r`   rF   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�   )r0   rG   re   r`   rB   )rH   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 rs   ©r›   rž   rB   r    ru   s      r   rv   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 rs   r¡   ru   s      r   rx   zMoveOperation._on_undo_add¬  sl   € Ø�>‰>˜TÒ!Ø�}‰}˜sÒ"Ø—’ Ñ"–à�q‘�Ø�9‰9˜ÒØ�x‰x˜#Š~Ø—’˜A‘•ð ˆ
ð �q‘�Øˆ
r   N)r   r   r   r   r5   rf   r›   rž   rg   rv   rx   r   r   r   r�   r�   d  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}))rE   rk   Úwalkr   r   re   rG   rl   r   rn   rƒ   )rH   rM   ro   rp   ÚvalrI   r+   rq   s           r   r5   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   r5   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•   r/   )r0   rG   rl   r   rk   ÚcopyÚdeepcopyrm   r   re   r|   rD   r5   r—   s          r   r5   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	)r3   )r‘   r”   ÚreplaceÚmoveÚtestr¬   c                 ód   — || _         || _        | j                   D ]  }| j                  |«       Œ y rO   )r7   r0   Ú_get_operation)rH   r7   r0   r“   s       r   rJ   zJsonPatch.__init__(  s4   € ØˆŒ
Ø&ˆÔð —*‘*ò 	$ˆBØ×Ñ Õ#ñ	$r   c                 ó"   — | j                  «       S )zstr(self) -> self.to_string())Ú	to_stringrR   s    r   Ú__str__zJsonPatch.__str__3  s   € à�~‰~ÓÐr   c                 ó,   — t        | j                  «      S rO   )Úboolr7   rR   s    r   Ú__bool__zJsonPatch.__bool__7  ó   € Ü�D—J‘JÓÐr   c                 ó,   — t        | j                  «      S rO   )Úiterr7   rR   s    r   Ú__iter__zJsonPatch.__iter__<  rº   r   c                 ó>   — t        t        | j                  «      «      S rO   )rP   ÚtupleÚ_opsrR   s    r   rS   zJsonPatch.__hash__?  s   € Ü”E˜$Ÿ)™)Ó$Ó%Ð%r   c                 óV   — t        |t        «      sy| j                  |j                  k(  S rU   )r1   r3   rÀ   rV   s     r   rX   zJsonPatch.__eq__B  s"   € Ü˜%¤Ô+ØØ�y‰y˜EŸJ™JÑ&Ð&r   c                 ó   — | |k(   S rO   r   rV   s     r   rZ   zJsonPatch.__ne__G  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.
        r/   )Újson_loader)ÚclsÚ	patch_strÚloadsr0   rÄ   r7   s         r   r4   zJsonPatch.from_stringJ  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
        r/   Ú N)Újson_dumperÚDiffBuilderÚ_compare_valuesr%   Úexecute)	rÅ   r<   r=   ÚoptimizationÚdumpsr0   rÊ   ÚbuilderÚopss	            r   r;   zJsonPatch.from_diff^  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Ê   r7   )rH   rÏ   rÊ   s      r   rµ   zJsonPatch.to_stringƒ  s!   € àÒ/˜t×/Ñ/ˆÙ˜4Ÿ:™:Ó&Ð&r   c                 óT   — t        t        | j                  | j                  «      «      S rO   )r¿   Úmapr³   r7   rR   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À   r5   )rH   rM   r8   rG   s       r   r5   zJsonPatch.applyŒ  s=   € ñ Ü—-‘- Ó$ˆ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 must be a stringzUnknown operation {0!r}r/   )r   r1   r2   Ú
operationsrn   r0   )rH   rG   r“   rÅ   s       r   r³   zJsonPatch._get_operation¡  sy   € Ø�yÑ Ü"Ð#KÓLÐLà�t‰_ˆä˜"œjÔ)Ü"Ð#?Ó@Ð@à�T—_‘_Ñ$Ü"Ð#<×#CÑ#CÀBÓ#GÓHÐHà�o‰o˜bÑ!ˆÙ�9¨$×*:Ñ*:Ô;Ð;r   rO   )F)"r   r   r   ÚstaticmethodÚjsonrÏ   rÊ   Ú
_jsonloadsrÄ   r   ri   r|   r‡   r�   r¤   rª   r×   r   rJ   r¶   r¹   Ú__nonzero__r½   rS   rX   rZ   Úclassmethodr4   r;   rµ   rf   rÀ   r5   r³   r   r   r   r3   r3   î  sÉ   „ Ù˜tŸz™zÓ*€KÙ˜zÓ*€Ká!Ø!ØØ#ØØØñ#ó €Jð,ðZ +6ó 	$ò ò ð €Kò ò&ò'ò
"ð Ø*.¸Kò 3ó ð3ð& à(,°DØ#ò"1ó ð"1óH'ð
 ñ;ó ð;óó*<r   r3   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 rO   )rÏ   r0   Úindex_storageÚindex_storage2Ú_DiffBuilder__rootÚsrc_docÚdst_doc)rH   râ   rã   rÏ   r0   Úroots         r   rJ   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rO   )rƒ   rß   Úgetr&   rF   rà   )rH   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æ   ÚpoprF   rà   Úranger   )rH   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›>¨!Ñ,Ô,ò-ð	-ús   �/A  Á ?BÂ BÂBÂBc                 óH   — | j                   }|d   }|||gx|d<   |d<   |d   S )Nr   r   ©rá   )rH   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   )rH   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ó   )rH   Ú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ó   )rH   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•   r/   )rá   rD   rƒ   ri   r|   r‡   rG   r0   )rH   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�   rB   r/   r”   r•   )rñ   Ú
_ST_REMOVErƒ   r    rb   rþ   rv   rB   r‘   rD   Ú
_path_joinr�   r0   r‚   r|   rì   Ú_ST_ADD)	rH   rB   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’   r/   rû   r   r°   r  )ri   r  r0   rñ   r  r‚   rE   rk   rã   rƒ   r%   rþ   rx   rB   r    r‘   rD   r�   rì   r  )
rH   rB   r    r	  r  rç   r  r“   Ú
added_itemr
  s
             r   Ú_item_removedzDiffBuilder._item_removed  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•   r/   )r‚   r‡   r  r0   )rH   rB   r    r	  s       r   Ú_item_replacedzDiffBuilder._item_replaced?  s6   € Ø�‰Ô$ØÜ˜t SÓ)Øñ&
ð ×'Ñ'ô	)õ 	*r   c                 ó\  — t        |j                  «       «      }t        |j                  «       «      }||z
  }||z
  }|D ]!  }| j                  |t        |«      ||   «       Œ# |D ]!  }| j	                  |t        |«      ||   «       Œ# ||z  D ]  }| j                  ||||   ||   «       Œ y rO   )ÚsetÚkeysr  re   r  rÌ   )	rH   rB   r<   r=   Úsrc_keysÚdst_keysÚ
added_keysÚremoved_keysr    s	            r   Ú_compare_dictszDiffBuilder._compare_dictsF  s¼   € Ü�s—x‘x“z“?ˆÜ�s—x‘x“z“?ˆØ Ñ(ˆ
Ø (Ñ*ˆàò 	9ˆCØ×Ñ˜t¤S¨£X¨s°3©xÕ8ð	9ð ò 	7ˆCØ×Ñ˜T¤3 s£8¨S°©XÕ6ð	7ð ˜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 rO   )r   ÚmaxÚminrï   r1   r   r  r  r	   Ú_compare_listsr  r  )rH   rB   r<   r=   Úlen_srcÚlen_dstÚmax_lenÚmin_lenr    ÚoldÚnews              r   r  zDiffBuilder._compare_listsU  s  € Ü˜s›8¤S¨£X�ˆÜ�g˜wÓ'ˆÜ�g˜wÓ'ˆÜ˜“>ò 	6ˆ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ñ-	6r   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 rO   )r1   r   r  r  r	   r  rÏ   r  )rH   rB   r    r<   r=   s        r   rÌ   zDiffBuilder._compare_valuesq  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   rJ   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)re   r¯   rt   s     r   r  r  ˆ  s9   € Ø
€{Øˆà�#‰:œ˜C›×(Ñ(¨¨dÓ3×;Ñ;¸CÀÓFÑFÐFr   )4r   Ú
__future__r   r#   r¬   Ú	functoolsrÙ   ÚsysÚtypesr   ÚImportErrorr'   Újsonpointerr   r   r  r  Úcollections.abcr   r	   Úunicodere   Ú
__author__Ú__version__Ú__website__Ú__license__Úversion_infoÚbytesr2   Ú	Exceptionr   r   r   ÚAssertionErrorr   r,   ÚpartialrÇ   rÚ   r9   r>   Úobjectr@   ri   r|   r‡   r�   r¤   rª   r3   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ô ô<1�>ô 1ôh'�~ô 'ôTS�Nô Sôl�Nô ô6�Nô ô2@<�ô @<ôFT0�&ô T0ónGøðy ò àÒðûð ò ß;Ø
‚Cðús"   žD ±D! ÄDÄDÄ!D3Ä2D3