Ë
    èlÖiaä  ã                   óò  — d dl Z d dlZd dlmZmZmZmZmZmZm	Z	m
Z
 d dlmZmZ d dlmZ d dl mZ d dlmZ d dlmZmZ d dlmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& d d	l'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ d d
l0m1Z1 d dl2m3Z3  ejh                  e5«      Z6dZ7dZ8dZ9dZ:dZ;dZ<dZ=dZ>dZ?dZ@dZAdZBdZCdZDdZEdZF ed«      ZG G d„ deH«      ZI G d„ deH«      ZJ G d „ d!«      ZKe5d"k(  rd dlLZL eLjš                  «        yy)#é    N)ÚListÚDictÚIOÚCallableÚSetÚUnionÚOptionalÚAny)ÚpartialÚ
cmp_to_key)ÚMapping)Údeepcopy)ÚDeepDiff)Úpickle_loadÚpickle_dump)ÚstringsÚnumbersÚ
np_ndarrayÚnp_array_factoryÚnumpy_dtypesÚget_docÚ	not_foundÚnumpy_dtype_string_to_typeÚdict_ÚOpcodeÚFlatDeltaRowÚUnkownValueCodeÚFlatDataActionÚOPCODE_TAG_TO_FLAT_DATA_ACTIONÚFLAT_DATA_ACTION_TO_OPCODE_TAGÚ
SetOrdered)Ú_path_to_elementsÚ_get_nested_objÚ_get_nested_obj_and_forceÚGETÚGETATTRÚ
check_elemÚ
parse_pathÚstringify_path)ÚAnySet)Ú	summarizez¸Expected the old value for {} to be {} but it is {}. Error found on: {}. You may want to set force=True, especially if this delta is created by passing flat_rows_list or flat_dict_listz=Key or index of {} is not found for {} for setting operation.z=Unable to do the type change for {} from to type {} due to {}zsYou have applied the delta to an object that has different values than the original object the delta was made from.zEFailed to remove index[{}] on {}. It was expected to be {} but got {}z•A numpy ndarray is most likely being added to a delta. Due to Numpy override the + operator, you can only do: delta + ndarray and NOT ndarray + deltaz^Please open the file in the binary mode and pass to Delta by passing 'b' in open(..., 'b'): {}zOAt least one of the diff, delta_path or delta_file arguments need to be passed.zDinvalid action of {} when calling _get_elem_and_compare_to_old_valuez8invalid action of {} when calling _simple_set_elem_valuez Unable to get the item at {}: {}zUnable to get the item at {}zdDelta added to an incompatible object. Unable to add the following items at the specific indexes. {}ÚNUMPY_TO_LISTz{} is not a valid numpy type.z	delta.rstc                   ó   — e Zd ZdZy)Ú
DeltaErrorz
    Delta specific errors
    N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úS/var/www/html/strategist-ai/venv_dbt/lib/python3.12/site-packages/deepdiff/delta.pyr.   r.   4   ó   „ ñð 	r5   r.   c                   ó   — e Zd ZdZy)ÚDeltaNumpyOperatorOverrideErrorz-
    Delta Numpy Operator Override Error
    Nr/   r4   r5   r6   r9   r9   ;   r7   r5   r9   c            %       óZ  — e Zd ZeZddddddeddddedddddefdee	e
eedf   dee   dee   dee   deee      d	eee      d
ededededeee      dedee   dededee   dedef$d„Zd„ Zd„ Zd„ ZeZd„ ZdEd„Zd„ Z	 	 	 	 dFd„ZdGd„Z d„ Z!d „ Z"dHd!„Z#d"„ Z$d#„ Z%d$„ Z&d%„ Z'e(d&„ «       Z)e(d'„ «       Z*dId(„Z+d)„ Z,d*„ Z-d+„ Z.d,„ Z/d-„ Z0dJd.„Z1d/„ Z2d0„ Z3d1„ Z4d2„ Z5d3„ Z6d4„ Z7d5„ Z8d6„ Z9d7„ Z:d8„ Z;d9„ Z<d:„ Z=d;„ Z>d<„ Z?d=„ Z@d>„ ZAe(dKd?„«       ZBe(d	ee   fd@„«       ZCe(dA„ «       ZDdJdBee   fdC„ZEdJdBee   fdD„ZFy)LÚDeltaNTFÚdiffÚ
delta_pathÚ
delta_fileÚ
delta_diffÚflat_dict_listÚflat_rows_listÚdeserializerÚ
log_errorsÚmutateÚraise_errorsÚsafe_to_importÚ
serializerÚverify_symmetryÚbidirectionalÚalways_include_valuesÚiterable_compare_func_was_usedÚforceÚfillc                 ó  ‡— t        ‰d«      r$dt        ‰j                  j                  «      v r‰}ndˆfd„	}d | _        |�t
        j                  d«       |}|| _        |rd| _        n|| _        |�mt        |t        «      r%|j                  | | j                  ¬«      | _        �nt        |t        «      r|| _        nët        |t        «      rÛ |||¬«      | _        nË|r5t        |d«      5 }|j!                  «       }d d d «        ||¬«      | _        n”|r|| _        nŠ|r!	 |j!                  «       } |||¬«      | _        ng|r*| j+                  t-        j.                  |«      «      | _        n;|r*| j1                  t-        j.                  |«      «      | _        nt%        t2        «      ‚|	| _        |
| _        || _        | j                  j;                  d	d
«      | _        | j                  j;                  d|«      | _        || _         ‰| _!        || _"        || _#        |rtH        | _%        ntL        | _%        | jO                  «        y # 1 sw Y   �ŒKxY w# t"        $ r$}t%        t&        j)                  |«      «      d ‚d }~ww xY w)NÚ__code__rF   c           	      óÐ   •—  ‰| «      }|j                  d«      rKi }|d   j                  «       D ].  \  }}g ||<   |D ]  }||   j                  t        di |¤Ž«       Œ! Œ0 ||d<   |S )NÚ_iterable_opcodesr4   )ÚgetÚitemsÚappendr   )ÚobjrF   ÚresultrQ   ÚpathÚop_codesÚop_coderB   s          €r6   Ú_deserializerz%Delta.__init__.<locals>._deserializer_   s’   ø€ Ù% cÓ*�Ø—:‘:Ð1Ô2Ø(*Ð%Ø*0Ð1DÑ*E×*KÑ*KÓ*Mò ™˜˜hØ24Ð)¨$Ñ/Ø'/ò ˜GØ-¨dÑ3×:Ñ:Ü &ñ !"Ø&-ñ!"õñðð 3D�FÐ.Ñ/Ø�r5   zMDeepDiff Deprecation: use bidirectional instead of verify_symmetry parameter.T)ÚdirectedrJ   )rF   ÚrbÚ_numpy_pathsFÚ_iterable_compare_func_was_used©N)(ÚhasattrÚsetrO   Úco_varnamesÚ_reversed_diffÚloggerÚwarningrI   rJ   Ú
isinstancer   Ú_to_delta_dictr<   r   r   ÚopenÚreadÚUnicodeDecodeErrorÚ
ValueErrorÚBINIARY_MODE_NEEDED_MSGÚformatÚ_from_flat_dictsÚcopyr   Ú_from_flat_rowsÚDELTA_AT_LEAST_ONE_ARG_NEEDEDrD   rE   rC   rR   r]   r^   rG   rB   rL   rM   r$   Úget_nested_objr#   Úreset)Úselfr<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rZ   Úthe_fileÚcontentÚes          `               r6   Ú__init__zDelta.__init__F   s/  ø€ ô, �< Ô,Ð1AÄSÈ×I^ÑI^×IjÑIjÓEkÑ1kØ(‰Mõð  #ˆÔàÐ&Ü�N‰NØ_ôð ,ˆMà*ˆÔÙØ)-ˆDÕ&à)>ˆDÔ&àÐÜ˜$¤Ô)Ø ×/Ñ/¸]Ð9JÐbf×b|Ñb|Ð/Ó}�–	Ü˜D¤'Ô*Ø �•	Ü˜D¤'Ô*Ù)¨$¸~ÔN�•	ÙÜ�j $Ó'ð *¨8Ø"Ÿ-™-›/�÷*á% g¸nÔMˆD�IÙØ"ˆD�IÙðNØ$Ÿ/™/Ó+�ñ & g¸nÔMˆD�IÙà×-Ñ-¬d¯m©m¸NÓ.KÓLˆD�IÙØ×,Ñ,¬T¯]©]¸>Ó-JÓKˆD�IäÔ:Ó;Ð;àˆŒØ(ˆÔØ$ˆŒØ ŸI™IŸM™M¨.¸%Ó@ˆÔð 04¯y©y¯}©}Ð=^Ð`~Ó/ˆÔ,Ø$ˆŒØ(ˆÔØˆŒ
ØˆŒ	ÙÜ";ˆDÕä"1ˆDÔØ�
‰
�÷E*ñ *ûô &ò NÜ Ô!8×!?Ñ!?ÀÓ!BÓCÈÐMûðNús$   Ã-IÄ#I ÉIÉ	JÉI<É<Jc                 óN   — dj                  t        | j                  d¬«      «      S )Nz<Delta: {}>éd   )Ú
max_length)rm   r+   r<   ©rt   s    r6   Ú__repr__zDelta.__repr__©   s   € Ø×#Ñ#¤I¨d¯i©iÀCÔ$HÓIÐIr5   c                 ó"   — t        «       | _        y r_   )r   Úpost_process_paths_to_convertr|   s    r6   rs   zDelta.reset¬   s   € Ü-2«WˆÕ*r5   c                 ó   — t        |t        «      r| j                  rt        t        «      ‚| j
                  r|| _        nt        |«      | _        | j                  «        | j                  «        | j                  «        | j                  «        | j                  «        | j                  «        | j                  «        | j                  «        | j!                  «        | j#                  «        | j%                  «        | j'                  «        | j)                  «        | j+                  «        | j                  }| `| j-                  «        |S r_   )rf   r   r]   r9   Ú!DELTA_NUMPY_OPERATOR_OVERRIDE_MSGrD   Úrootr   Ú_do_pre_processÚ_do_values_changedÚ_do_set_item_addedÚ_do_set_item_removedÚ_do_type_changesÚ_do_iterable_opcodesÚ_do_iterable_item_removedÚ_do_iterable_item_addedÚ_do_ignore_orderÚ_do_dictionary_item_addedÚ_do_dictionary_item_removedÚ_do_attribute_addedÚ_do_attribute_removedÚ_do_post_processrs   )rt   Úothers     r6   Ú__add__zDelta.__add__¯   sÿ   € Ü�eœWÔ%¨$×*;Ò*;Ü1Ô2SÓTÐTØ�;Š;ØˆD�Iä  ›ˆDŒIØ×ÑÔØ×ÑÔ!Ø×ÑÔ!Ø×!Ñ!Ô#Ø×ÑÔð 	×!Ñ!Ô#Ø×&Ñ&Ô(Ø×$Ñ$Ô&Ø×ÑÔØ×&Ñ&Ô(Ø×(Ñ(Ô*Ø× Ñ Ô"Ø×"Ñ"Ô$Ø×ÑÔà—	‘	ˆàˆIØ�
‰
ŒØˆr5   c                 óö   — | j                   €| j                  «       | _         | j                   | j                  c| _        | _         | j                  |«      }| j                   | j                  c| _        | _         |S r_   )rc   Ú_get_reverse_diffr<   r’   )rt   r‘   rV   s      r6   Ú__rsub__zDelta.__rsub__Ï   sh   € Ø×ÑÐ&Ø"&×"8Ñ"8Ó":ˆDÔØ)-×)<Ñ)<¸d¿i¹iÐ&ˆŒ	�4Ô&Ø—‘˜eÓ$ˆØ)-×)<Ñ)<¸d¿i¹iÐ&ˆŒ	�4Ô&Øˆr5   c                 óv   — | j                   r t        t        |«      |«       | j                  rt	        |«      ‚y r_   )rC   Úgetattrrd   rE   r.   )rt   ÚmsgÚlevels      r6   Ú_raise_or_logzDelta._raise_or_log×   s2   € Ø�?Š?Ø"ŒG”F˜EÓ" 3Ô'Ø×ÒÜ˜S“/Ð!ð r5   c                 óÌ   — | j                   rX||k7  rRt        |t        «      r|}nt        |dt        f¬«      }| j                  t        j                  |||t        «      «       y y y )NÚ ©Úroot_element)	rI   rf   Ústrr)   r&   rš   ÚVERIFICATION_MSGrm   ÚVERIFY_BIDIRECTIONAL_MSG)rt   rW   Úexpected_old_valueÚcurrent_old_valueÚpath_strs        r6   Ú_do_verify_changeszDelta._do_verify_changesÝ   sf   € Ø×ÒÐ"4Ð8IÒ"IÜ˜$¤Ô$Ø‘ä)¨$¸bÄ'¸]ÔK�Ø×ÑÔ/×6Ñ6ØÐ,Ð.?ÔAYó [õ \ð #JÐr5   c           	      óä  — 	 t        |«       	 |t        k(  r||   }	|	S |t        k(  rt        ||«      }	|	S t        t        j	                  |«      «      ‚# t        $ r5}| j                  t        j	                  ||«      «       t
        cY d }~S d }~ww xY w# t        t        t        t        f$ �rA}
| j                  rŽ|€|�t!        |t"        «      ri }ng }n|}|t        k(  rLt!        |t$        «      r6t!        |t&        «      r|t)        |«      k  r|||<   n.|j+                  |«       n|||<   n|t        k(  rt-        |||«       |cY d }
~
S t
        }	t!        |t$        t.        f«      r(dj1                  |D �cg c]  }|d   ‘Œ	 nc c}w c}«      }| j2                  r(| j                  t4        j	                  |||	|
«      «       n$| j                  t6        j	                  |«      «       Y d }
~
|	S d }
~
ww xY w)Nú.r   )r'   rk   rš   ÚUNABLE_TO_GET_ITEM_MSGrm   r   r%   r&   r—   r.   Ú$INVALID_ACTION_WHEN_CALLING_GET_ELEMÚKeyErrorÚ
IndexErrorÚAttributeErrorÚ	TypeErrorrL   rf   rŸ   ÚlistÚintÚlenrT   ÚsetattrÚtupleÚjoinrI   r    ÚUNABLE_TO_GET_PATH_MSG)rt   rU   Úpath_for_err_reportingr¢   ÚelemÚactionÚforced_old_valueÚnext_elementÚerrorr£   rw   Ú_forced_old_valueÚis                r6   Ú"_get_elem_and_compare_to_old_valuez(Delta._get_elem_and_compare_to_old_valueæ   sÔ  € ð	Ü�tÔð
$	-ØœŠ}Ø$'¨¡IÐ!ðF !Ð ðE œ7Ò"Ü$+¨C°Ó$6Ð!ðB !Ð ô? !Ô!E×!LÑ!LÈVÓ!TÓUÐUøô ò 	Ø×ÑÔ5×<Ñ<Ð=SÐUZÓ[Ô\ÜÕûð	ûô œ*¤n´iÐ@ó 	-Ø�zŠzØ#Ð+Ø#Ð+¬z¸,ÌÔ/LØ,.Ñ)à,.Ñ)à(8Ð%ØœS’=Ü! #¤tÔ,Ü% d¬CÔ0°T¼CÀ»H²_Ø(9˜C šIàŸJ™JÐ'8Õ9à$5˜˜Dš	ØœwÒ&Ü˜C Ð'8Ô9Ø(Õ(Ü )ÐÜÐ0´4¼°-Ô@Ø),¯©ÐAWÖ2X¸A°1°Q³4Ñ2XùÔ2XÓ)YÐ&Ø×!Ò!Ø×"Ñ"Ô#3×#:Ñ#:Ø*Ø&Ð(9¸1ó$>õ ?ð ×"Ñ"Ô#9×#@Ñ#@Ø*ó$,ô -ûà Ð ûð=	-úsX   ‚A ŽB žB µB Á	BÁ*BÂBÂBÂG/Â.BG*ÅG/Å+G*Å3F 
Å?A%G*Ç*G/c                 ó  — 	 |t         k(  r	 |||<   y|t        k(  rt        |||«       yt        t        j                  |«      «      ‚# t        $ rî |t        |«      k(  r|j                  |«       nË| j                  t
        ur�|t        |«      kD  r‚t        |«      |k  rbt        | j                  «      r#|j                  | j	                  |||«      «       n|j                  | j                  «       t        |«      |k  rŒb|j                  |«       n'| j                  t        j                  ||«      «       Y yY yY yw xY w# t        t        t        t         f$ r+}| j                  dj                  ||«      «       Y d}~yd}~ww xY w)z=
        Set the element value directly on an object
        úFailed to set {} due to {}N)r%   r«   r°   rT   rM   r   Úcallablerš   ÚELEM_NOT_FOUND_TO_ADD_MSGrm   r&   r±   r.   Ú+INVALID_ACTION_WHEN_CALLING_SIMPLE_SET_ELEMrª   r¬   r­   )rt   rU   rµ   r¶   Úvaluer·   rw   s          r6   Ú_simple_set_elem_valuezDelta._simple_set_elem_value  sM  € ð	_ØœŠ}ðkØ %�C˜’Ið œ7Ò"Ü˜˜T 5Õ)ä Ô!L×!SÑ!SÐTZÓ![Ó\Ð\øô "ò kØœs 3›xÒ'ØŸ
™
 5Õ)ØŸ™¬)Ñ3¸¼sÀ3»xºÜ! #›h¨šoÜ'¨¯	©	Ô2Ø #§
¡
¨4¯9©9°S¸%ÐAWÓ+XÕ Yà #§
¡
¨4¯9©9Ô 5ô	 " #›h¨›oð
 Ÿ
™
 5Õ)à×*Ñ*Ô+D×+KÑ+KÈDÐRhÓ+iÖjñ *ñ *ðkûô  œ*¤n´iÐ@ò 	_Ø×ÑÐ;×BÑBÐCYÐ[\Ó]×^Ñ^ûð	_úsQ   ‚	E ŒA ’E ©E ÁB8D>Ä 7D>Ä7E Ä9E Ä;E Ä=D>Ä>E ÅFÅ!F Æ Fc	                 óp   — ||dœ| j                   |dd <    ||«      }|r| j                  |||||¬«       |S )z«
        Coerce obj and mark it in post_process_paths_to_convert for later to be converted back.
        Also reassign it to its parent to replace the old object.
        ©Úold_typeÚnew_typeNéÿÿÿÿ©rU   rµ   r¶   rÃ   r·   )r   rÄ   )	rt   ÚparentrU   rW   Úparent_to_obj_elemÚparent_to_obj_actionÚelementsÚto_typeÚ	from_types	            r6   Ú_coerce_objzDelta._coerce_obj8  sX   € ð JQÐ^gÑ<hˆ×*Ñ*¨8°C°R¨=Ñ9ñ
 �c‹lˆáð ×'Ñ'¨FÈ4ÐVhØ.1Ð:Nð (ô Pàˆ
r5   c
           
      ó¼  — t        |t        «      rot        |d«      rBt        |d«      r6|t        k(  r, |j                  di ||	i¤Ž}|r| j                  |||||¬«       y| j                  ||||||t        t        ¬«      }|dk7  rB| j                  r6t        |t        «      r&t        |«      dk(  ri }| j                  |||||¬«       | j                  ||||	|¬«       y)zs
        Set the element value on an object and if necessary convert the object to the proper mutable type
        Ú_fieldsÚ_replacerÊ   N)rÏ   rÐ   r   r4   )
rf   r²   r`   r&   rÔ   rÄ   rÑ   r®   rL   r°   )
rt   rË   rÌ   rÍ   rU   rÎ   rW   r¶   r·   Ú	new_values
             r6   Ú_set_new_valuezDelta._set_new_valueL  sý   € ô
 �cœ5Ô!ä�s˜IÔ&¬7°3¸
Ô+CØœWÒ$Ø&˜#Ÿ,™,Ñ;¨$°	Ð):Ñ;�CÙØ×3Ñ3¸ÐW[Ø9KÐSVØ;Oð 4ô Qð ð ×&Ñ&Ø˜C Ð'9Ø(¨(Ü ¬Eð 'ó 3�ð �1Š9˜Ÿš¬
°3¼Ô(=Ä#ÀcÃ(ÈaÂ-àˆCØ×'Ñ'¨FÈ4ÐVhØ.1Ð:Nð (ô Pà×#Ñ#¨ÀDÈtØ*3¸Fð 	$õ 	Dr5   c                 ó  — 	 |t         k(  r||= y|t        k(  r|j                  |= yt        t        j                  |«      «      ‚# t        t        t        f$ r+}| j                  dj                  ||«      «       Y d}~yd}~ww xY w)z:
        Delete the element directly on an object
        r¿   N)
r%   r&   Ú__dict__r.   Ú.INVALID_ACTION_WHEN_CALLING_SIMPLE_DELETE_ELEMrm   rª   r«   r¬   rš   )rt   rU   rµ   r¶   r·   rw   s         r6   Ú_simple_delete_elemzDelta._simple_delete_elemi  s|   € ð	_ØœŠ}Ø˜‘IØœ7Ò"Ø—L‘L Ñ&ä Ô!O×!VÑ!VÐW]Ó!^Ó_Ð_øÜœ*¤nÐ5ò 	_Ø×ÑÐ;×BÑBÐCYÐ[\Ó]×^Ñ^ûð	_ús!   ‚A �A ¦A ÁBÁ!A>Á>Bc	                 óÞ   — d}	t        |t        «      r*t        t        dœ| j                  |dd <   t        |«      }d}	| j	                  ||||¬«       |	r|r| j                  |||||¬«       yyy)zv
        Delete the element value on an object and if necessary convert the object to the proper mutable type
        FrÆ   NrÉ   T)rU   rµ   r¶   r·   rÊ   )rf   r²   r®   r   rÚ   rÄ   )
rt   rË   rÌ   rÍ   rU   rÎ   rW   r¶   r·   Ú
obj_is_news
             r6   Ú	_del_elemzDelta._del_elemw  s„   € ð
 ˆ
Ü�cœ5Ô!äMQÔ_dÑ@eˆD×.Ñ.¨x¸¸¨}Ñ=Ü�s“)ˆCØˆJØ× Ñ  SÀÈDÐY_Ð Ô`Ù™&ð ×'Ñ'¨FÈ4ÐVhØ.1Ð:Nð (õ Pð !ˆ:r5   c                 ó¤  — | j                   j                  di «      }| j                   j                  d«      }|r7|j                  «       D ��ci c]  \  }}|d   d “Œ }}}|j                  |«       |r| j	                  |d¬«       |r=|j                  «       D ��ci c]  \  }}|d   |d   “Œ }}}| j	                  |d¬«       y y c c}}w c c}}w )NÚiterable_item_addedÚiterable_item_movedÚnew_pathT)ÚinsertrÃ   F)r<   rR   rS   ÚupdateÚ_do_item_added)rt   rß   rà   ÚkÚvÚ
added_dicts         r6   rŠ   zDelta._do_iterable_item_added‰  sÓ   € Ø"Ÿi™iŸm™mÐ,AÀ2ÓFÐØ"Ÿi™iŸm™mÐ,AÓBÐñ
 Ø:M×:SÑ:SÓ:U×V±$°!°Q˜!˜J™-¨Ñ-ÐVˆJÑVØ×&Ñ& zÔ2áØ×ÑÐ 3¸DÐÔAáØ@S×@YÑ@YÓ@[×\¹¸¸1˜!˜J™-¨¨7©Ñ3Ð\ˆJÑ\Ø×Ñ 
°5ÐÕ9ð ùó Wùó ]s   ÁCÂCc                 óf   — | j                   j                  d«      }|r| j                  |d¬«       y y )NÚdictionary_item_addedF)Úsort©r<   rR   rä   )rt   ré   s     r6   rŒ   zDelta._do_dictionary_item_added›  s2   € Ø $§	¡	§¡Ð.EÓ FÐÙ Ø×ÑÐ 5¸EÐÕBð !r5   c                 ób   — | j                   j                  d«      }|r| j                  |«       y y )NÚattribute_addedrë   )rt   rí   s     r6   rŽ   zDelta._do_attribute_added   s+   € ØŸ)™)Ÿ-™-Ð(9Ó:ˆÙØ×Ñ Õ0ð r5   c                 óN   — t        | d   «      }|D �cg c]  }|d   ‘Œ	 c}S c c}w )Nr   )r"   )Úpath_and_valuerÎ   r¼   s      r6   Ú_sort_key_for_item_addedzDelta._sort_key_for_item_added¥  s+   € ä$ ^°AÑ%6Ó7ˆð 'Ö'˜��!“Ò'Ð'ùÒ's   “"c                 óB  — t        | d   d¬«      D �cg c]  }|d   ‘Œ	 }}t        |d   d¬«      D �cg c]  }|d   ‘Œ	 }}	 ||k  ry||kD  ryyc c}w c c}w # t        $ r¼ t        |«      t        |«      kD  r|dt        |«       }n%t        |«      t        |«      kD  r|dt        |«       }t        ||«      D ]_  \  }}t	        |«      t	        |«      k7  st	        |«      dv rt        |«      }t        |«      }	 ||k  r Y y||kD  r Y yŒR# t        $ r Y Œ]w xY w Y yw xY w)zÓ
        We use sort comparison instead of _sort_key_for_item_added when we run into comparing element types that can not
        be compared with each other, such as None to None. Or integer to string.
        r   Nr�   rÉ   é   )r"   r­   r°   ÚzipÚtyperŸ   )ÚleftÚrightr¼   Ú	left_pathÚ
right_pathÚl_elemÚr_elems          r6   Ú_sort_comparisonzDelta._sort_comparison¬  s=  € ô $5°T¸!±WÈ4Ô#PÖQ˜a�Q�q“TÐQˆ	ÐQÜ$5°e¸A±hÈTÔ$RÖS˜q�a˜“dÐSˆ
ÐSð	Ø˜:Ò%ØØ˜ZÒ'Øàùò RùÚSøô ò 	Ü�9‹~¤ J£Ò/Ø%Ð&6¤s¨:£Ð7‘	Ü�Z“¤3 y£>Ò1Ø'¨¬¨Y«Ð8�
Ü"% i°Ó"<ò 
‘�˜Ü˜“<¤4¨£<Ò/´4¸³<À4Ñ3GÜ  ›[�FÜ  ›[�FðØ ’Ú!Ø &šÚ ð )øä ò Ùðúñ
ð ð!	úsY   “A³AÁA ÁA ÁB DÃ:DÃ?DÄDÄDÄ
DÄ	DÄDÄDÄDÄDc                 ó¸  — |r'	 t        |j                  «       | j                  ¬«      }n|j                  «       }|D ]_  \  }}| j                  |«      }|r|\  }}}	}
}}}nŒ%|r |t        |«      k  r|j                  |d «       | j                  ||	|
||||||«	       Œa y # t        $ r1 t        |j                  «       t	        | j
                  «      ¬«      }Y Œžw xY w)N)Úkey)
ÚsortedrS   rð   r­   r   rû   Ú_get_elements_and_detailsr°   râ   rÖ   )rt   rS   rê   râ   rW   rÕ   Úelem_and_detailsrÎ   rË   rÌ   rÍ   rU   r¶   r·   s                 r6   rä   zDelta._do_item_addedÐ  så   € ÙðUÜ˜uŸ{™{›}°$×2OÑ2OÔP‘ð —K‘K“MˆEà$ò 	N‰OˆD�)Ø#×=Ñ=¸dÓCÐÙØ`pÑ]�˜&Ð"4Ð6JÈCÐQUÑW]àñ ˜$¤ S£š/Ø—
‘
˜4 Ô&à×Ñ Ð(:Ð<PØ # X¨t°T¸6À9õNñ	Nøô ò UÜ˜uŸ{™{›}´*¸T×=RÑ=RÓ2SÔT’ðUús   „%B Â7CÃCc                 ób   — | j                   j                  d«      }|r| j                  |«       y y )NÚvalues_changed©r<   rR   Ú_do_values_or_type_changed)rt   r  s     r6   r„   zDelta._do_values_changedê  s+   € ØŸ™Ÿ™Ð'7Ó8ˆÙØ×+Ñ+¨NÕ;ð r5   c                 óf   — | j                   j                  d«      }|r| j                  |d¬«       y y )NÚtype_changesT©Úis_type_changer  )rt   r  s     r6   r‡   zDelta._do_type_changesï  s/   € Ø—y‘y—}‘} ^Ó4ˆÙØ×+Ñ+¨LÈÐ+ÕNð r5   c                 óZ   — | j                   r| j                  | j                   dd¬«       y y )NTF)r  Úverify_changes)r   r  r|   s    r6   r�   zDelta._do_post_processô  s/   € Ø×-Ò-ð ×+Ñ+¨D×,NÑ,NÐ_cÐtyÐ+Õzð .r5   c                 ó´  — | j                   r’d| j                  v sd| j                  v rut        «       }| j                   j                  «       D ]7  \  }}t        t
        dœ||<   	 t        |«      }t
        |dœ| j                  |<   Œ9 |r| j                  |d¬«       y y y y # t        $ r.}| j                  t        j                  |«      «       Y d }~Œ…d }~ww xY w)Nrß   Úiterable_item_removedrÆ   Tr  )r]   r<   r   rS   r   r®   r   Ú	Exceptionrš   ÚNOT_VALID_NUMPY_TYPErm   r   r  )rt   Úpreprocess_pathsrW   Útype_rw   s        r6   rƒ   zDelta._do_pre_processú  sã   € Ø×ÒÐ"7¸4¿9¹9Ñ"DÐH_Ðcg×clÑclÑHlÜ$›wÐØ#×0Ñ0×6Ñ6Ó8ò a‘��eÜ6@ÌdÑ)SÐ  Ñ&ðÜ6°uÓ=�Eô IMÐZ_Ñ;`�×2Ñ2°4Ò8ðañ  Ø×/Ñ/Ð0@ÐQUÐ/ÕVð  ð ImÐøô !ò Ø×&Ñ&Ô';×'BÑ'BÀ1Ó'EÔFÜûðús   Á$B Â 	CÂ)$CÃCc                 óÌ  — 	 t        |«      }t        |«      dkD  rc|d d }t        |«      t        |«      k7  r|d   d   }|d   d   }nd }| j                  | ||¬«      }|d   \  }}| j                  ||d ||¬«      }	nd x}x}}| }	|d   \  }
}t	        |
«       |	t
        u ry |||||	|
|fS # t        $ r/}| j                  t        j                  ||«      «       Y d }~y d }~ww xY w)Nrò   éþÿÿÿr   rÉ   )rU   rÎ   r¹   )rU   rµ   r¢   r¶   r·   r¹   )
r"   r°   rr   r½   r'   r   r  rš   r¨   rm   )rt   rW   rÎ   Úelements_subsetr¹   Únext2_elementrË   rÌ   rÍ   rU   r¶   r·   rw   s                r6   rÿ   zDelta._get_elements_and_details  s.  € ð	aÜ(¨Ó.ˆHÜ�8‹}˜qÒ Ø"*¨3¨B -�Ü�Ó'¬3¨x«=Ò8Ø#+¨B¡<°¡?�LØ$,¨R¡L°¡O‘Mà#'�LØ×,Ñ,°ÀÐ^jÐ,Ók�Ø;CÀB¹<Ñ8Ð"Ð$8Ø×=Ñ=Ø°tÐPTØ+Ð4HÐWdð >ó f‘ð FJÐI�ÐIÐ+Ð.BØ�à# B™<‰LˆD�&Ü�tÔð
 ”iÑØØ˜VÐ%7Ð9MÈsÐTXÐZ`Ð`Ð`øô ò 	Ø×ÑÔ5×<Ñ<¸TÀ1ÓEÔFÜûð	ús   ‚BB+ Â+	C#Â4%CÃC#c                 ó8  — |j                  «       D ]·  \  }}| j                  |«      }|r|\  }}}	}
}}}nŒ%|j                  dt        «      }| j	                  |||||¬«      }|t        u rŒZ|r(d|vr$	 |d   }|t
        v rt        ||«      }n ||«      }n|d   }| j                  ||	|
||||||«	       |sŒ¥| j                  |||«       Œ¹ y # t        $ rD}| j                  t        j                  ||   |j                  dd«      |«      «       Y d }~�Œd }~ww xY w)NÚ	old_value)rU   rµ   r¢   r¶   r·   rÕ   rÈ   Úunknown)rS   rÿ   rR   r   r½   r   r   r  rš   ÚTYPE_CHANGE_FAIL_MSGrm   rÖ   r¥   )rt   Úchangesr  r
  rW   rÃ   r   rÎ   rË   rÌ   rÍ   rU   r¶   r·   r¢   r£   rÈ   rÕ   rw   s                      r6   r  z Delta._do_values_or_type_changed)  sY  € Ø"Ÿ=™=›?ò !	U‰KˆD�%Ø#×=Ñ=¸dÓCÐÙØ`pÑ]�˜&Ð"4Ð6JÈCÐQUÑW]àØ!&§¡¨;¼	Ó!BÐà $× GÑ GØ°ÐI[ÐbfÐouð !Hó !wÐà ¤IÑ-Øñ  +°UÑ":ð	Ø$ ZÑ0�Hà¤<Ñ/Ü$4Ð5FÈÓ$Q™	á$,Ð->Ó$?˜	øð
 " +Ñ.�	à×Ñ Ð(:Ð<PØ # X¨t°T¸6À9ôNò Ø×'Ñ'¨Ð.@ÐBSÕTñC!	Uøô. !ò Ø×&Ñ&Ô';×'BÑ'BÀ3ÀtÁ9ÈeÏiÉiÐXbÐdmÓNnÐpqÓ'rÔsÝûðús   Á2"CÃ	DÃ9DÄDc                 óž  — 	 t        |j                  «       | j                  d¬«      }|D ]Á  \  }}| j                  |«      }|r|\  }}}}	}
}}nŒ%d}t        }	 |t        k(  r|
|   }n|t        k(  rt        |
|«      }||k7  }|r3t        |
t        «      r#| j                   s| j#                  |
||«      }|�|}|t        u s|€Œ—| j%                  |||	|
||||«       | j'                  |||«       ŒÃ y# t        $ r3 t        |j                  «       t	        | j
                  «      d¬«      }Y �Œw xY w# t        t        t        t        f$ r d}Y ŒÊw xY w)z(
        Handle removing items.
        T)rý   ÚreverseFN)rþ   rS   rð   r­   r   rû   rÿ   r   r%   r&   r—   rª   r«   r¬   rf   r®   r^   Ú(_find_closest_iterable_element_for_indexrÝ   r¥   )rt   rS   Úsorted_itemrW   r¢   r   rÎ   rË   rÌ   rÍ   rU   r¶   r·   Úlook_for_expected_old_valuer£   s                  r6   Ú_do_item_removedzDelta._do_item_removedM  sy  € ð	eÜ  §¡£°D×4QÑ4QÐ[_Ô`ˆKð )4ò 	QÑ$ˆDÐ$Ø#×=Ñ=¸dÓCÐÙØ`pÑ]�˜&Ð"4Ð6JÈCÐQUÑW]àà*/Ð'Ü )Ðð3ØœS’=Ø(+¨D©	Ñ%ØœwÒ&Ü(/°°TÓ(:Ð%Ø.?ÐCUÑ.UÐ+ñ +¬z¸#¼tÔ/DÈT×MqÒMqà×DÑDÀSÈ$ÐPbÓc�ØÐ#Ø(:Ð%Ø ¤IÑ-°°Øà�N‰N˜6Ð#5Ð7KØ ¨$°°fô>à×#Ñ# DÐ*<Ð>OÕPñ9	Qøô ò 	eÜ  §¡£´J¸t×?TÑ?TÓ4UÐ_cÔd‹Kð	eûô" œj¬.¼)ÐDò 3Ø.2Ò+ð3ús#   ‚&C/ Á)D.Ã/8D+Ä*D+Ä.EÅEc                 ó’   — d }t        d«      }t        |«      D ]+  \  }}t        ||z
  «      }||kD  r |S ||k(  sŒ"||k  sŒ(|}|}Œ- |S )NÚinf)ÚfloatÚ	enumerateÚabs)	rt   rU   r¶   r¢   Úclosest_elemÚclosest_distanceÚindexrÃ   Údists	            r6   r  z.Delta._find_closest_iterable_element_for_indexu  sp   € ØˆÜ  ›<ÐÜ% c›Nò 	(‰LˆE�5Ü�u˜t‘|Ó$ˆDØÐ&Ò&Øð Ðð Ð*Ó*¨tÐ6FÓ/FØ$�Ø#'Ñ ð	(ð Ðr5   c                 óÎ  — | j                   j                  di «      }|�rF|j                  «       D �]1  \  }}g }| j                  |«      }|r#|\  }}}}	}
}}|€| }| j                  }
d}t
        }	nŒ@| j                  | |¬«      }
t        |
t        «      }|D ]   }|j                  dk(  r|j                  |j                  «       Œ.|j                  dk(  rŒ>|j                  dk(  r|j                  |j                  «       Œi|j                  dk(  sŒy|j                  |
|j                  |j                   «       Œ¢ |r#t        |
«      }
| j                  ||||
|	¬«       �Œ-||
d d  �Œ4 y y )	NrQ   r‚   ©rU   rÎ   ÚreplaceÚdeleterâ   ÚequalrÊ   )r<   rR   rS   rÿ   r‚   r&   rr   rf   r²   ÚtagÚextendÚ
new_valuesÚt1_from_indexÚt1_to_indexrÄ   )rt   rQ   rW   ÚopcodesÚtransformedr   rÎ   rË   rÌ   rÍ   rU   r¶   r·   Úis_obj_tupleÚopcodes                  r6   rˆ   zDelta._do_iterable_opcodes�  s|  € Ø ŸI™IŸM™MÐ*=¸rÓBÐÚØ!2×!8Ñ!8Ó!:ó $)‘��gØ �à#'×#AÑ#AÀ$Ó#GÐ Ù#ØdtÑa�H˜fÐ&8Ð:NÐPSÐUYÐ[aØ�~Ø!%˜Ø"Ÿi™i˜Ø-3Ð*Ü/6Ñ,àà×)Ñ)¨d¸XÐ)ÓF�Ü)¨#¬uÓ5�Ø%ò Y�FØ—z‘z YÒ.à#×*Ñ*¨6×+<Ñ+<Õ=ØŸ™ xÒ/à ØŸ™ xÒ/à#×*Ñ*¨6×+<Ñ+<Õ=ØŸ™ wÓ.à#×*Ñ*¨3¨v×/CÑ/CÀF×DVÑDVÐ+WÕXðYñ  Ü ›*�Cð ×/Ñ/°FÐSWÐ^pØ69ÐBVð 0ö Xð )�C™’FñI$)ð r5   c                 ó  — | j                   j                  di «      }| j                   j                  d«      }|r7|j                  «       D ��ci c]  \  }}||d   “Œ }}}|j                  |«       |r| j	                  |«       y y c c}}w )Nr  rà   rÃ   )r<   rR   rS   rã   r  )rt   r  rà   rå   ræ   Úremoved_dicts         r6   r‰   zDelta._do_iterable_item_removed°  s‚   € Ø $§	¡	§¡Ð.EÀrÓ JÐà"Ÿi™iŸm™mÐ,AÓBÐÙà6I×6OÑ6OÓ6Q×R©d¨a°˜A˜q ™z™MÐRˆLÑRØ!×(Ñ(¨Ô6á Ø×!Ñ!Ð"7Õ8ð !ùó Ss   ÁBc                 ób   — | j                   j                  d«      }|r| j                  |«       y y )NÚdictionary_item_removed©r<   rR   r  )rt   r:  s     r6   r�   z!Delta._do_dictionary_item_removed¼  s-   € Ø"&§)¡)§-¡-Ð0IÓ"JÐÙ"Ø×!Ñ!Ð"9Õ:ð #r5   c                 ób   — | j                   j                  d«      }|r| j                  |«       y y )NÚattribute_removedr;  )rt   r=  s     r6   r�   zDelta._do_attribute_removedÁ  s-   € Ø ŸI™IŸM™MÐ*=Ó>ÐÙØ×!Ñ!Ð"3Õ4ð r5   c                 óf   — | j                   j                  d«      }|r| j                  |d¬«       y y )NÚset_item_addedÚunion©Úfunc©r<   rR   Ú_do_set_or_frozenset_item©rt   rS   s     r6   r…   zDelta._do_set_item_addedÆ  s0   € Ø—	‘	—‘Ð.Ó/ˆÙØ×*Ñ*¨5°wÐ*Õ?ð r5   c                 óf   — | j                   j                  d«      }|r| j                  |d¬«       y y )NÚset_item_removedÚ
differencerA  rC  rE  s     r6   r†   zDelta._do_set_item_removedË  s0   € Ø—	‘	—‘Ð0Ó1ˆÙØ×*Ñ*¨5°|Ð*ÕDð r5   c           
      ó|  — |j                  «       D ]©  \  }}t        |«      }| j                  | |d d ¬«      }|d   \  }}| j                  ||d ||t	        «       ¬«      }	 t        |	|«      |«      }
t        |d«      r(t        |d«      r |j                  di ||
i¤Ž}|| _        Œ”| j                  ||||
|¬«       Œ« y )NrÉ   r*  )rµ   r¢   r¶   r·   r¸   rÓ   rÔ   )rµ   r¶   rÃ   r·   r4   )
rS   r"   rr   r½   ra   r—   r`   rÔ   r‚   rÄ   )rt   rS   rB  rW   rÃ   rÎ   rË   r¶   r·   rU   rÕ   Ú
new_parents               r6   rD  zDelta._do_set_or_frozenset_itemÐ  sÙ   € Ø Ÿ;™;›=ò 	|‰KˆD�%Ü(¨Ó.ˆHØ×(Ñ(¨T¸HÀSÀb¸MÐ(ÓJˆFØ# B™<‰LˆD�&Ø×9Ñ9Ø¨tÈÐSWÐ`fÔy|Óy~ð :ó @ˆCà*œ  TÓ*¨5Ó1ˆIÜ�v˜yÔ)¬g°f¸jÔ.Ià,˜VŸ_™_ÑA°°iÐ/@ÑA�
Ø&�•	à×+Ñ+¨FÈ4ÐVZÐbkÐtzÐ+Õ{ñ	|r5   c              #   óî   K  — d}t        |«      dz
  }||k  r\|dz  }||   }||v rŒ||v r>|j                  |«      }||k(  rŒ/| j                  t        j	                  ||||«      «       |–— ||k  rŒ[yy­w)zp
        A generator that gets the old values in an iterable when the order was supposed to be ignored.
        rÉ   rò   N)r°   Úpoprš   Ú$FAIL_TO_REMOVE_ITEM_IGNORE_ORDER_MSGrm   )	rt   rU   Úremove_indexes_per_pathÚfixed_indexes_valuesrµ   Úold_obj_indexÚmax_lenÚcurrent_old_objÚexpected_obj_to_deletes	            r6   Ú_do_ignore_order_get_oldzDelta._do_ignore_order_get_oldß  s¢   è ø€ ð ˆÜ�c“(˜Q‘,ˆØ˜gÒ%Ø˜QÑˆMØ! -Ñ0ˆOØÐ"6Ñ6ØØÐ 7Ñ7Ø)@×)DÑ)DÀ]Ó)SÐ&Ø"Ð&<Ò<Øà×&Ñ&Ô'K×'RÑ'RØ%Ð'=Ð?UÐWfó(hô ià!Ò!ð ˜gÕ%ùs   ‚A0A5Á3A5c                 óª  — | j                   j                  dt        «       «      }| j                   j                  dt        «       «      }t        |j	                  «       «      t        |j	                  «       «      z  }|D �]Á  }| j                  dj                  |«      «      }|r|\  }}}}	}
}}nŒ2|j                  |t        «       «      j                  «       }|j                  |t        «       «      j                  «       }t        |j                  «       «      }g }t        |
t        «      r|
j                  dkD  }nt        |
«      }| j                  |
|||¬«      }|s|r°t        |«      }||v r#|j!                  |«      }|j#                  |«       nx|r	 t%        |«      }|j#                  |«       nX| j)                  t*        j                  |«      «       |j!                  t%        t-        |«      «      «      }|j#                  |«       |rŒ­|rŒ°t        |
t.        «      rt/        |«      }| j1                  |||||	¬«       �ŒÄ y# t&        $ r d}Y ŒHw xY w)	a‘  

            't1': [5, 1, 1, 1, 6],
            't2': [7, 1, 1, 1, 8],

            'iterable_items_added_at_indexes': {
                'root': {
                    0: 7,
                    4: 8
                }
            },
            'iterable_items_removed_at_indexes': {
                'root': {
                    4: 6,
                    0: 5
                }
            }

        Úiterable_items_added_at_indexesÚ!iterable_items_removed_at_indexesz{}[0]r   )rµ   FrÊ   N)r<   rR   r   r!   Úkeysrÿ   rm   ro   r*   Úvaluesrf   r   ÚsizeÚboolrT  r°   rL  rT   ÚnextÚStopIterationrš   Ú#INDEXES_NOT_FOUND_WHEN_IGNORE_ORDERÚiterr²   rÄ   )rt   Úfixed_indexesÚremove_indexesÚpathsrW   r   Ú_rË   rÌ   rÍ   rU   Úfixed_indexes_per_pathrN  rO  Únew_objÚthere_are_old_itemsÚold_item_genÚnew_obj_indexÚnew_items                      r6   r‹   zDelta._do_ignore_orderó  s+  € ð( Ÿ	™	Ÿ™Ð&GÌËÓQˆØŸ™Ÿ™Ð'JÌEËGÓTˆÜ˜=×-Ñ-Ó/Ó0´:¸n×>QÑ>QÓ>SÓ3TÑTˆØó ,	TˆDð  $×=Ñ=¸g¿n¹nÈTÓ>RÓSÐÙØQaÑN��6Ð-Ð/CÀSÈ!ÉQàà%2×%6Ñ%6°t¼U»WÓ%E×%JÑ%JÓ%LÐ"Ø&4×&8Ñ&8¸¼u»wÓ&G×&LÑ&LÓ&NÐ#Ü#)Ð*@×*GÑ*GÓ*IÓ#JÐ àˆGä˜#œzÔ*Ø&)§h¡h°¡lÑ#ä&*¨3£iÐ#Ø×8Ñ8ØÐ,Ð.BÐ[_ð 9ó aˆLá%Ñ)?Ü # G£�Ø Ð$:Ñ:Ø5×9Ñ9¸-ÓH�HØ—N‘N 8Õ,Ù(ð1Ü#'¨Ó#5˜ð  Ÿ™ xÕ0ð ×&Ñ&Ô'J×'QÑ'QÐRhÓ'iÔjØ5×9Ñ9¼$¼tÐDZÓ?[Ó:\Ó]�HØ—N‘N 8Ô,ò! &Ò)?ô$ ˜#œuÔ%Ü ›.�ð ×'Ñ'¨FÈ4ÐVhØ.5Ð>Rð (ö TñW,	Tøô: )ò 4Ø.3Ò+ð4ús   ÆIÉIÉIc                 óh  — | j                   st        d«      ‚ddddddœ}t        |j                  «       «      D ]
  }||||   <   Œ i }| j                  j                  «       D �]Ì  \  }}|j                  |«      }|r|||<   Œ |dk(  rGi ||<   |j                  «       D ].  \  }}|j                  d	«      r|d	   n|}	|d
   |d   dœ||   |	<   Œ0 Œl|dk(  rli ||<   |j                  «       D ]S  \  }}|j                  d	«      r|d	   n|}	|d   |d   dœ||   |	<   d|v r|d   ||   |	   d
<   d
|v sŒF|d
   ||   |	   d<   ŒU ŒÝ|dk(  r2i ||<   |j                  «       D ]  \  }}|d	   }
||d   dœ||   |
<   Œ �Œ|dk(  s�Œi ||<   |j                  «       D ]š  \  }}g ||   |<   |D ]ˆ  }|j                  }dddœj                  ||«      }t        ||j                  |j                  |j                  |j                  |j                  |j                  ¬«      }||   |   j                  |«       ŒŠ Œœ �ŒÏ |S )Nz1Please recreate the delta with bidirectional=Truer  rW  r=  rG  r:  )rß   rV  rí   r?  ré   r  rá   r  rÕ   ©rÕ   r  r  rÈ   rÇ   rÆ   rà   rÃ   )rá   rÃ   rQ   râ   r,  )r,  râ   ©r.  r1  r2  Út2_from_indexÚt2_to_indexr0  Ú
old_values)rI   rk   r®   rX  r<   rS   rR   r.  r   rm  rn  r1  r2  ro  r0  rT   )rt   ÚSIMPLE_ACTION_TO_REVERSErý   Úr_diffr·   ÚinfoÚreverse_actionrW   Ú	path_infoÚreverse_pathÚold_pathrX   rY   r.  Únew_op_codes                  r6   r”   zDelta._get_reverse_diff8  sÖ  € Ø×!Ò!ÜÐPÓQÐQð $;Ø/RØ2Ø0Ø%>ñ$
Ð ô Ð0×5Ñ5Ó7Ó8ò 	JˆCØFIÐ$Ð%=¸cÑ%BÒCð	Jð ˆØ ŸI™IŸO™OÓ-ó -	A‰LˆF�DØ5×9Ñ9¸&ÓAˆNÙØ)-��~Ò&ØÐ+Ò+Ø!#��v‘Ø'+§z¡z£|ò ‘O�D˜)Ø<E¿M¹MÈ*Ô<U 9¨ZÒ#8Ð[_�Là%.¨{Ñ%;È)ÐT_ÑJ`ñ4�F˜6‘N <Ò0ñð
 ˜>Ò)Ø!#��v‘Ø'+§z¡z£|ò [‘O�D˜)Ø<E¿M¹MÈ*Ô<U 9¨ZÒ#8Ð[_�Là$-¨jÑ$9ÀyÐQ[ÑG\ñ4�F˜6‘N <Ñ0ð # iÑ/ØDMÈkÑDZ˜˜v™ |Ñ4°[ÑAØ" iÒ/ØDMÈkÑDZ˜˜v™ |Ñ4°[ÒAñ[ð Ð0Ò0Ø!#��v‘Ø'+§z¡z£|ò ‘O�D˜)Ø(¨Ñ4�Hà$(°9¸WÑ3Eñ0�F˜6‘N 8Ò,òð
 Ð.Ô.Ø!#��v‘Ø&*§j¡j£lò A‘N�D˜(Ø+-�F˜6‘N 4Ñ(Ø#+ò A˜Ø%Ÿk™k˜Ø)1¸XÑF×JÑJÈ3ÐPSÓT˜Ü&,Ø #Ø*1×*?Ñ*?Ø(/×(;Ñ(;Ø*1×*?Ñ*?Ø(/×(;Ñ(;Ø'.×'9Ñ'9Ø'.×'9Ñ'9ô'˜ð ˜v™ tÑ,×3Ñ3°KÕ@ñAòAð?-	Að\ ˆr5   c                 óØ   — t        | j                  j                  j                  «      }d|v r| j                  | j                  |¬«       y|j                  | j                  «       «       y)z'
        Dump into file object
        Úfile_obj)ry  N)ra   rG   rO   rb   r<   ÚwriteÚdumps)rt   ÚfileÚparam_names_of_serializers      r6   Údumpz
Delta.dumpx  sN   € ô %(¨¯©×(@Ñ(@×(LÑ(LÓ$MÐ!ØÐ2Ñ2Ø�O‰O˜DŸI™I°ˆOÕ5à�J‰J�t—z‘z“|Õ$r5   c                 ó8   — | j                  | j                  «      S )zx
        Return the serialized representation of the object as a bytes object, instead of writing it to a file.
        )rG   r<   r|   s    r6   r{  zDelta.dumps‡  s   € ð �‰˜tŸy™yÓ)Ð)r5   c                 ó,   — t        | j                  «      S r_   )Údictr<   r|   s    r6   Úto_dictzDelta.to_dict�  s   € Ü�D—I‘I‹Ðr5   c                 óž  — g }| j                   d   j                  «       D ]ª  \  }}|D ]   }|j                  t         ||«      t        |j
                     |j                  |j                  t        |j                  «      t        |j                  «      d|j                  |j                  |j                  |j                  ¬«      «       Œ¢ Œ¬ |S )z4
        Converts op_codes to FlatDeltaRows
        rQ   N)rW   r·   rÃ   r  rô   rÇ   rá   r1  r2  rm  rn  )r<   rS   rT   r   r   r.  r0  ro  rô   r1  r2  rm  rn  )rt   Ú_parse_pathrV   rW   rX   rY   s         r6   Ú_flatten_iterable_opcodeszDelta._flatten_iterable_opcodes�  sÂ   € ð ˆØ"Ÿi™iÐ(;Ñ<×BÑBÓDò 	‰NˆD�(Ø#ò �Ø—‘Ü Ù(¨Ó.Ü=¸g¿k¹kÑJØ%×0Ñ0Ø")×"4Ñ"4Ü! '×"4Ñ"4Ó5Ü!% g×&8Ñ&8Ó!9Ø!%Ø&-×&;Ñ&;Ø$+×$7Ñ$7Ø&-×&;Ñ&;Ø$+×$7Ñ$7ôõñð	ð$ ˆr5   c              #   ó&  K  — |j                  «       D ]z  \  }} ||«      | dœ}|D ]$  \  }}	}
||v sŒ|
r |
||   «      ||	<   Œ||   ||	<   Œ& |r2d|v rd|vrt        |d   «      |d<   d|v rd|vrt        |d   «      |d<   t        di |¤Ž–— Œ| y ­w)N)rW   r·   rÃ   rô   r  rÇ   r4   )rS   rô   r   )r·   rr  r„  Úkeys_and_funcsÚreport_type_changesrW   ÚdetailsÚrowrý   Únew_keyrB  s              r6   Ú_get_flat_rowzDelta._get_flat_row©  sÂ   è ø€ à!ŸZ™Z›\ò 	&‰MˆD�'Ù& tÓ,¸Ñ?ˆCØ&4ò 4Ñ"��W˜dØ˜'’>ÙÙ'+¨G°C©LÓ'9˜˜Gšà'.¨s¡|˜˜Gšð4ñ #Ø˜c‘> f°CÑ&7Ü"& s¨7¡|Ó"4�C˜‘KØ #Ñ%¨*¸CÑ*?Ü&*¨3¨{Ñ+;Ó&<�C˜
‘OÜÑ% Ñ%Ó%ñ	&ùs   ‚/B²ABc                 ó>   — d„ | D «       }t         j                  |«      S )Nc              3   ó<   K  — | ]  }|j                  «       –— Œ y ­wr_   )Ú_asdict)Ú.0r¼   s     r6   ú	<genexpr>z(Delta._from_flat_rows.<locals>.<genexpr>¼  s   è ø€ Ò>¨!˜!Ÿ)™)Ÿ+Ñ>ùs   ‚)r;   rn   )rA   r@   s     r6   rp   zDelta._from_flat_rowsº  s   € á>¨~Ô>ˆÜ×%Ñ% nÓ5Ð5r5   c                 ó  — i }dddœ}| D �]w  }d}|j                  d«      }|j                  d«      }|j                  d«      }|j                  d«      }|j                  d	t        «      }	|st        d
«      ‚|€t        d«      ‚||v r||   }|j                  «       }|t        j
                  t        j                  hv r	dt        f}
ndt        f}
t        |t        «      r|}nt        ||
¬«      }|r||k7  rt        ||
¬«      }nd}||vri ||<   |dv r|||   vri ||   |<   |||   |   |<   �nC|t        j                  t        j                  hv r0|||   vrt        «       ||   |<   ||   |   j                  |«       �nñ|t        j                   t        j"                  t        j                  t        j
                  t        j$                  t        j&                  hv r
|||   |<   �n‰|dk(  r"|	t        k(  rd|i||   |<   �no||	dœ||   |<   �nb|dk(  r_|j                  dt        «      }|j                  dt        «      }d|i||   |<   d|fd|fd	|	ffD ]  \  }}|t        k7  sŒ|||   |   |<   Œ nþ|t        j(                  k(  rd|i||   |<   nà|t        j*                  t        j,                  t        j.                  t        j0                  hv r d|vri |d<   ||d   vrg |d   |<   |d   |   j3                  t5        t6        |   |j                  d«      |j                  d«      |j                  d«      |j                  d«      |j                  d«      |j                  d	«      ¬«      «       |s�Œm|||   |   d<   �Œz |S )zH
        Create the delta's diff object from the flat_dict_list
        rV  rW  )Úunordered_iterable_item_addedÚunordered_iterable_item_removedNr·   rW   rÃ   rá   r  z'Flat dict need to include the 'action'.z%Flat dict need to include the 'path'.r‚   r�   >   rV  rW  r  rÕ   rk  r  rô   rÇ   rÈ   rQ   r1  r2  rm  rn  rl  )rR   r   rk   rL  r   rí   r=  r&   r%   rf   rŸ   r)   r?  rG  ra   Úaddré   r:  rß   r  rà   Úiterable_items_insertedÚiterable_items_deletedÚiterable_items_replacedÚiterable_items_equalrT   r   r    )r@   rV   ÚFLATTENING_NEW_ACTION_MAPÚ	flat_dictr'  r·   rW   rÃ   rá   r  rž   r¤   r  rÇ   r¶   Ú
elem_values                   r6   rn   zDelta._from_flat_dicts¿  sî  € ð
 ˆà-NØ/Rñ%
Ð!ð (ó _	@ˆIØˆEØ—]‘] 8Ó,ˆFØ—=‘= Ó(ˆDØ—M‘M 'Ó*ˆEØ —}‘} ZÓ0ˆHØ!Ÿ™ k´?ÓCˆIÙÜ Ð!JÓKÐKØˆ|Ü Ð!HÓIÐIØÐ2Ñ2Ø2°6Ñ:�ØŸ™›
�ØÜ×.Ñ.Ü×0Ñ0ðñ ð !'¬Ð0‘à &¬˜}�Ü˜$¤Ô$Ø‘ä)¨$¸\ÔJ�Ù˜H¨Ò,Ü)¨(ÀÔN‘à�Ø˜VÑ#Ø!#��v‘Øð ñ ð  6¨&¡>Ñ1Ø/1�F˜6‘N 8Ñ,Ø27��v‘˜xÑ(¨Ó/ØÜ×-Ñ-Ü×/Ñ/ðñ ð  6¨&¡>Ñ1Ü/2«u�F˜6‘N 8Ñ,Ø�v‘˜xÑ(×,Ñ,¨UÖ3ØÜ×4Ñ4Ü×6Ñ6Ü×0Ñ0Ü×.Ñ.Ü×2Ñ2Ü×4Ñ4ðñ ð ,1��v‘˜xÓ(ØÐ+Ò+Ø¤Ò/Ø0;¸UÐ/C�F˜6‘N 8Ó,à=BÐQZÑ/[�F˜6‘N 8Ó,Ø˜>Ò)Ø!Ÿ™ f¬oÓ>�Ø$Ÿ=™=¨´_ÓE�à,7¸Ð+?��v‘˜xÑ(à Ð'Ø Ð*Ø  )Ð,ð)ò DÑ$�D˜*ð
 "¤_Ó4Ø9C˜˜v™ xÑ0°Ò6ñDð œ>×=Ñ=Ò=Ø,3°UÐ+;��v‘˜xÒ(ØÜ×6Ñ6Ü×5Ñ5Ü×6Ñ6Ü×3Ñ3ð	ñ ð '¨fÑ4Ø24�FÐ.Ñ/Ø 6Ð*=Ñ#>Ñ>Ø<>�FÐ.Ñ/°Ñ9ØÐ*Ñ+¨HÑ5×<Ñ<ÜÜ:¸6ÑBØ&/§m¡m°OÓ&DØ$-§M¡M°-Ó$@Ø&/§m¡m°OÓ&DØ$-§M¡M°-Ó$@Ø#,§=¡=°Ó#9Ø#,§=¡=°Ó#=ôô
ó Ø7?��v‘˜xÑ(¨Ó4ð_	@ðB ˆr5   Úreturnc                 ój   — | j                  dd¬«      D �cg c]  }|j                  «       ‘Œ c}S c c}w )aÄ  
        Returns a flat list of actions that is easily machine readable.

        For example:
            {'iterable_item_added': {'root[3]': 5, 'root[2]': 3}}

        Becomes:
            [
                {'path': [3], 'value': 5, 'action': 'iterable_item_added'},
                {'path': [2], 'value': 3, 'action': 'iterable_item_added'},
            ]

        
        **Parameters**

        include_action_in_path : Boolean, default=False
            When False, we translate DeepDiff's paths like root[3].attribute1 into a [3, 'attribute1'].
            When True, we include the action to retrieve the item in the path: [(3, 'GET'), ('attribute1', 'GETATTR')]
            Note that the "action" here is the different than the action reported by to_flat_dicts. The action here is just about the "path" output.

        report_type_changes : Boolean, default=True
            If False, we don't report the type change. Instead we report the value change.

        Example:
            t1 = {"a": None}
            t2 = {"a": 1}

            dump = Delta(DeepDiff(t1, t2)).dumps()
            delta = Delta(dump)
            assert t2 == delta + t1

            flat_result = delta.to_flat_dicts()
            flat_expected = [{'path': ['a'], 'action': 'type_changes', 'value': 1, 'new_type': int, 'old_type': type(None)}]
            assert flat_expected == flat_result

            flat_result2 = delta.to_flat_dicts(report_type_changes=False)
            flat_expected2 = [{'path': ['a'], 'action': 'values_changed', 'value': 1}]

        **List of actions**

        Here are the list of actions that the flat dictionary can return.
            iterable_item_added
            iterable_item_removed
            iterable_item_moved
            values_changed
            type_changes
            set_item_added
            set_item_removed
            dictionary_item_added
            dictionary_item_removed
            attribute_added
            attribute_removed
        FT)Úinclude_action_in_pathrˆ  )Úto_flat_rowsr�  )rt   rŸ  rˆ  r¼   s       r6   Úto_flat_dictszDelta.to_flat_dicts,  s9   € ðn "&×!2Ñ!2È%ÐeiÐ!2Ó!jö
ØˆA�I‰I�Kò
ð 	
ùò 
s   –0c                 óH  — g }|rt        t        d¬«      }nt        }|rddddddd|fg}n | j                  st        d	«      ‚ddddd|fg}d
ddœ}| j                  j                  «       D �]4  \  }}|dk(  r"|j                  | j                  |¬«      «       Œ.|j                  d«      rŒ@||v r¯||   }	|j                  «       D ]–  \  }
} ||
«      }
|j                  «       D ]v  \  }}|
j                  «       }|r|j                  |df«       n|j                  |«       |rt        |||	t        |«      ¬«      }nt        |||	¬«      }|j                  |«       Œx Œ˜ Œó|dv rc|j                  «       D ]N  \  }
} ||
«      }
|D ]<  }|rt        |
||t        |«      ¬«      }nt        |
||¬«      }|j                  |«       Œ> ŒP �ŒZ|dk(  �r|j                  «       D ]ý  \  }
} ||
«      }
t        |t        «      r9t        |«      dk(  r+t!        t#        |«      «      }|
j                  |«       ||   }nmt        |t$        t&        f«      r't        |«      dk(  r|d   }|
j                  d«       d}n0t        |t(        «      r t        |«      dk(  r|j+                  «       }d}|rt        |
||t        |«      ¬«      }nt        |
||¬«      }|j                  |«       Œÿ �Œr|dv r\|j                  «       D ]G  \  }
} ||
«      }
|rt        |
||t        |«      ¬«      }nt        |
||¬«      }|j                  |«       ŒI �ŒÒ|dk(  r2|sd}| j-                  |||||¬«      D ]  }|j                  |«       Œ �Œ	| j-                  |||||¬«      D ]  }|j                  |«       Œ �Œ7 |S )zO
        Just like to_flat_dicts but returns FlatDeltaRow Named Tuples
        T)Úinclude_actions)rÃ   rÃ   N)rÕ   rÃ   N)r  r  N)rÈ   rô   N)rÇ   rÇ   Nrá   zÏWhen converting to flat dictionaries, if report_type_changes=False and there are type changes, you must set the always_include_values=True at the delta object creation. Otherwise there is nothing to include.r“  r”  )rV  rW  rQ   )r„  rc  r%   )rW   rÃ   r·   rô   )rW   rÃ   r·   >   r?  rG  ré   rò   r   rß   r?  >   rí   r=  rß   r  r:  r  r  )r·   rr  r„  r‡  rˆ  )r   r(   rJ   rk   r<   rS   r/  r…  Ú
startswithro   rT   r   rô   rf   r�  r°   r\  r_  r®   r²   ra   rL  rŒ  )rt   rŸ  rˆ  rV   r„  r‡  rš  r·   rr  Ú
new_actionrW   Úindex_to_valuer'  rÃ   Úpath2rŠ  rY  r‹  s                     r6   r   zDelta.to_flat_rowsf  sñ  € ð ˆÙ!Ü!¤*¸dÔC‰Kä$ˆKÙà(Ø,Ø0Ø*Ø.Ø˜Z¨Ð5ð‰Nð ×-Ò-Ü ðGóð ð
 )Ø,Ø0Ø˜Z¨Ð5ð	ˆNð 0OØ1Rñ%
Ð!ð !ŸI™IŸO™OÓ-ó P	'‰LˆF�DØÐ,Ò,Ø—‘˜d×<Ñ<ÈÐ<ÓUÔVØØ× Ñ  Ô%ØØÐ2Ñ2Ø6°vÑ>�
Ø,0¯J©J«Lò +Ñ(�D˜.Ù& tÓ,�DØ(6×(<Ñ(<Ó(>ò 
+™˜˜uØ $§	¡	£˜Ù1Ø!ŸL™L¨%°¨Õ8à!ŸL™L¨Ô/Ù.Ü".°EÀÈzÔ`dÐejÓ`kÔ"l™Cä".°EÀÈzÔ"Z˜CØŸ™ cÕ*ñ
+ñ+ð ÐAÑAØ$(§J¡J£Lò +‘L�D˜&Ù& tÓ,�DØ!'ò +˜Ù.Ü".°DÀÈfÔ[_Ð`eÓ[fÔ"g™Cä".°DÀÈfÔ"U˜CØŸ™ cÕ*ñ+ò+ð Ð2Ó2Ø#'§:¡:£<ò '‘K�D˜%Ù& tÓ,�DÜ! %¬Ô.´3°u³:À²?Ü"&¤t¨E£{Ó"3˜ØŸ™ GÔ,Ø % g¡™Ü# E¬D´%¨=Ô9¼cÀ%»jÈAºoØ % a¡˜ØŸ™ AœØ!6™Ü# E¬3Ô/´C¸³JÀ!²OØ %§	¡	£˜Ø!1˜Ù*Ü*°¸EÈ&ÔW[Ð\aÓWbÔc™ä*°¸EÈ&ÔQ˜Ø—M‘M #Õ&ò#'ð$ ð ñ ð $(§:¡:£<ò '‘K�D˜%Ù& tÓ,�DÙ*Ü*°¸EÈ&ÔW[Ð\aÓWbÔc™ä*°¸EÈ&ÔQ˜Ø—M‘M #Õ&ò'ð ˜>Ò)Ù*Ø-�Fà×-Ñ-Ø!ØØ +Ø#1Ø(;ð .ó ò '�Cð —M‘M #Õ&ò'ð  ×-Ñ-Ø!ØØ +Ø#1Ø(;ð .ó ò '�Cð —M‘M #Õ&ò'ðSP	'ðb ˆr5   )rº   )NNNN)NNN)NN)TF)FT)T)Gr0   r1   r2   Údocr3   r   r   r   r   r   r   rŸ   Úbytesr	   r   r�  r   r   r   r   r[  r   r
   rx   r}   rs   r’   Ú__radd__r•   rš   r¥   r½   rÄ   rÑ   rÖ   rÚ   rÝ   rŠ   rŒ   rŽ   Ústaticmethodrð   rû   rä   r„   r‡   r�   rƒ   rÿ   r  r  r  rˆ   r‰   r�   r�   r…   r†   rD  rT  r‹   r”   r~  r{  r‚  r…  rŒ  rp   rn   r¡  r   r4   r5   r6   r;   r;   B   sÔ  „ à€Gð :>Ø"&Ø!%Ø#'Ø-1Ø59Ø*ØØØ Ø+/Ø(Ø(,Ø!Ø$)Ø7;ØØñ'aà�H˜g s¨E°4Ð7Ñ8ðað ˜S‘Mðað ˜R‘Lð	að
 ˜T‘Nðað !  d¡Ñ,ðað !  lÑ!3Ñ4ðað ðað ðað ðað ðað !  S¡Ñ*ðað ðað " $™ðað ðað   $ð!að" )1°©ð#að$ ð%að& ó'aòFJò5òð< €Hòó"ò\ð ØØØó5!ón_ò6ò(Dó:_òPò$:ò$Cò
1ð
 ñ(ó ð(ð ñ ó ð óFNò4<ò
Oò
{òWòaóB"UòH&QòP
ò')ò^
9ò;ò
5ò
@ò
Eò
|ò"ò(CTòJ>ò@%ò*òòð2 ò&ó ð&ð  ð6¨¨\Ñ(:ò 6ó ð6ð ñjó ðjñX8
ÐW[Ð\hÑWió 8
ñttÐVZÐ[gÑVhô tr5   r;   Ú__main__)Nro   ÚloggingÚtypingr   r   r   r   r   r   r	   r
   Ú	functoolsr   r   Úcollections.abcr   r   Údeepdiffr   Údeepdiff.serializationr   r   Údeepdiff.helperr   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   Údeepdiff.pathr"   r#   r$   r%   r&   r'   r(   r)   Údeepdiff.anysetr*   Údeepdiff.summarizer+   Ú	getLoggerr0   rd   r    rÁ   r  r¡   rM  r�   rl   rq   r©   rÂ   rÙ   r¨   r´   r^  r,   r  r¨  rk   r.   r9   r;   ÚdoctestÚtestmodr4   r5   r6   ú<module>rº     s!  ðÛ Û ß F× FÓ Fß )Ý #Ý Ý ß ;÷÷ ÷ ÷ ó ÷÷ ó õ #Ý (à	ˆ×	Ñ	˜8Ó	$€ð NÐ Ø[Ð ØVÐ ðaÐ à'nÐ $ðð "ð {Ð Ø qÐ Ø'mÐ $Ø.hÐ +Ø1kÐ .Ø;Ð Ø7Ð ð 'MÐ #Ø€Ø6Ð áˆkÓ€ô	�ô 	ô	 jô 	÷Xñ Xðv$ ˆzÒÛØ€G‡O�OÕð r5   