Ë
    èlÖi1u ã            	       ób  — 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 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 d dlmZmZmZ d dlmZ d dl m!Z! d d	l"m#Z# d d
l$m%Z% d dl&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZN d dlOmPZP d dlQmRZRmSZS d dlTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZb d dlcmdZdmeZe d dlfmgZg d dlhmiZimjZj d dlkmlZl erd dlmmnZn  ejÞ                  ep«      ZqdZrdZs e-d ge,¬«      Zt e6d«      ZudZvdeewef   deewgdf   dexddfd„ZydZzd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‡ eˆd,g«      Z‰d-ZŠd.Z‹d/ZŒ G d0„ d1e«      Z� G d2„ d3eVePeRe�eg«      ZŽepd4k(  rd dl�Z� e��j                   «        yy)5é    N)ÚEnum)Údeepcopy)Úisclose)ÚListÚDictÚCallableÚUnionÚAnyÚPatternÚTupleÚOptionalÚSetÚ	FrozenSetÚTYPE_CHECKINGÚProtocolÚLiteral)ÚMappingÚIterableÚSequence)Údefaultdict)Ú
getmembers)Úzip_longest)Ú	lru_cache)(ÚstringsÚ
bytes_typeÚnumbersÚuuidsÚListItemRemovedOrAddedÚ
notpresentÚIndexedHashÚunprocessedÚadd_to_frozen_setÚbasic_typesÚ(convert_item_or_items_into_set_else_noneÚget_typeÚ5convert_item_or_items_into_compiled_regexes_else_noneÚtype_is_subclass_of_type_groupÚtype_in_type_groupÚget_docÚnumber_to_stringÚdatetime_normalizeÚKEY_TO_VAL_STRÚbooleansÚ
np_ndarrayÚnp_floatingÚget_numpy_ndarray_rowsÚRepeatedTimerÚ	TEXT_VIEWÚ	TREE_VIEWÚ
DELTA_VIEWÚCOLORED_VIEWÚCOLORED_COMPACT_VIEWÚdetailed__dict__Úadd_root_to_pathsÚnpÚget_truncate_datetimeÚdict_ÚCannotCompareÚENUM_INCLUDE_KEYSÚPydanticBaseModelÚOpcodeÚ
SetOrderedÚipranges)ÚSerializationMixin)ÚDistanceMixinÚlogarithmic_similarity)Ú	RemapDictÚ
ResultDictÚ
TextResultÚ
TreeResultÚ	DiffLevelÚDictRelationshipÚAttributeRelationshipÚREPORT_KEYSÚ!SubscriptableIterableRelationshipÚ$NonSubscriptableIterableRelationshipÚSetRelationshipÚNumpyArrayRelationshipÚCUSTOM_FIELDÚFORCE_DEFAULT)ÚDeepHashÚcombine_hashes_lists)ÚBase)ÚLFUCacheÚDummyLFU)ÚColoredView)Ú
BaseTzInfoz‡DeepDiff has reached the max number of passes of {}. You can possibly get more accurate results by increasing the max_passes parameter.z…DeepDiff has reached the max number of diffs of {}. You can possibly get more accurate results by increasing the max_diffs parameter.©ÚindexesÚitemzdiff_doc.rstz3DeepDiff {} seconds in progress. Pass #{}, Diff #{}Ú_statsÚprogress_loggerÚdurationÚreturnc                 óZ   —  |t         j                  || t           | t           «      «       y)z0
    Report the progress every few seconds.
    N)ÚPROGRESS_MSGÚformatÚPASSES_COUNTÚ
DIFF_COUNT)r]   r^   r_   s      úR/var/www/html/strategist-ai/venv_dbt/lib/python3.12/site-packages/deepdiff/diff.pyÚ_report_progressrg   F   s%   € ñ ”L×'Ñ'¨°&¼Ñ2FÈÌzÑHZÓ[Õ\ó    zDISTANCE CACHE HIT COUNTz
DIFF COUNTzPASSES COUNTzMAX PASS LIMIT REACHEDzMAX DIFF LIMIT REACHEDzDISTANCE CACHE ENABLEDzPREVIOUS DIFF COUNTz!PREVIOUS DISTANCE CACHE HIT COUNTzWUnable to import numpy. This must be a bug in DeepDiff since a numpy array is detected.ziview parameter must be one of 'text', 'tree', 'delta', 'colored' or 'colored_compact'. But {} was passed.z=cutoff_distance_for_pairs needs to be a positive float max 1.z#verbose_level should be 0, 1, or 2.z'cache_purge_level should be 0, 1, or 2.Ú_ENABLE_CACHE_EVERY_X_DIFFÚmodel_fields_setg333333Ó?gffffffæ?)Úexclude_typesÚexclude_pathsÚinclude_pathsÚexclude_regex_pathsÚhasherÚsignificant_digitsÚnumber_format_notationÚignore_string_type_changesÚignore_numeric_type_changesÚignore_uuid_typesÚuse_enum_valueÚignore_type_in_groupsÚignore_type_subclassesÚignore_string_caseÚexclude_obj_callbackÚignore_private_variablesÚ	encodingsÚignore_encoding_errorsÚdefault_timezoneÚcustom_operatorsc                   óZ   — e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   ee   ed<   y)	ÚDeepDiffProtocolÚt1Út2Úcutoff_distance_for_pairsÚuse_log_scaleÚlog_scale_similarity_thresholdÚviewÚmath_epsilonN)	Ú__name__Ú
__module__Ú__qualname__r
   Ú__annotations__ÚfloatÚboolÚstrr   © rh   rf   r€   r€   ~   s-   … ØƒGØƒGØ$Ó$ØÓØ$)Ó)Ø
ƒIØ˜5‘/Ô!rh   r€   c            t       óÔ  ‡ — e Zd ZeZdZdddddeeej                  j                  ddddddddddddddddddddddddddddddddd	dej                  ddd
ddddedddf6dededee   dedededeee      dededeej                  df   deee      dee   dee   deeee   ee   ee   df   deeee   ee   eee      df   deee      dedeeeeef   df   deeedf   dee   d eeeef      d!ed"ed#ed$ed%ee   d&ed'ed(ed)eeeed*f         d+ed,ed-ee   d.ee   d/eeee   df   d0ee   d1ed2ed3ed4ee   d5ee   d6ed7ed8   d9ee   d:eegdf   d;ed<ee   d=ed>ee   d?ed@edAedBedCedDeeeef      dEeeeef      fpˆ fdF„ZdG„ Zd†dH„Z d†dI„Z!e"dJedKeeef   fdL„«       Z# e$«       dfdMedNee   dOee   dKdfdP„Z% e$«       dddfdMedNee   dQedOee   dRedKdfdS„Z&dMedKefdT„Z'dMedUedKefdV„Z(dWedMedKeeef   fdX„Z) e$g «      dddddfdMedNee   dYedZed[ee   d\ee   dOee   dKdfd]„Z*d†dMedOee   dKdfd^„Z+e"dededKefd_„«       Z, e$«       ddfdMedNee   dee   dOee   dKdf
d`„Z-	 	 d‡dKeeeeef   eeef   f      fda„Z.	 	 d‡dKeeeeef   eeef   f      fdb„Z/ e$«       ddfdc„Z0dde1e   dKefde„Z2 e$«       ddddddfdf„Z3 e$«       ddfdg„Z4d†dh„Z5d†di„Z6dj„ Z7dk„ Z8e" e9dl¬m«      dn„ «       «       Z:	 d†do„Z;dp„ Z<dˆdq„Z=d†dr„Z>d‰ds„Z?d†dt„Z@d†du„ZAd†dv„ZBd†dw„ZC e$«       dfdx„ZDd†dy„ZEdz„ ZFd{„ ZGd|„ ZHd}„ ZI e$«       ddfd~„ZJd„ ZKe"d€„ «       ZLd�„ ZMd‚„ ZNeOdƒ„ «       ZPeOd„„ «       ZQˆ fd…„ZRˆ xZSS )ŠÚDeepDiffg      Ð?Né   r   FTgš™™™™™¹?i€–˜ Úfg…ëQ¸Õ?r�   r‚   Ú_original_typeÚcache_purge_levelÚ
cache_sizeÚcache_tuning_sample_sizer~   rƒ   Úcutoff_intersection_for_pairsr}   rY   r{   ry   Úexclude_obj_callback_strictrl   rn   rk   Úget_deep_distanceÚgroup_byÚgroup_by_sort_keyro   Úhashesr|   Úignore_nan_inequalityrs   Úignore_orderÚignore_order_funcrz   rx   rr   rv   .rw   rt   Úinclude_obj_callbackÚinclude_obj_callback_strictrm   Úiterable_compare_funcÚlog_frequency_in_secr…   Úlog_stacktracer‡   Ú	max_diffsÚ
max_passesrq   )r“   ÚeÚnumber_to_string_funcr^   Úreport_repetitionrp   Úthreshold_to_diff_deeperÚtruncate_datetimeru   r„   Úverbose_levelr†   Úzip_ordered_iterablesÚ_parametersÚ_shared_parametersc9                 óf  •‡— t         ‰B| �  «        |9r+t        ddj                  |9j	                  «       «      z  «      ‚|7r| j
                  j                  |7«       �n*|xs g | _        || _        || _	        |xs g }t        |k(  st        |v rd}|| _        t        |k(  st        |v rd}t        d   t        f}:|:|k(  s|:|v rd} | | _        |2| _        |&| _        |3| _        |
| _        |'| _        |0| _        || _        | j/                  ||||| ¬«      | _        |.| _        t5        t7        |«      «      | _        t5        t7        |#«      «      | _        t=        |«      | _        |rtA        |«      nd | _!        |rtE        |«      nd | _#        || _$        |rtJ        ntL        | _'        || _(        || _)        || _*        |!| _+        |"| _,        |,xs tZ        | _-        |$| _.        |6| _/        || _0        || _1        || _2        || _3        || _4        tk        ‰«      r‰| _6        n‰rˆfd„};|;| _6        nd | _6        || _7        || _8        | js                  |/|«      | _:        |(| _;        | jv                  �!| j                  rtx        j{                  d«       t}        |1«      | _?        |+| _@        |4dv r|4| _A        nt        t„        «      ‚|dvrt        t†        «      ‚|5| _D        |*| _E        |)| _F        t�        |«      | _H        t�        |	«      | _I        | j�                  dk  s| j�                  d	kD  rt        t”        «      ‚|-| _K        || _L        | j
                  j›                  «       }7d |7d
<   |'rtx        jœ                  | _O        ntx        j                   | _O        |8r-d| _Q        |8| _R        | j
                  j                  |8«       d }<�nd| _Q        |rt§        |«      n	t©        «       | _U        t¬        dt®        dt°        dt²        dt´        dt¶        dt¸        dtº        t½        |«      i| __        |€
tÁ        «       n|| _a        tÁ        «       | _b        tA        «       | _c        d| jÂ                  d| j¾                  d| jª                  d| jÆ                  d| jÄ                  tÈ        | jf                  dz  i| _R        |%rtË        |%tÌ        | j¾                  |-«      }<nd }<|7| _g        | jÑ                  «       | _i        tÕ        «       | _k        i | _l        |r8| j¢                  r,	 |}=| jÛ                  ||d¬«      }	 | jÛ                  ||d¬«      }|| _o        || _p        	 tã        ||| j‚                  ¬«      }>| jå                  |>tç        té        |«      h«      |¬«       |r+|5tê        tì        hv r| jï                  «       | jÖ                  d<   | jÖ                  jñ                  «        | jó                  | jˆ                  «      }?tõ        |?tö        «      r#| j                  |?jÖ                  «       |?| _|        n| j                  |?«       | j¢                  r£|r| `U| `a| `R| `gt²        t´        tº        fD ]  }@| j¾                  |@= Œ |<rR|<jû                  «       }A|A| j¾                  d<   tx        jý                  djÿ                  | �j                  «       «      «       |dk(  r| j
                  �j                  «        y y y # tÜ        t        f$ r |=}Y �Œ¸w xY w# tÜ        t        f$ r Y �ŒÎw xY w# | j¢                  r£|r| `U| `a| `R| `gt²        t´        tº        fD ]  }@| j¾                  |@= Œ |<rR|<jû                  «       }A|A| j¾                  d<   tx        jý                  djÿ                  | �j                  «       «      «       |dk(  r| j
                  �j                  «        w w w xY w)NaÏ  The following parameter(s) are not valid: %s
The valid parameters are ignore_order, report_repetition, significant_digits, number_format_notation, exclude_paths, include_paths, exclude_types, exclude_regex_paths, ignore_type_in_groups, ignore_string_type_changes, ignore_numeric_type_changes, ignore_type_subclasses, ignore_uuid_types, truncate_datetime, ignore_private_variables, ignore_nan_inequality, number_to_string_func, verbose_level, view, hasher, hashes, max_passes, max_diffs, zip_ordered_iterables, cutoff_distance_for_pairs, cutoff_intersection_for_pairs, log_frequency_in_sec, cache_size, cache_tuning_sample_size, get_deep_distance, group_by, group_by_sort_key, cache_purge_level, log_stacktrace,math_epsilon, iterable_compare_func, use_enum_value, _original_type, threshold_to_diff_deeper, default_timezone ignore_order_func, custom_operators, encodings, ignore_encoding_errors, use_log_scale, log_scale_similarity_threshold _parameters and _shared_parameters.z, Tr   )rv   rr   rs   rw   rt   c                 ó   •— | ‰   S ©Nr�   )Úxrœ   s    €rf   Ú_group_by_sort_keyz-DeepDiff.__init__.<locals>._group_by_sort_key  s   ø€ ØÐ.Ñ/Ð/rh   z§math_epsilon in conjunction with ignore_order=True is only used for flat object comparisons. Custom math_epsilon will not have an effect when comparing nested objects.>   r   r’   é   r’   r›   Fr�   r]   Ú_distance_cacheÚgroup_by_keysÚ_numpy_pathsé
   r�   )Ú	item_namer‚   )r­   )Úparents_idsr”   Údeep_distancezDURATION SECzstats {}r¶   )‚ÚsuperÚ__init__Ú
ValueErrorÚjoinÚkeysÚ__dict__Úupdater~   rŸ   r    r   rs   r   r   rŽ   rt   ru   r…   r„   r}   r¥   r«   rr   Úget_ignore_types_in_groupsrv   rª   r8   r$   rl   rm   r&   rn   Úsetrk   ÚtupleÚexclude_types_tuplerw   r(   r'   Útype_check_funcrx   ry   r™   r¡   r¢   r*   r£   r®   rz   rž   ro   r—   r›   Úcallablerœ   r{   r|   Úget_significant_digitsrp   r‡   ÚloggerÚwarningr:   r¬   rq   r­   ÚVERBOSE_LEVEL_RANGE_MSGÚPURGE_LEVEL_RANGE_MSGr†   r§   r¦   rŒ   rƒ   r˜   ÚCUTOFF_RANGE_ERROR_MSGr^   r–   ÚcopyÚ	exceptionÚlog_errÚerrorÚis_rootr°   rV   rW   r·   rd   re   ÚDISTANCE_CACHE_HIT_COUNTÚPREVIOUS_DIFF_COUNTÚ!PREVIOUS_DISTANCE_CACHE_HIT_COUNTÚMAX_PASS_LIMIT_REACHEDÚMAX_DIFF_LIMIT_REACHEDÚDISTANCE_CACHE_ENABLEDr�   r]   r;   r�   r¹   r¸   ri   r1   rg   r¯   Ú_get_deephash_paramsÚdeephash_parametersrH   ÚtreeÚ_iterable_opcodesÚ_group_iterable_to_dictÚKeyErrorr�   r‚   rI   Ú_diffÚ	frozensetÚidr2   r3   Ú_get_rough_distanceÚremove_empty_keysÚ_get_view_resultsÚ
isinstancerX   Ú_colored_viewÚstopÚinforc   Ú	get_statsÚclear)CÚselfr�   r‚   r”   r•   r–   r—   r~   rƒ   r˜   r}   r{   ry   r™   rl   rn   rk   rš   r›   rœ   ro   r�   r|   rž   rs   rŸ   r    rz   rx   rr   rv   rw   rt   r¡   r¢   rm   r£   r¤   r…   r¥   r‡   r¦   r§   rq   r©   r^   rª   rp   r«   r¬   ru   r„   r­   r†   r®   r¯   r°   ÚkwargsÚuuid_str_grouprµ   Úprogress_timerÚoriginal_t1ÚrootÚview_resultsÚkeyr_   Ú	__class__sC                      `                                              €rf   r¿   zDeepDiff.__init__Ž   sY  ù€ ôt 	‰ÑÔÙÜð
6ð :>¿¹À6Ç;Á;Ã=Ó9QñRó Sð Sñ Ø�M‰M× Ñ  Ö-à$4Ò$:¸ˆDÔ!Ø ,ˆDÔà%6ˆDÔ"à$9Ò$?¸RÐ!ÜÐ/Ò/´7Ð>SÑ3SØ.2Ð+Ø/JˆDÔ,ÜÐ/Ò/´7Ð>SÑ3SØ-1Ð*ä# A™h¬˜_ˆNØÐ!6Ò6¸.ÐLaÑ:aØ$(Ð!Ø%6ˆDÔ"Ø"0ˆDÔØ2PˆDÔ/Ø!.ˆDÔØ$4ˆDÔ!Ø"0ˆDÔØ,DˆDÔ)Ø.HˆDÔ+Ø)-×)HÑ)HØ&;Ø+EØ,GØ'=Ø"3ð *Ió *5ˆDÔ&ð &7ˆDÔ"Ü!2Ô3[Ð\iÓ3jÓ!kˆDÔÜ!2Ô3[Ð\iÓ3jÓ!kˆDÔÜ'\Ð]pÓ'qˆDÔ$Ù7D¤ ]Ô!3È$ˆDÔÙ?L¤u¨]Ô';ÐRVˆDÔ$Ø*@ˆDÔ'Ù9OÕ#5ÔUsˆDÔ Ø&8ˆDÔ#Ø(<ˆDÔ%Ø/JˆDÔ,Ø(<ˆDÔ%Ø/JˆDÔ,Ø$9Ò$MÔ=MˆDÔ!Ø)>ˆDÔ&Ø)>ˆDÔ&Ø,DˆDÔ)Ø)>ˆDÔ&Ø ˆDŒKØ,DˆDÔ)Ø$ˆDŒMÜÐ)Ô*Ø):�Õ&Ù"ô0à);�Õ&à)-�Ô&Ø&ˆDŒNØ*@ˆDÔ'à&*×&AÑ&AÐBTÐVqÓ&rˆDÔ#Ø ,ˆDÔØ× Ñ Ð,°×1BÒ1BÜ—‘ð   Iô  JÜ%:Ð;LÓ%MˆDÔ"Ø*@ˆDÔ'Ø 	Ñ)Ø%2�Õ"ä Ô!8Ó9Ð9Ø ¨	Ñ1Ü Ô!6Ó7Ð7ØˆDŒIà(ˆDŒOØ&ˆDŒNÜ-2Ð3LÓ-MˆDÔ*Ü16Ð7TÓ1UˆDÔ.Ø×-Ñ-°Ò1°T×5SÑ5SÐVWÒ5WÜ Ô!7Ó8Ð8ð
 $3ˆDÔ Ø(ˆDŒOØŸ-™-×,Ñ,Ó.ˆKØ&*ˆK˜
Ñ#ÙÜ%×/Ñ/�•ä%Ÿ|™|�”ñ Ø ˆDŒLØ&8ˆDÔ#Ø�M‰M× Ñ Ð!3Ô4à!ŠNð  ˆDŒLá;E¤8¨JÔ#7Ì8Ë:ˆDÔ ä˜aÜ˜AÜ(¨!Ü# QÜ1°1Ü&¨Ü&¨Ü&¬¨ZÓ(8ð	ˆDŒKð &, ^œ%œ'¸ˆDŒKÜ %£ˆDÔÜ!$£ˆDÔà˜$Ÿ+™+Ø˜$Ÿ+™+Ø! 4×#7Ñ#7Ø ×!3Ñ!3Ø × 1Ñ 1Ü*¨D×,IÑ,IÈBÑ,Nð'ˆDÔ#ñ $ä!.Ð/CÔEUÐW[×WbÑWbÐdsÓ!t‘à!%�à&ˆÔØ#'×#<Ñ#<Ó#>ˆÔ Ü“LˆŒ	Ø!#ˆÔÙ˜Ÿšð	%Ø �Ø×1Ñ1°"°hÈ$Ð1ÓO�ð%Ø×5Ñ5°b¸(ÈdÐ5ÓS�Bð ˆŒØˆŒð 	*Ü˜R °4×3EÑ3EÔFˆDð �J‰J�t¬´B°r³F°8Ó)<È^ˆJÔ\á  T¬i¼Ð-CÑ%CØ-1×-EÑ-EÓ-G�—	‘	˜/Ñ*à�I‰I×'Ñ'Ô)Ø×1Ñ1°$·)±)Ó<ˆLÜ˜,¬Ô4Ø—‘˜L×-Ñ-Ô.Ø%1�Õ"à—‘˜LÔ)à�|Š|Ù$ØÐ,Ø˜ØÐ+ØÐ$Ü/Ô1RÜ2ð4ò )�CàŸ™ CÑ(ð)ñ "Ø-×2Ñ2Ó4�HØ2:�D—K‘K Ñ/Ü—K‘K 
× 1Ñ 1°$·.².Ó2BÓ CÔDØ$¨Ò)Ø—M‘M×'Ò'Õ)ð *ð øô1 !¤*Ð-ò %Ø$“Bð%ûô œjÐ)ò Úðûð: �|Š|Ù$ØÐ,Ø˜ØÐ+ØÐ$Ü/Ô1RÜ2ð4ò )�CàŸ™ CÑ(ð)ñ "Ø-×2Ñ2Ó4�HØ2:�D—K‘K Ñ/Ü—K‘K 
× 1Ñ 1°$·.².Ó2BÓ CÔDØ$¨Ò)Ø—M‘M×'Ò'Õ)ð *ð ús2   Ô[) Ô[ Ô<C%[? Û[&Û%[&Û)[<Û;[<Û?B1^0c                 ó�   — t         D �ci c]  }|| j                  |   “Œ }}| j                   |d<   | j                  |d<   |S c c}w )NÚignore_repetitionr©   )ÚDEEPHASH_PARAM_KEYSr¯   rª   r*   )rî   rõ   Úresults      rf   rÜ   zDeepDiff._get_deephash_params”  sU   € Ü8KÖL°�#�t×'Ñ'¨Ñ,Ñ,ÐLˆÐLØ*.×*@Ñ*@Ð&@ˆÐ"Ñ#Ø*.×*?Ñ*?ˆÐ&Ñ'Øˆùò Ms   ‰Ac                 ó~   — | j                  |«      s,||_        |€| j                  n|}||   j                  |«       yy)a  
        Add a detected change to the reference-style result dictionary.
        report_type will be added to level.
        (We'll create the text-style report from there later.)
        :param report_type: A well defined string key describing the type of change.
                            Examples: "set_item_added", "values_changed"
        :param change_level: A DiffLevel object describing the objects in question in their
                       before-change and after-change object structure.

        :local_tree: None
        N)Ú
_skip_thisÚreport_typerÞ   Úadd)rî   rý   Úchange_levelÚ
local_treerÞ   s        rf   Ú_report_resultzDeepDiff._report_resultš  s@   € ð �‰˜|Ô,Ø'2ˆLÔ$Ø *Ð 2�4—9’9¸
ˆDØ�Ñ×!Ñ! ,Õ/ð -rh   c                 ó˜   — | j                  |«      s9||_        ||j                  t        <   | j                  |   j                  |«       yy)aI  
        Add a detected change to the reference-style result dictionary.
        report_type will be added to level.
        (We'll create the text-style report from there later.)
        :param report_type: A well defined string key describing the type of change.
                            Examples: "set_item_added", "values_changed"
        :param parent: A DiffLevel object describing the objects in question in their
                       before-change and after-change object structure.
        :param extra_info: A dict that describe this result
        :rtype: None
        N)rü   rý   Ú
additionalrQ   rÞ   rþ   )rî   rý   ÚlevelÚ
extra_infos       rf   Úcustom_report_resultzDeepDiff.custom_report_result¬  sD   € ð �‰˜uÔ%Ø +ˆEÔØ-7ˆE×Ñœ\Ñ*Ø�I‰I�kÑ"×&Ñ& uÕ-ð &rh   Úobjectr`   c           	      ó�  ‡ — dt         dt         fˆ fd„}g }t        ‰ t        «      r‰ j                  }n‰ j                  j                  }|D ]E  }t        |dd «      }|sŒt        |t        «      r|j                  |«       Œ5|j                  |«       ŒG |D �ci c]$  }t        ‰  ||«      x}«      sŒ|t        ‰ |«      “Œ& c}S c c}w )NÚ	attributer`   c                 ó€   •— | j                  d«      r+| dk7  r&dj                  t        ‰«      j                  | ¬«      S | S )NÚ__Ú__weakref__z_{type}{attribute})Útyper	  )Ú
startswithrc   r  rˆ   )r	  r  s    €rf   Úunmanglez+DeepDiff._dict_from_slots.<locals>.unmangleÀ  sH   ø€ Ø×#Ñ# DÔ)¨i¸=Ò.HØ+×2Ñ2Ü˜f›×.Ñ.Ø'ð 3ó ð ð Ðrh   Ú	__slots__)
rŽ   rè   r  Ú__mro__rö   Úgetattrr   ÚappendÚextendÚhasattr)r  r  Ú	all_slotsÚmroÚtype_in_mroÚslotsÚirõ   s   `       rf   Ú_dict_from_slotszDeepDiff._dict_from_slots¾  s¾   ø€ ð	¤ð 	¬õ 	ð ˆ	ä�fœdÔ#Ø—.‘.‰Cà×"Ñ"×*Ñ*ˆCàò 	,ˆKÜ˜K¨°dÓ;ˆEÚÜ˜e¤WÔ-Ø×$Ñ$ UÕ+à×$Ñ$ UÕ+ð	,ð 2;Öb¨A¼gÀfÑU]Ð^_ÓU`ÐN`ÈcÕ>a�”7˜6 3Ó'Ñ'ÒbÐbùÒbs   ÂCÂ1Cr  r¼   r   c           	      ó    — t        |j                  t        ¬«      }t        |j                  t        ¬«      }| j	                  ||dd|||¬«       y )N)Úinclude_keysT©Úprint_as_attributeÚoverrideÚoverride_t1Úoverride_t2r   )r7   r�   r=   r‚   Ú
_diff_dict)rî   r  r¼   r   r�   r‚   s         rf   Ú
_diff_enumzDeepDiff._diff_enumÙ  sJ   € Ü˜eŸh™hÔ5FÔGˆÜ˜eŸh™hÔ5FÔGˆà�‰ØØØ#ØØØØ!ð 	õ 	
rh   Úis_namedtupleÚis_pydantic_objectc           	      óÒ  — d}d}d}	 |r6|j                   j                  «       }|j                  j                  «       }�nV|rNt        |j                   | j                  t
        ¬«      }t        |j                  | j                  t
        ¬«      }�nt        d„ |D «       «      rCt        |j                   | j                  ¬«      }t        |j                  | j                  ¬«      }n±t        d„ |D «       «      r7| j                  |j                   «      }| j                  |j                  «      }nht        |j                   «      D �	�
ci c]  \  }	}
t        |
«      rŒ|	|
“Œ }}	}
t        |j                  «      D �	�
ci c]  \  }	}
t        |
«      rŒ|	|
“Œ }}	}
|du s|�|€| j                  d||¬	«       y| j                  ||dd|||¬
«       yc c}
}	w c c}
}	w # t        $ r d}Y ŒOw xY w)zDifference of 2 objectsFN)rz   Úignore_keysc              3   ó6   K  — | ]  }d t        |«      v –— Œ y­w)rÃ   N©Údir©Ú.0Úts     rf   ú	<genexpr>z%DeepDiff._diff_obj.<locals>.<genexpr>ó  s   è ø€ Ò9¨a�Z¤3 q£6Ô)Ñ9ùó   ‚)rz   c              3   ó6   K  — | ]  }d t        |«      v –— Œ y­w)r  Nr*  r,  s     rf   r/  z%DeepDiff._diff_obj.<locals>.<genexpr>ö  s   è ø€ Ò:¨q�[¤C¨£FÔ*Ñ:ùr0  Tr!   ©r   r  )r�   Ú_asdictr‚   r7   rz   rj   Úallr  r   rÊ   ÚAttributeErrorr  r#  )rî   r  r¼   r%  r   r&  Úprocessing_errorr�   r‚   ÚkÚvs              rf   Ú	_diff_objzDeepDiff._diff_objç  s³  € à ÐØ'+ˆØ'+ˆð	$ÙØ—X‘X×%Ñ%Ó'�Ø—X‘X×%Ñ%Ó'’Ù#Ü% e§h¡hÈ×IfÑIfô  uEô  F�Ü% e§h¡hÈ×IfÑIfô  uEô  F’ÜÑ9°5Ô9Ô9Ü% e§h¡hÈ×IfÑIfÔg�Ü% e§h¡hÈ×IfÑIfÔg‘ÜÑ:°EÔ:Ô:Ø×*Ñ*¨5¯8©8Ó4�Ø×*Ñ*¨5¯8©8Ó4‘ä'1°%·(±(Ó';×O™t˜q !Ä8ÈAÅ;�a˜‘dÐO�ÑOÜ'1°%·(±(Ó';×O™t˜q !Ä8ÈAÅ;�a˜‘dÐO�ÑOð ˜tÑ# r z°R°ZØ×Ñ ¨uÀÐÔLØà�‰ØØØ#ØØØØ!ð 	õ 	
ùó PùÛOøÜò 	$Ø#Òð	$ús<   ˆD>G ÅGÅGÅG Å:GÆGÆG ÇG ÇG&Ç%G&c                 ój  — |j                  «       }d}| j                  r|| j                  v rd}| j                  r5|dk7  r0|| j                  vr d}| j                  D ]  }||v s||v sŒd} |S  |S | j                  r6t	        | j                  D �cg c]  }|j                  |«      ‘Œ c}«      rd}|S | j                  rDt        |j                  | j                  «      s t        |j                  | j                  «      rd}|S | j                  r<| j                  |j                  |«      s| j                  |j                  |«      rd}|S | j                  r<| j                  |j                  |«      r | j                  |j                  |«      rd}|S | j                  rC|dk7  r>d}| j                  |j                  |«      s| j                  |j                  |«      rd}|S | j                  rA|dk7  r<d}| j                  |j                  |«      r| j                  |j                  |«      rd}|S c c}w )z–
        Check whether this comparison should be skipped because one of the objects to compare meets exclusion criteria.
        :rtype: bool
        FTró   )Úpathrl   rm   rn   ÚanyÚsearchrÈ   rè   r�   r‚   ry   r™   r¡   r¢   )rî   r  Ú
level_pathÚskipÚprefixÚexclude_regex_paths         rf   rü   zDeepDiff._skip_this  s)  € ð
 —Z‘Z“\ˆ
ØˆØ×Ò *°×0BÑ0BÑ"BØˆDØ×Ò *°Ò"6Ø ×!3Ñ!3Ñ3Ø�Ø"×0Ñ0ò �FØ Ñ+¨z¸VÒ/CØ$˜Øð0 ˆð7ð6 ˆð/ ×%Ò%¬#ØQU×QiÑQiÖjÐ;MÐ#×*Ñ*¨:Õ6Òjô+làˆDð* ˆð) ×%Ò%Ü˜EŸH™H d×&>Ñ&>Ô?Ä:ÈeÏhÉhÐX\×XpÑXpÔCqØˆDð$ ˆð# ×&Ò&Ø×*Ñ*¨5¯8©8°ZÔ@ÀD×D]ÑD]Ð^c×^fÑ^fÐhrÔDsØˆDð ˆð ×-Ò-Ø×1Ñ1°%·(±(¸JÔGØ×1Ñ1°%·(±(¸JÔGØˆDð ˆð ×&Ò&¨:¸Ò+?ØˆDØ×)Ñ)¨%¯(©(°JÔ?À4×C\ÑC\Ð]b×]eÑ]eÐgqÔCrØ�ð ˆð ×-Ò-°*ÀÒ2FØˆDØ×0Ñ0°·±¸:ÔFØ×4Ñ4°U·X±X¸zÔJØ�àˆùò- ks   ÂH0rõ   c                 ó�  — | j                   €ydj                  |j                  «       |«      | j                   v ry|j                  «       | j                   v ry| j                   D ]&  }dj                  |j                  «       |«      |v sŒ& y |j                  }|�,|j                  «       | j                   v ry|j                  }|�Œ,y)NFz{}['{}']T)rm   rc   r;  Úup)rî   r  rõ   r@  rC  s        rf   Ú_skip_this_keyzDeepDiff._skip_this_key5  s½   € à×ÑÐ%ØØ×Ñ˜UŸZ™Z›\¨3Ó/°4×3EÑ3EÑEØØ�:‰:‹<˜4×-Ñ-Ñ-àØ×(Ñ(ò 	ˆFØ× Ñ  §¡£¨sÓ3°vÒ=ñ
 ð	ð �X‰XˆØˆnØ�w‰w‹y˜D×.Ñ.Ñ.ØØ—‘ˆBð ‰nð rh   rÂ   c           	      óÜ  — t        «       }|D �]Û  }| j                  r#t        |t        «      r|j	                  d«      }�n;| j                  r0t        |t
        «      r |j                  «       j	                  d«      }nÿ| j                  rt        |t        «      r|j                  }nÖt        |t        «      rÄt        | d«      rF|| j                  v r8| j                  €|}n�| j                  || j                  | j                  ¬«      }nt| j                   rdn|j"                  j$                  }| j                  €|}n(| j                  || j                  | j                  ¬«      }t'        j(                  ||«      }n|}| j*                  r t        |t,        «      r|j/                  «       }||v r9t0        j3                  dj)                  |||   |j5                  «       «      «       �Œ×|||<   �ŒÞ |S )a%  
        Get a dictionary of cleaned value of keys to the keys themselves.
        This is mainly used to transform the keys when the type changes of keys should be ignored.

        TODO: needs also some key conversion for groups of types other than the built-in strings and numbers.
        úutf-8r¸   ©rp   rq   Únumberzv{} and {} in {} become the same key when ignore_numeric_type_changesor ignore_numeric_type_changes are set to be true.)r;   rr   rè   ÚbytesÚdecodeÚ
memoryviewÚtobytesru   r   Úvaluer   r  r¸   rp   r*   rq   rs   rö   rˆ   r,   rc   rx   rŽ   ÚlowerrÌ   rÍ   r;  )rî   rÂ   r  rú   rõ   Ú	clean_keyÚtype_s          rf   Ú_get_clean_to_keys_mappingz#DeepDiff._get_clean_to_keys_mappingO  s³  € ô “ˆØó  	(ˆCØ×.Ò.´:¸cÄ5Ô3IØŸJ™J wÓ/’	Ø×0Ò0´ZÀÄZÔ5PØŸK™K›M×0Ñ0°Ó9‘	Ø×$Ò$¬°C¼Ô)>ØŸI™I‘	Ü˜C¤Ô)ä˜4 Ô1°c¸T×=OÑ=OÑ6OØ×.Ñ.Ð6Ø$'™	à$(×$9Ñ$9¸#ÐRV×RiÑRiØQU×QlÑQlð %:ó %n™	ð )-×(HÒ(H™HÈcÏmÉm×NdÑNd�EØ×.Ñ.Ð6Ø$'™	à$(×$9Ñ$9¸#ÐRV×RiÑRiØQU×QlÑQlð %:ó %n˜	ä .× 5Ñ 5°e¸YÓ G‘Ià�	Ø×&Ò&¬:°iÄÔ+EØ%ŸO™OÓ-�	Ø˜FÑ"Ü—‘ð !UßV\ÑV\Ø$'¨°	Ñ):¸E¿J¹J»LóWJöKð %(��yÓ!ðA 	(ðB ˆrh   r  r   r!  r"  c           	      óv  — |r|}|}	n|j                   }|j                  }	|rd}
d}t        }n
d}
d}t        }| j                  r�t        |D �cg c]9  }t        |t        «      r|j                  d«      rŒ%| j                  ||«      rŒ8|‘Œ; c}«      }t        |	D �cg c]9  }t        |t        «      r|j                  d«      rŒ%| j                  ||«      rŒ8|‘Œ; c}«      }nXt        |D �cg c]  }| j                  ||«      rŒ|‘Œ c}«      }t        |	D �cg c]  }| j                  ||«      rŒ|‘Œ c}«      }| j                  s| j                  s| j                  rY| j                  ||¬«      }| j                  ||¬«      }t        |j                  «       «      }t        |j                  «       «      }ndx}}||z  }||z
  }||z
  }| j                  r™| j                   rJ||z  D �ch c]!  }|j#                  «       › dt%        |«      › d	�’Œ# }}|| j                   z  }t'        |«      }nt'        ||z  «      }|d
kD  r0t'        |«      |z  | j                  k  r| j)                  d||¬«       y|D ]T  }| j+                  «       t,        u r y|r||   n|}|j/                  t0        |	|   |||¬«      }| j)                  |
||¬«       ŒV |D ]T  }| j+                  «       t,        u r y|r||   n|}|j/                  ||   t0        |||¬«      }| j)                  |||¬«       ŒV |D ]}  }| j+                  «       t,        u r y|r||   n|}|r||   n|}t3        ||   «      }|r||v rŒBt5        ||«      }|j/                  ||   |	|   |||¬«      }| j7                  |||¬«       Œ yc c}w c c}w c c}w c c}w c c}w )zDifference of 2 dictionariesÚattribute_addedÚattribute_removedÚdictionary_item_addedÚdictionary_item_removedr  )rÂ   r  Nú[ú]r’   Úvalues_changedr2  ©Úchild_relationship_classÚchild_relationship_paramÚchild_relationship_param2)r�   r‚   rK   rJ   rz   r@   rè   rŽ   r  rD  rr   rs   rx   rQ  rÂ   r«   rl   r;  ÚreprÚlenr  Ú_count_diffÚStopIterationÚbranch_deeperr   rä   r"   râ   )rî   r  r¼   r  r   r!  r"  r   r�   r‚   Úitem_added_keyÚitem_removed_keyÚ	rel_classrõ   Út1_keysÚt2_keysÚt1_clean_to_keysÚt2_clean_to_keysÚt_keys_intersectÚt_keys_addedÚt_keys_removedÚt_keys_unionÚt_keys_union_lenrÿ   Úkey1Úkey2Úitem_idÚparents_ids_addedÚ
next_levels                                rf   r#  zDeepDiff._diff_dictz  sI  € ñ ð ˆBØ‰Bà—‘ˆBØ—‘ˆBáØ.ˆNØ2ÐÜ-‰Ià4ˆNØ8ÐÜ(ˆIà×(Ò(Ü °ö  "S¨#¼:ÀcÌ3Ô;OÐTW×TbÑTbÐcgÕThÐrv÷  sFñ  sFð  GLð  NQõ  sR¢#ò  "Só  TˆGÜ °ö  "S¨#¼:ÀcÌ3Ô;OÐTW×TbÑTbÐcgÕThÐrv÷  sFñ  sFð  GLð  NQõ  sR¢#ò  "Só  T‰Gä °Ö![¨#¸4×;NÑ;NÈuÐVYÕ;Z¢#Ò![Ó\ˆGÜ °Ö![¨#¸4×;NÑ;NÈuÐVYÕ;Z¢#Ò![Ó\ˆGØ×*Ò*¨d×.NÒ.NÐRV×RiÒRiØ#×>Ñ>ÀGÐSXÐ>ÓYÐØ#×>Ñ>ÀGÐSXÐ>ÓYÐÜ Ð!1×!6Ñ!6Ó!8Ó9ˆGÜ Ð!1×!6Ñ!6Ó!8Ó9‰Gà26Ð6ÐÐ/à" WÑ,ÐØÐ!1Ñ1ˆØ Ð#3Ñ3ˆà×(Ò(Ø×!Ò!ØKRÐU\ÑK\Ö^À3 5§:¡:£< .°´$°s³)°¸AÒ >Ð^�Ð^Ø × 2Ñ 2Ñ2�Ü#& |Ó#4Ñ ä#& w°Ñ'8Ó#9Ð Ø !Ò#¬Ð,<Ó(=Ð@PÑ(PÐSW×SpÑSpÒ(pØ×#Ñ#Ð$4°eÈ
Ð#ÔSØàò 	UˆCØ×ÑÓ!¤]Ñ2Ùá+;Ð" 3Ò'ÀˆCØ ×.Ñ.ÜØ�3‘Ø)2Ø),Ø*-ð /ó ˆLð ×Ñ °ÈÐÕTð	Uð "ò 	WˆCØ×ÑÓ!¤]Ñ2Ùá+;Ð" 3Ò'ÀˆCØ ×.Ñ.Ø�3‘ÜØ)2Ø),Ø*-ð /ó ˆLð ×ÑÐ 0°,È:ÐÕVð	Wð $ò 	MˆCØ×ÑÓ!¤]Ñ2Ùá,<Ð# CÒ(À#ˆDÙ,<Ð# CÒ(À#ˆDÜ˜˜D™“lˆGÙ˜w¨+Ñ5ØÜ 1°+¸wÓ GÐð ×,Ñ,Ø�4‘Ø�4‘Ø)2Ø),Ø*-ð -ó ˆJð �J‰J�zÐ#4ÀˆJÕLñ'	Mùòq "Sùò "Sùâ![ùÚ![ùò  _sB   Á&N"Á3N"ÂN"Â&N'ÃN'ÃN'Ã)N,ÄN,ÄN1Ä-N1Ç'&N6c                 ó„  — | j                  |d«      }| j                  |d«      }t        |j                  «       «      }t        |j                  «       «      }||z
  }||z
  }|D �	cg c]  }	||	   j                  ‘Œ }
}	|D �	cg c]  }	||	   j                  ‘Œ }}	|
D ]J  }| j	                  «       t
        u r y|j                  t        |t        ¬«      }| j                  d||¬«       ŒL |D ]J  }| j	                  «       t
        u r y|j                  |t        t        ¬«      }| j                  d||¬«       ŒL yc c}	w c c}	w )zDifference of setsr�   r‚   N)r[  Úset_item_addedr2  Úset_item_removed)
Ú_create_hashtablerÆ   rÂ   r\   r`  ra  rb  r   rO   r  )rî   r  r   Út1_hashtableÚt2_hashtableÚ	t1_hashesÚ	t2_hashesÚhashes_addedÚhashes_removedr  Úitems_addedÚitems_removedr\   rÿ   s                 rf   Ú	_diff_setzDeepDiff._diff_setå  sU  € à×-Ñ-¨e°TÓ:ˆØ×-Ñ-¨e°TÓ:ˆä˜×)Ñ)Ó+Ó,ˆ	Ü˜×)Ñ)Ó+Ó,ˆ	à  9Ñ,ˆØ" YÑ.ˆà5AÖB°�| A‘×+Ó+ÐBˆÐBØ7EÖF°!˜ a™×-Ó-ÐFˆÐFàò 	WˆDØ×ÑÓ!¤]Ñ2Ùà ×.Ñ.Ü˜D¼?ð /ó LˆLà×ÑÐ 0°,È:ÐÕVð	Wð "ò 	YˆDØ×ÑÓ!¤]Ñ2Ùà ×.Ñ.Ø”j¼?ð /ó LˆLà×ÑÐ 2°LÈZÐÕXñ	Yùò CùÚFs   Á%D8ÂD=c                 óV   — 	 t        | d«      rt        |d«      ryy# t        $ r Y yw xY w)NÚ__getitem__TF)r  r5  )r�   r‚   s     rf   Ú_iterables_subscriptablez!DeepDiff._iterables_subscriptable  s2   € ð	Ü�r˜=Ô)¬g°b¸-Ô.HØàøÜò 	Ùð	ús   ‚ œ	(§(c                 ó¬   — | j                   r| j                  |«      s| j                  r| j                  ||||¬«       y| j                  ||||¬«       y)zDifference of iterables©r”   r   N)r    rŸ   Ú_diff_iterable_with_deephashÚ_diff_iterable_in_order)rî   r  r¼   r”   r   s        rf   Ú_diff_iterablezDeepDiff._diff_iterable  sQ   € à×"Ò" t×'=Ñ'=¸eÔ'DÈ×IZÒIZØ×-Ñ-¨e°[ÐQ_ÐlvÐ-Õwà×(Ñ(¨°ÈNÐgqÐ(Õrrh   c                 óv  — |€Mt        t        |j                  |j                  t        ¬«      «      D ���cg c]  \  }\  }}||f||ff‘Œ c}}}S |j                  || }	|j                  || }
t        t        |	|
t        ¬«      «      D ���cg c]  \  }\  }}||z   ||z   f||ff‘Œ c}}}S c c}}}w c c}}}w )zz
        Default compare if `iterable_compare_func` is not provided.
        This will compare in sequence order.
        )Ú	fillvalue)Ú	enumerater   r�   r‚   r   )rî   r  Út1_from_indexÚt1_to_indexÚt2_from_indexÚt2_to_indexr  r´   ÚyÚt1_chunkÚt2_chunks              rf   Ú_compare_in_orderzDeepDiff._compare_in_order  så   € ð Ð Ü6?ÜØ—H‘H˜eŸh™hÔ2HôJó7K÷ Lð L©¨©F¨Q°�a˜�V˜a ˜VÒ$ô Lð Lð —x‘x ¨kÐ:ˆHØ—x‘x ¨kÐ:ˆHÜV_ÜØ˜hÔ2HôJóWK÷ Lð LÉÈÉFÈQÐPQ�a˜-Ñ'¨¨]Ñ):Ð;¸aÀ¸VÒDô Lð LùôLùôLs   ¶B-ÂB4c                 ó2  — | j                   €| j                  |||||¬«      S 	 g }t        «       }t        «       }t        |j                  «      D ]½  \  }	}
d}t        |j
                  «      D ]€  \  }}||v rŒ| j                  |
||«      sŒt        |f| j                  ddœ| j                  ¤Ž}|j                  |«       |j                  ||   «       |j                  |	|f|
|ff«       d} n |rŒ£|j                  |	df|
t        ff«       Œ¿ t        |j
                  «      D ]K  \  }}t        |f| j                  ddœ| j                  ¤Ž}||   |vsŒ1|j                  d|ft        |ff«       ŒM |S # t        $ r | j                  |||||¬«      cY S w xY w)a#  
        Given a level get matching pairs. This returns list of two tuples in the form:
        [
          (t1 index, t2 index), (t1 item, t2 item)
        ]

        This will compare using the passed in `iterable_compare_func` if available.
        Default it to compare in order
        ©rŒ  r�  rŽ  r�  FT)r�   Ú
apply_hashéÿÿÿÿ)r£   r“  rÆ   r‹  r�   r‚   rS   r�   rÝ   rþ   r  r   r<   )rî   r  rŒ  r�  rŽ  r�  ÚmatchesÚ	y_matchedÚy_index_matchedr  r´   Úx_foundÚjr�  Ú	deep_hashs                  rf   Ú_get_matching_pairszDeepDiff._get_matching_pairs(  sæ  € ð ×%Ñ%Ð-à×)Ñ)ØØ+¸Ø+¸ð *ó ð ð
+	ØˆGÜ›ˆIÜ!›eˆOÜ! %§(¡(Ó+ò K‘��1Ø�Ü% e§h¡hÓ/ò ‘D�A�qà˜OÑ+ð !à×1Ñ1°!°Q¸Õ>Ü$,¨Qð %/Ø48·K±KØ8<ñ%/ð 04×/GÑ/Gñ%/˜	ð
 (×+Ñ+¨AÔ.Ø!Ÿ™ i°¡lÔ3ØŸ™¨¨A¨°°A°Ð'7Ô8Ø"&˜Ùð%ò( Ø—N‘N Q¨ G¨aÔ1GÐ-HÐ#IÕJð/Kô0 " %§(¡(Ó+ò K‘��1ä$ Qð 'Ø,0¯K©KØ04ñ'ð (,×'?Ñ'?ñ'�	ð
 ˜Q‘< yÒ0Ø—N‘N R¨ GÔ.DÀaÐ-HÐ#IÕJðKð ˆNøÜò 	Ø×)Ñ)ØØ+¸Ø+¸ð *ó ò ð	ús&   ¤A&E4 ÂA&E4 Ã2A"E4 ÅE4 Å4FÆFc                 ó   — | j                  |j                  |j                  «      }|rt        }nt        }| j
                  �s6t        |j                  t        «      �rt        |j                  t        «      �r | j                  |j                  «      rå| j                  |j                  «      rÊ| j                  €¾t        «       }| j                  |||||¬«      }t        |«      dkD  r]t        «       }	| j                  |||||	¬«       t        |«      t        |	«      k\  r|	}n#|| j                  |j                  t         ¬«      <   |j#                  «       D ]  \  }
}|sŒ	| j$                  |
xx   |z  cc<   Œ! y | j                  |||||¬«       y )N)r¼   r”   r[  r   r’   )Úforce)rƒ  r�   r‚   rM   rN   r®   rè   r   Ú_all_values_basic_hashabler£   rH   Ú!_diff_ordered_iterable_by_difflibr_  Ú/_diff_by_forming_pairs_and_comparing_one_by_onerß   r;  rR   ÚitemsrÞ   )rî   r  r¼   r”   r   Úsubscriptabler[  Úlocal_tree_passÚopcodes_with_valuesÚlocal_tree_pass2rý   Úlevelss               rf   r‡  z DeepDiff._diff_iterable_in_orderk  sw  € à×5Ñ5°e·h±hÀÇÁÓIˆÙÜ'HÑ$ä'KÐ$ð ×*Ó*Ü˜5Ÿ8™8¤XÕ.Ü˜5Ÿ8™8¤XÕ.Ø×/Ñ/°·±Ô9Ø×/Ñ/°·±Ô9Ø×*Ñ*Ð2ä(›lˆOØ"&×"HÑ"HØØ'Ø-Ø)AØ*ð #Ió #Ðô �?Ó# aÒ'Ü#-£<Ð Ø×DÑDØØ +Ø#1Ø-EØ/ð Eô ô �Ó'¬3Ð/?Ó+@Ò@Ø&6‘OàNa�D×*Ñ*¨5¯:©:¼M¨:Ó+JÑKØ'6×'<Ñ'<Ó'>ò 5Ñ#�˜VÚØ—I‘I˜kÓ*¨fÑ4Ô*ñ5ð ×@Ñ@ØØ'Ø-Ø)AØ%ð Aõ rh   Úiterablec                 ól   — t        |t        j                  «      ry|D ]  }t        |t        «      rŒ y y)z\
        Are all items basic hashable types?
        Or there are custom types too?
        FT)rè   ÚtypesÚGeneratorTyper#   )rî   rª  r\   s      rf   r¡  z#DeepDiff._all_values_basic_hashable�  s8   € ô �h¤× 3Ñ 3Ô4ØØò 	ˆDÜ˜d¤KÕ0Ùð	ð rh   c
                 ó°  — | j                  |||||	¬«      D �]<  \  \  }
}\  }}| j                  «       t        u r y |
}|}|t        u r/|j	                  |t
        |||¬«      }| j                  d||¬«       Œ`|t        u r/|j	                  t
        ||||¬«      }| j                  d||¬«       Œ—|
|k7  rX||k(  s| j                  rG|j	                  |||||¬«      }| j                  d||¬«       | j                  rd|j                  d<   nŒôt        |«      }|r||v r�Œt        ||«      }|j	                  |||||¬«      }| j                  |||¬«       �Œ? y )	Nr•  rZ  Úiterable_item_removedr2  Úiterable_item_addedÚiterable_item_movedTÚmoved)rž  r`  ra  r   rb  r   r  r£   r  rä   r"   râ   )rî   r  r   r¼   r”   r[  rŒ  r�  rŽ  r�  r  rœ  r´   r�  Úreference_param1Úreference_param2rÿ   rq  rr  rs  s                       rf   r£  z8DeepDiff._diff_by_forming_pairs_and_comparing_one_by_one«  s¿  € ð #×6Ñ6ØØ'°[Ø'°[ð 7ó 
ó ?	Q‰N‰FˆQ�‘F�Q˜ð
 ×ÑÓ!¤]Ñ2Ùà ÐØ ÐØÔ*Ñ*Ø$×2Ñ2ØÜØ-EØ-=Ø.>ð  3ó  �ð ×#Ñ#Ð$;¸\ÐV`Ð#ÕaàÔ,Ñ,Ø$×2Ñ2ÜØØ-EØ-=Ø.>ð  3ó  �ð ×#Ñ#Ð$9¸<ÐT^Ð#Õ_ð ˜’F  a¢¨D×,FÒ,Fà#(×#6Ñ#6ØØØ1IØ1AØ2Bð $7ó $�Lð ×'Ñ'Ð(=¸|ÐXbÐ'Ôcà×1Ò1ð 59˜×(Ñ(¨Ò1ð !ä˜Q›%�Ù 7¨kÑ#9ÙÜ$5°kÀ7Ó$KÐ!ð #×0Ñ0ØØØ-EØ-=Ø.>ð 1ó �
ð —
‘
˜:Ð'8ÀZ�
ÖPñ?	Qrh   c                 ó  — t        j                  d |j                  |j                  d¬«      }|j	                  «       }g }|D �]<  \  }	}
}}}|	dk(  r|j                  t        |	|
|||«      «       Œ.|j                  t        |	|
||||j                  |
| |j                  || ¬«      «       |	dk(  r| j                  ||||||
|||¬«	       Œ‰|	dk(  rUt        |j                  |
| «      D ]9  \  }}|j                  |t        |||
z   ||
z   ¬«      }| j                  d	||¬
«       Œ; Œã|	dk(  sŒét        |j                  || «      D ]9  \  }}|j                  t        ||||z   ||z   ¬«      }| j                  d||¬
«       Œ; �Œ? |S )NF)ÚisjunkÚaÚbÚautojunkÚequal)Ú
old_valuesÚ
new_valuesÚreplace)r   r¼   r”   r[  rŒ  r�  rŽ  r�  ÚdeleterZ  r¯  r2  Úinsertr°  )ÚdifflibÚSequenceMatcherr�   r‚   Úget_opcodesr  r?   r£  r‹  rb  r   r  )rî   r  r   r¼   r”   r[  ÚseqÚopcodesr§  ÚtagrŒ  r�  rŽ  r�  Úindexr´   rÿ   r�  s                     rf   r¢  z*DeepDiff._diff_ordered_iterable_by_difflibò  sè  € ô ×%Ñ%¨T°U·X±XÀÇÁÐTYÔZˆà—/‘/Ó#ˆØ Ðð
 LSó )	dÑGˆC� ¨]¸KØ�gŠ~Ø#×*Ñ*¬6Ø˜¨°]ÀKó,ô ð ð  ×&Ñ&¤vØ�] K°ÀØ"ŸX™X m°[ÐAØ"ŸX™X m°[ÐAô(ô ð �iÒØ×DÑDØ j¸kØ#1ÐLdØ"/¸[Ø"/¸[ð	 Eõ ð ˜’Ü )¨%¯(©(°=ÀÐ*MÓ Nò f‘H�E˜1Ø#(×#6Ñ#6ØÜ"Ø1IØ16¸Ñ1FØ27¸-Ñ2Gð $7ó $�Lð ×'Ñ'Ð(?ÀÐZdÐ'Õeñfð ˜“Ü )¨%¯(©(°=ÀÐ*MÓ Nò d‘H�E˜1Ø#(×#6Ñ#6Ü"ØØ1IØ16¸Ñ1FØ27¸-Ñ2Gð $7ó $�Lð ×'Ñ'Ð(=¸|ÐXbÐ'ÕcòdðC)	dðT #Ð"rh   c                 ó¸  — | j                   r>|j                  j                  «       |_        |j                  j                  «       |_        t	        |j                  «      t	        |j                  «      k(  r|j                  |j                  k(  ryd}|j                  }|j                  }t        |j                  t        «      r+	 |j                  j                  «       j                  d«      }n6t        |j                  t        «      r	 |j                  j                  d«      }t        |j                  t        «      r+	 |j                  j                  «       j                  d«      }n6t        |j                  t        «      r	 |j                  j                  d«      }t        |j                  t        «      r|j                  j                  }t        |j                  t        «      r|j                  j                  }||k(  ry|rwd|v st        |t        «      rcd|v r_t        j                  |j!                  «       |j!                  «       d¬«      }t#        |«      }|rdj%                  |«      |j&                  d<   | j)                  d	||¬
«       y# t        $ r d}Y �Œ}w xY w# t        $ r d}Y �Œ�w xY w# t        $ r d}Y �Œ&w xY w# t        $ r d}Y �Œ8w xY w)zCompare stringsNTÚasciiFú
Ú )ÚlinetermÚdiffrY  r2  )rx   r�   rN  r‚   r  rè   rK  rL  rJ  ÚUnicodeDecodeErrorr   r   rM  rŽ   rÀ  Úunified_diffÚ
splitlinesÚlistrÁ   r  r  )rî   r  r   Údo_diffÚt1_strÚt2_strrÌ  s          rf   Ú	_diff_strzDeepDiff._diff_str+  s8  € à×"Ò"Ø—x‘x—~‘~Ó'ˆEŒHØ—x‘x—~‘~Ó'ˆEŒHä�—‘‹>œT %§(¡(›^Ò+°·±¸E¿H¹HÒ0DØð ˆØ—‘ˆØ—‘ˆä�e—h‘h¤
Ô+ð ØŸ™×)Ñ)Ó+×2Ñ2°7Ó;‘ô ˜Ÿ™¤*Ô-ð ØŸ™Ÿ™¨Ó1�ô �e—h‘h¤
Ô+ð ØŸ™×)Ñ)Ó+×2Ñ2°7Ó;‘ô ˜Ÿ™¤*Ô-ð ØŸ™Ÿ™¨Ó1�ô �e—h‘h¤Ô%Ø—X‘X—^‘^ˆFä�e—h‘h¤Ô%Ø—X‘X—^‘^ˆFà�VÒØáØ�v‰~¤¨F´CÔ!8¸TÀV¹^Ü×+Ñ+Ø×%Ñ%Ó'¨×):Ñ):Ó)<ÀrôK�ä˜D“z�ÙØ/3¯y©y¸«�E×$Ñ$ VÑ,à×ÑÐ,¨eÀ
ÐÕKøôI &ò  Ø“ð ûô
 &ò  Ø“ð ûô &ò  Ø“ð ûô
 &ò  Ø“ð úsH   Ã)J Ä
J& Å )J8 ÆK
 ÊJ#Ê"J#Ê&J5Ê4J5Ê8KËKË
KËKc                 ó¢   — 	 |j                   j                   | j                  ||d|¬«       y # t        $ r | j	                  |||¬«       Y y w xY w)NT)r%  r   r2  )r�   r3  r9  r5  rˆ  )rî   r  r¼   r   s       rf   Ú_diff_tuplezDeepDiff._diff_tupleb  sS   € ð	ZØ�H‰H×Òð �N‰N˜5 +¸TÈjˆNÕYøô	 ò 	KØ×Ñ  {¸zÐÖJð	Kús   ‚. ®AÁAc                 ól   — ||v r||   j                   j                  |«       y t        |g|¬«      ||<   y )NrZ   )r[   r  r    )rî   r�   Ú	item_hashr\   r  s        rf   Ú	_add_hashzDeepDiff._add_hashn  s6   € Ø˜ÑØ�9Ñ×%Ñ%×,Ñ,¨QÕ/ä +°Q°C¸dÔ CˆF�9Òrh   c                 óp  — t        ||«      }t        «       }t        |«      D ]�  \  }}	 dj                  |j	                  «       |«      }t        |f| j                  |ddœ| j                  ¤Ž}	 ||   }	|	t        u r#| j                  d|j	                  «       z  «       Œ|| j                  ||	||¬«       Œ’ t        |f| j                  |j	                  «       ddœ| j                  ¤Ž |S # t        $ r Y ŒÒw xY w# t        $ r+}
d|j	                  «       › d|
j                  › �|
_        ‚ d}
~
wt        $ r ‚ w xY w)	z0Create hashtable of {item_hash: (indexes, item)}z{}[{}]T)r�   Úparentr–  zFItem %s was not processed while hashing thus not counting this object.)r�   rØ  r\   r  zCan not produce a hash for z: N)r  r;   r‹  rc   r;  rS   r�   rÝ   r!   rÓ   rÙ  rá   rÍ  ÚreasonÚNotImplementedError)rî   r  r.  ÚobjÚlocal_hashesr  r\   rÛ  r�  rØ  Úerrs              rf   rw  zDeepDiff._create_hashtablet  s\  € ä�e˜QÓˆä“wˆÜ" 3›ò #	a‰IˆQ�ð"aØ!Ÿ™¨¯©«°qÓ9�ô %ØðàŸ;™;Ø!Ø#ñ	ð
 ×.Ñ.ñ�	ð"
aØ )¨$¡�Ið !¤KÑ/ØŸ™ð &Hà',§z¡z£|ñ&4õ 5ð Ÿ™¨lÀiÐVZÐ^_˜Õ`ðG#	aôL 	Øð	
à—;‘;Ø—:‘:“<Øñ		
ð
 ×&Ñ&ò	
ð Ðøô%  ò Ùðûô &ò Ø:¸5¿:¹:»<¸.ÈÈ3Ï:É:È,ÐW�”
ØûÜ&ò Øðús*   ©AC8Á.C)Ã)	C5Ã4C5Ã8	D5Ä&D'Ä'D5iì  )Úmaxsizec                 ó&  — | |kD  r| |fn|| f\  }}t        |t        «      r5t        |«      j                  d«      }t        |«      j                  d«      }n2t        |t        «      r"|j                  d«      }|j                  d«      }|dz   |z   dz   S )NrF  s   --s   dc)rè   ÚintÚhexÚencoderŽ   )Ú
added_hashÚremoved_hashro  rp  s       rf   Ú_get_distance_cache_keyz DeepDiff._get_distance_cache_key¨  s�   € ð 4>ÀÒ3L�j ,Ñ/ÐS_ÐakÐRl‰
ˆˆdÜ�dœCÔ ô �t“9×#Ñ# GÓ,ˆDÜ�t“9×#Ñ# GÓ,‰DÜ˜œcÔ"Ø—;‘;˜wÓ'ˆDØ—;‘;˜wÓ'ˆDØ�e‰|˜dÑ" UÑ*Ð*rh   c           	      óø  — d x}}| j                   t           rV| j                  ||«      }|| j                  v r6| j                   t        xx   dz  cc<   | j                  j                  |«      }|€Št        |j                  |j                  | j                  | j                  t        || j                  ¬«      }|j                  «       }|r0| j                   t           r| j                  j                  ||¬«       |S )Nr’   )r¯   r°   r†   r”   r£   ©rM  )r]   rÛ   rè  r·   rÖ   Úgetr‘   r\   r¯   r°   r4   r£   rå   rÆ   )	rî   ræ  rç  Úadded_hash_objÚremoved_hash_objr”   Ú	_distanceÚ	cache_keyrÌ  s	            rf   Ú"_get_rough_distance_of_hashed_objsz+DeepDiff._get_rough_distance_of_hashed_objs¶  sè   € ð !%Ð$ˆ	�IØ�;‰;Ô-Ò.Ø×4Ñ4°ZÀÓNˆIØ˜D×0Ñ0Ñ0Ø—‘Ô4Ó5¸Ñ:Ó5Ø ×0Ñ0×4Ñ4°YÓ?�	ØÐô Ø ×%Ñ% ~×':Ñ':Ø ×,Ñ,Ø#'×#:Ñ#:ÜØ-Ø&*×&@Ñ&@ôˆDð ×0Ñ0Ó2ˆIÙ˜TŸ[™[Ô)?Ò@Ø×$Ñ$×(Ñ(¨¸)Ð(ÔDØÐrh   c           	      ó¨  — d}| j                   t           rFt        ||gd¬«      }|| j                  v r)| j                  j	                  |«      j                  «       S d„ }t        |«      }	t        «       }
d}|r9|r7t        r1t        |«      dkD  r#t        |«      dkD  r| j                  |||||«      }|r?|r=| j                  r1t        |«      dkD  r#t        |«      dkD  r| j                  |||||«      }|D ]�  }|D ]‰  }||   }||   }t        |j                  «      |v rŒ%d}|r!|j	                  dj                  ||«      «      }|€| j!                  |||||«      }|| j"                  k\  rŒq|	|   }||   j%                  |«       Œ‹ Œ’ t'        «       }t        t(        «      }|	j+                  «       D ]   \  }}|D ]  }||   j%                  |«       Œ Œ" t-        |j/                  «       «      D ]i  }||   }|sŒ|j1                  «       }||vrH|	|   |   }|r>|j1                  «       }||vr'|j%                  |«       |j%                  |«       ||
|<   |rŒ>|rŒ_Œk |
j+                  «       D ��ci c]  \  }}||“Œ
 }}}|
j3                  |«       |r0| j                   t           r| j                  j'                  ||
¬«       |
j                  «       S c c}}w )	aî  
        Get the closest pairs between items that are removed and items that are added.

        returns a dictionary of hashes that are closest to each other.
        The dictionary is going to be symmetrical so any key will be a value too and otherwise.

        Note that due to the current reporting structure in DeepDiff, we don't compare an item that
        was added to an item that is in both t1 and t2.

        For example

        [{1, 2}, {4, 5, 6}]
        [{1, 2}, {1, 2, 3}]

        is only compared between {4, 5, 6} and {1, 2, 3} even though technically {1, 2, 3} is
        just one item different than {1, 2}

        Perhaps in future we can have a report key that is item duplicated and modified instead of just added.
        NÚpairs_cache)r¤  r@  c                  ó    — t        t        «      S r³   )r   r@   r�   rh   rf   Údefaultdict_orderedsetzODeepDiff._get_most_in_common_pairs_in_iterables.<locals>.defaultdict_orderedsetð  s   € ÜœzÓ*Ð*rh   r’   r   z{}--{}rê  )r]   rÛ   rT   r·   rë  rÑ   r   r;   r9   r_  Ú#_precalculate_numpy_arrays_distancer£   Ú-_precalculate_distance_by_custom_compare_funcrä   r\   rc   rð  rƒ   rþ   rÆ   r@   r¤  ÚsortedrÂ   ÚpoprÄ   )rî   r|  r}  rx  ry  r¼   r”   rï  rô  Úmost_in_common_pairsÚpairsÚpre_calced_distancesræ  rç  rì  rí  rî  Úpairs_of_itemÚused_to_hashesÚdistances_to_from_hashesÚ	from_hashÚdistances_to_to_hashesÚdistÚfrom_hashesÚ	to_hashesÚto_hashr7  r8  Úinverse_pairss                                rf   Ú&_get_most_in_common_pairs_in_iterablesz/DeepDiff._get_most_in_common_pairs_in_iterablesÐ  s  € ð* ˆ	Ø�;‰;Ô-Ò.Ü,°LÀ.Ð3QÐZgÔhˆIØ˜D×0Ñ0Ñ0Ø×+Ñ+×/Ñ/°	Ó:×?Ñ?ÓAÐAò	+ä*Ð+AÓBÐÜ“ˆà#ÐÙ™N­r´c¸,Ó6GÈ!Ò6KÔPSÐTbÓPcÐfgÒPgð $(×#KÑ#KØ˜n¨l¸LÈ.ó$ZÐ ñ ™NØ×.Ò.Ü˜Ó%¨Ò)¬c°.Ó.AÀAÒ.EØ#'×#UÑ#UØ˜n¨l¸LÈ.ó$ZÐ ð 'ò 	;ˆJØ .ò ;�Ø!-¨jÑ!9�Ø#/°Ñ#=Ð ô Ð&×+Ñ+Ó,°Ñ;Øà �	Ù'Ø 4× 8Ñ 8¸¿¹ÈÐUaÓ9bÓ c�IØÐ$Ø $× GÑ GØ" L°.ÐBRÐTbó!d�Ið
  × >Ñ >Ò>ØØ 4°ZÑ @�Ø˜iÑ(×,Ñ,¨\Õ:ñ);ð	;ô, ›ˆä#.¬zÓ#:Ð Ø1E×1KÑ1KÓ1Mò 	>Ñ-ˆIÐ-à.ò >�Ø(¨Ñ.×2Ñ2°9Õ=ñ>ð	>ô
 Ð3×8Ñ8Ó:Ó;ò 	7ˆDØ2°4Ñ8ˆKÚØ'ŸO™OÓ-�	Ø NÑ2Ø 4°YÑ ?ÀÑ E�IÙ#Ø"+§-¡-£/˜Ø"¨.Ñ8Ø*×.Ñ.¨yÔ9Ø*×.Ñ.¨wÔ7ð 07˜E )Ñ,ò $ó	 ð	7ð +0¯+©+«-×8¡$ ! Q˜˜A™Ð8ˆÑ8Ø�‰�]Ô#Ù˜Ÿ™Ô%;Ò<Ø× Ñ ×$Ñ$ Y°eÐ$Ô<Ø�z‰z‹|Ðùó	 9s   É+Kc           	      ó   ‡‡‡‡‡ — | j                  |d«      }| j                  |d«      }t        |j                  «       «      }t        |j                  «       «      }||z
  Š||z
  Št        ‰«      t        ‰«      z   t        |«      t        |«      z   dz   z  | j                  kD  rd}	nd}	| j
                  r|Š|Š nR|j                  «       D �
�ci c]  \  }
}|
‰v sŒ|
|“Œ c}}
Š|j                  «       D �
�ci c]  \  }
}|
‰v sŒ|
|“Œ c}}
Š | j                  t           | j                  k  r4|	r2| j                  t        xx   dz  cc<   | j                  ‰‰‰‰ ||«      Šno|	rc| j                  t           sEd| j                  t        <   t        j                  t        j                  | j                  «      «       t!        «       Šn
t!        «       Šdˆˆˆˆˆ fd„	}| j
                  �rè‰D �]  }| j#                  «       t$        u r y ||«      }t'        |j(                  «      }|j(                  t*        u r‰ |   j,                  n|j,                  }t        ‰ |   j,                  «      dk(  r‰ |   j,                  d   }nd}|D ]z  }|j/                  |j(                  ‰ |   j(                  t0        ||¬	«      }|j(                  t*        u r| j3                  d
||¬«       Œ[t5        ||«      }| j7                  |||¬«       Œ| �Œ ‰D �]  }| j#                  «       t$        u r y ||d¬«      }t'        |j(                  «      }|j(                  t*        u st        |j,                  dkD  «      rd}n|j,                  d   }‰|   j,                  D ]z  }|j/                  ‰|   j(                  |j(                  t0        ||¬	«      }|j(                  t*        u r| j3                  d||¬«       Œ[t5        ||«      }| j7                  |||¬«       Œ| �Œ |j9                  |«      }|D ]¯  }‰|   j,                  }‰ |   j,                  }t        |«      }t        |«      }||k7  sŒ=|j/                  ‰|   j(                  ‰ |   j(                  t0        ‰|   j,                  d   ¬«      }t;        ||||¬«      |j<                  d<   | j3                  d||¬«       Œ± y‰D ]ô  }| j#                  «       t$        u r y ||«      }t'        |j(                  «      }|j(                  t*        u r‰ |   j,                  d   n|j,                  d   }‰ |   j,                  d   }|j/                  |j(                  ‰ |   j(                  t0        ||¬	«      }|j(                  t*        u r| j3                  d
||¬«       ŒÕt5        ||«      }| j7                  |||¬«       Œö ‰D ]ö  }| j#                  «       t$        u r y ||d¬«      }t'        |j(                  «      }‰|   j,                  d   }|j(                  t*        u r‰|   j,                  d   n|j,                  d   }|j/                  ‰|   j(                  |j(                  t0        ||¬	«      }|j(                  t*        u r| j3                  d||¬«       Œ×t5        ||«      }| j7                  |||¬«       Œø yc c}}
w c c}}
w )zLDiff of hashable or unhashable iterables. Only used when ignoring the order.r�   r‚   r’   FTc                 óœ   •— |r‰}‰}n‰	}‰}‰j                  | t        «      }|t        u rt        }|S ‰|= |j                  |«       ||   }|S )z­
            Gets the other paired indexed hash item to the hash_value in the pairs dictionary
            in_t1: are we looking for the other pair in t1 or t2?
            )rø  r   Únotpresent_indexedÚremove)
Ú
hash_valueÚin_t1Ú	hashtableÚthe_other_hashesÚotherr|  r}  rú  rx  ry  s
        €€€€€rf   Úget_other_pairz=DeepDiff._diff_iterable_with_deephash.<locals>.get_other_pairY  sh   ø€ ñ
 Ø(�	Ø#1Ñ à(�	Ø#/Ð Ø—I‘I˜j¬*Ó5ˆEØœ
Ñ"Ü*�ð ˆLð ˜%�LØ ×'Ñ'¨Ô.Ø! %Ñ(�ØˆLrh   Nr   rZ  r°  r2  )r  r¯  )r[  r\  )Ú
old_repeatÚ
new_repeatÚold_indexesÚnew_indexesÚ
repetitionÚrepetition_change)T)rw  r@   rÂ   r_  r˜   rª   r¤  r]   rd   r§   r  rÙ   rÌ   rÍ   ÚMAX_PASSES_REACHED_MSGrc   r;   r`  ra  rä   r\   r   r[   rb  rM   r  r"   râ   ÚintersectionrE   r  )!rî   r  r¼   r”   r   Úfull_t1_hashtableÚfull_t2_hashtablerz  r{  Ú	get_pairsr7  r8  r  r  r  rq  r[   Úindex2r  rÿ   rr  Úitems_intersectÚ
t1_indexesÚ
t2_indexesÚt1_indexes_lenÚt2_indexes_lenÚrepetition_change_levelrÆ  r|  r}  rú  rx  ry  s!                               @@@@@rf   r†  z%DeepDiff._diff_iterable_with_deephash6  sØ  ü€ ð !×2Ñ2°5¸$Ó?ÐØ ×2Ñ2°5¸$Ó?ÐÜÐ0×5Ñ5Ó7Ó8ˆ	ÜÐ0×5Ñ5Ó7Ó8ˆ	Ø  9Ñ,ˆØ" YÑ.ˆô �Ó¤ NÓ 3Ñ3¼Ð<MÓ8NÔQTÐUfÓQgÑ8gÐjkÑ8kÑlÐos÷  pRñ  pRò  RØ‰IàˆIð ×!Ò!Ø,ˆLØ,‰Là->×-DÑ-DÓ-F×^¡T Q¨È!È~ÒJ]˜A˜q™DÓ^ˆLØ->×-DÑ-DÓ-F×\¡T Q¨È!È|ÒJ[˜A˜q™DÓ\ˆLØ�;‰;”|Ñ$ t§¡Ò6¹9Ø�K‰KœÓ%¨Ñ*Ó%Ø×?Ñ?Ø˜n¨l¸LÈ+ÐWeóg‰EáØ—;‘;Ô5Ò6Ø6:�—‘Ô2Ñ3Ü—‘Ô5×<Ñ<¸T¿_¹_ÓMÔNÜ“G‰Eä“GˆE÷	ñ 	ð. ×!Ó!Ø*ó [�
Ø×#Ñ#Ó%¬Ñ6ÙÙ& zÓ2�Ü˜UŸZ™Z›.�Ø>C¿j¹jÌJÑ>V˜, zÑ2×:Ò:Ð\a×\iÑ\i�ô �| JÑ/×7Ñ7Ó8¸AÒ=Ø)¨*Ñ5×=Ñ=¸aÑ@‘Fà!�FØ ò [�AØ#(×#6Ñ#6ØŸ
™
Ø$ ZÑ0×5Ñ5Ü1RØ12Ø28ð $7ó $�Lð —z‘z¤ZÑ/Ø×+Ñ+Ð,AÀ<Ð\fÐ+Õgä,=¸kÈ7Ó,SÐ)ØŸ
™
 <Ð1BÈz˜
ÕZò[ð[ð4 -ó [�
Ø×#Ñ#Ó%¬Ñ6ÙÙ& z¸Ô?�Ü˜UŸZ™Z›.�ð —:‘:¤Ñ+¬s°5·=±=À1Ñ3DÔ/EØ!‘Fà"Ÿ]™]¨1Ñ-�FØ% jÑ1×9Ñ9ò [�AØ#(×#6Ñ#6Ø$ ZÑ0×5Ñ5ØŸ
™
Ü1RØ12Ø28ð $7ó $�Lð —z‘z¤ZÑ/Ø×+Ñ+Ð,CÀ\Ð^hÐ+Õiô
 ->¸kÈ7Ó,SÐ)ØŸ
™
 <Ð1BÈz˜
ÕZò[ð[ð: (×4Ñ4°YÓ?ˆOà-ò X�
Ø)¨*Ñ5×=Ñ=�
Ø)¨*Ñ5×=Ñ=�
Ü!$ Z£�Ü!$ Z£�Ø! ^Ó3à.3×.AÑ.AØ$ ZÑ0×5Ñ5Ø$ ZÑ0×5Ñ5Ü1RØ1=¸jÑ1Iß ™ ñ2$ð	 /Bó /%Ð+ô HQØ#1Ø#1Ø$.Ø$.ô	H0Ð+×6Ñ6°|ÑDð
 ×'Ñ'Ð(;Ø(?ÈJð (õ Xñ%Xð, +ò W�
Ø×#Ñ#Ó%¬Ñ6ÙÙ& zÓ2�Ü˜UŸZ™Z›.�Ø?D¿z¹zÌZÑ?W˜ ZÑ0×8Ñ8¸Ò;Ð]b×]jÑ]jÐklÑ]m�Ø% jÑ1×9Ñ9¸!Ñ<�Ø$×2Ñ2Ø—J‘JØ  Ñ,×1Ñ1Ü-NØ-2Ø.4ð  3ó  �ð —:‘:¤Ñ+Ø×'Ñ'Ð(=¸|ÐXbÐ'Õcä(9¸+ÀwÓ(OÐ%Ø—J‘J˜|Ð->È:�JÕVð%Wð( -ò W�
Ø×#Ñ#Ó%¬Ñ6ÙÙ& z¸Ô?�Ü˜UŸZ™Z›.�Ø$ ZÑ0×8Ñ8¸Ñ;�Ø@EÇ
Á
ÌjÑ@X˜ jÑ1×9Ñ9¸!Ò<Ð^c×^kÑ^kÐlmÑ^n�Ø$×2Ñ2Ø  Ñ,×1Ñ1Ø—J‘JÜ-NØ-2Ø.4ð  3ó  �ð —:‘:¤Ñ+Ø×'Ñ'Ð(?ÀÐZdÐ'Õeô ):¸+ÀwÓ(OÐ%Ø—J‘J˜|Ð->È:�JÕVñ)WùóS _ùÛ\s   Ã[Ã[Ã7[
Ä[
c                 ó`   — |j                   |j                  k7  r| j                  d||¬«       y y )NrY  r2  )r�   r‚   r  ©rî   r  r   s      rf   Ú_diff_booleanszDeepDiff._diff_booleansê  s-   € Ø�8‰8�u—x‘xÒØ×ÑÐ 0°%ÀJÐÕOð  rh   c                 óÌ  — |r]| j                   rdn|j                  j                  j                  }| j                   rdn|j                  j                  j                  }ndx}}| j
                  rBt        |j                  |j                  | j                  ¬«      s| j                  d||¬«       yy| j                  �Bt        |j                  |j                  | j                  ¬«      s| j                  d||¬«       yy| j                  €/|j                  |j                  k7  r| j                  d||¬«       yy| j                  |j                  | j                  | j                  ¬«      }| j                  |j                  | j                  | j                  ¬«      }t        j                  ||«      }t        j                  ||«      }||k7  r| j                  d||¬«       yy)	zDiff NumbersrH  rÊ  )Ú	thresholdrY  r2  N)Úabs_tolrG  )rs   r�   rö   rˆ   r‚   r„   rD   r…   r  r‡   Úis_closerp   r*   rq   r,   rc   )rî   r  r   Úreport_type_changeÚt1_typeÚt2_typeÚt1_sÚt2_ss           rf   Ú_diff_numberszDeepDiff._diff_numbersî  s­  € áØ"&×"BÒ"B‘hÈÏÉ×HZÑHZ×HcÑHcˆGØ"&×"BÒ"B‘hÈÏÉ×HZÑHZ×HcÑHc‰Gà "Ð"ˆG�gà×ÒÜ)¨%¯(©(°E·H±HÈ×HkÑHkÕlØ×#Ñ#Ð$4°eÈ
Ð#ÕSð mà×ÑÐ*Ü˜EŸH™H e§h¡h¸×8IÑ8IÕJØ×#Ñ#Ð$4°eÈ
Ð#ÕSð Kà×$Ñ$Ð,Ø�x‰x˜5Ÿ8™8Ò#Ø×#Ñ#Ð$4°eÈ
Ð#ÕSð $ð ×(Ñ(¨¯©Ø<@×<SÑ<SØ@D×@[Ñ@[ð )ó ]ˆDð ×(Ñ(¨¯©Ø<@×<SÑ<SØ@D×@[Ñ@[ð )ó ]ˆDô "×(Ñ(¨°$Ó7ˆDÜ!×(Ñ(¨°$Ó7ˆDØ�tŠ|Ø×#Ñ#Ð$4°eÈ
Ð#ÕSð rh   c                 ó„   — t        |j                  «      t        |j                  «      k7  r| j                  d||¬«       yy)zDiff IP rangesrY  r2  N)rŽ   r�   r‚   r  r$  s      rf   Ú_diff_iprangeszDeepDiff._diff_ipranges  s5   € äˆu�x‰x‹=œC §¡›MÒ)Ø×ÑÐ 0°%ÀJÐÕOð *rh   c                 ó$  — t        | j                  |j                  | j                  ¬«      |_        t        | j                  |j                  | j                  ¬«      |_        |j                  |j                  k7  r| j                  d||¬«       yy©zDiff DateTimes)r}   rY  r2  N)r+   r¬   r�   r}   r‚   r  r$  s      rf   Ú_diff_datetimezDeepDiff._diff_datetime  so   € ä% d×&<Ñ&<¸e¿h¹hÐY]×YnÑYnÔoˆŒÜ% d×&<Ñ&<¸e¿h¹hÐY]×YnÑYnÔoˆŒà�8‰8�u—x‘xÒØ×ÑÐ 0°%ÀJÐÕOð  rh   c                 ó<  — | j                   rbt        | j                   |j                  | j                  ¬«      |_        t        | j                   |j                  | j                  ¬«      |_        |j                  |j                  k7  r| j                  d||¬«       yyr3  )r¬   r+   r�   r}   r‚   r  r$  s      rf   Ú
_diff_timezDeepDiff._diff_time!  sx   € à×!Ò!Ü)¨$×*@Ñ*@À%Ç(Á(Ð]a×]rÑ]rÔsˆEŒHÜ)¨$×*@Ñ*@À%Ç(Á(Ð]a×]rÑ]rÔsˆEŒHà�8‰8�u—x‘xÒØ×ÑÐ 0°%ÀJÐÕOð  rh   c                 óˆ   — |j                   j                  |j                  j                  k7  r| j                  d||¬«       yy)z
Diff UUIDsrY  r2  N)r�   rã  r‚   r  r$  s      rf   Ú_diff_uuidszDeepDiff._diff_uuids*  s5   € à�8‰8�<‰<˜5Ÿ8™8Ÿ<™<Ò'Ø×ÑÐ 0°%ÀJÐÕOð (rh   c                 óZ  — |j                  «       | j                  vr:t        |j                  «      j                  | j                  |j                  «       <   t
        €t        t        «      ‚| j                  r| j                  |«      r| j                  s…| j                  €7t        j                  |j                  |j                  | j                  ¬«      rCy	 t
        j                  j                  |j                  |j                  | j                  ¬«       y|j                  j$                  }|j                  j&                  |j                  j&                  k7  rT|j                  j)                  «       |_        |j                  j)                  «       |_        | j+                  ||||¬«       y|j                  j&                  }t-        |«      }|dk(  r| j+                  ||||¬«       y| j                  r| j                  |«      s| j                  rT|j                  j)                  «       |_        |j                  j)                  «       |_        | j/                  ||||¬«       yt1        t3        |j                  |«      t3        |j                  |«      «      D ]:  \  \  }}\  }	}
|j5                  ||
t6        ||	¬«      }| j9                  ||||¬«       Œ< y# t         $ r: t        j                  |j                  |j                  | j                  ¬«       Y �Œt"        $ r Y �Œw xY w)zDiff numpy arraysN)Ú	equal_nan)Údecimalr…  r’   rZ  )r;  r¹   r%   r‚   rˆ   r9   ÚImportErrorÚCANT_FIND_NUMPY_MSGr    rŸ   rp   Úarray_equalr�   rž   ÚtestingÚassert_almost_equalÚ	TypeErrorÚAssertionErrorÚdtypeÚshapeÚtolistrˆ  r_  r†  Úzipr0   rb  rP   r‡  )rî   r  r¼   r   r”   rD  Ú
dimensionsÚt1_pathÚt1_rowÚt2_pathÚt2_rowÚ	new_levels               rf   Ú_diff_numpy_arrayzDeepDiff._diff_numpy_array/  s…  € à�:‰:‹<˜t×0Ñ0Ñ0Ü.6°u·x±xÓ.@×.IÑ.IˆD×Ñ˜eŸj™j›lÑ+Üˆ:ô Ô1Ó2Ð2à×"Ò"¨4×+AÑ+AÀ%Ô+HÐQU×QbÒQbà×&Ñ&Ð.Ü—>‘> %§(¡(¨E¯H©HÀ×@ZÑ@ZÕ[ØðÜ—J‘J×2Ñ2°5·8±8¸U¿X¹XÈt×OfÑOfÐ2Ôgð ð Ÿ™Ÿ™ˆØ�8‰8�>‰>˜UŸX™XŸ^™^Ò+ð —x‘x—‘Ó(ˆEŒHØ—x‘x—‘Ó(ˆEŒHØ×Ñ  {À>Ð^hÐÕið —H‘H—N‘NˆEÜ˜U›ˆJØ˜QŠØ×#Ñ# E¨;À~ÐblÐ#ÕmØ×(Ò(¨T×-CÑ-CÀEÔ-JÈt×O`ÒO`ð !Ÿ8™8Ÿ?™?Ó,�”Ø Ÿ8™8Ÿ?™?Ó,�”Ø×1Ñ1°%¸ÐUcÐpzÐ1Õ{ä<?Ü.¨u¯x©x¸Ó?Ü.¨u¯x©x¸Ó?ó=Aò Ñ8Ñ%�W˜fÑ'8¨°ð !&× 3Ñ 3ØØÜ1GØ18Ø29ð !4ó !�Ið ×0Ñ0°¸KÐXfÐs}Ð0Õ~ñøô9 !ò ]Ü—N‘N 5§8¡8¨U¯X©XÀ×A[ÑA[×\Ð\Ü%ò Úðús   ÃA K Ë?L*ÌL*Ì)L*c                 ó:   — d|_         | j                  d||¬«       y)z
Diff typesÚtype_changesr2  N)rý   r  r$  s      rf   Ú_diff_typeszDeepDiff._diff_typesj  s   € à*ˆÔØ×Ñ˜N¨E¸jÐÕIrh   c                 ó¢  — | j                   �~| j                  t           | j                   kD  r^| j                  t           sEd| j                  t        <   t        j                  t        j                  | j                   «      «       t        S | j                  t        xx   dz  cc<   | j                  r| j                  r| j                  «        y y y )NTr’   )r¦   r]   re   rÚ   rÌ   rÍ   ÚMAX_DIFFS_REACHED_MSGrc   ra  r–   r—   Ú_auto_tune_cache©rî   s    rf   r`  zDeepDiff._count_diffo  s”   € Ø�N‰NÐ&¨4¯;©;´zÑ+BÀTÇ^Á^Ò+SØ—;‘;Ô5Ò6Ø6:�—‘Ô2Ñ3Ü—‘Ô4×;Ñ;¸D¿N¹NÓKÔLÜ Ð Ø�‰”JÓ 1Ñ$ÓØ�?Š?˜t×<Ò<Ø×!Ñ!Õ#ð  =ˆ?rh   c                 óæ  — | j                   t           | j                  z  dk(  }| j                  r�| j                   t           r|rz| j	                  «        ni| j                   t           | j
                  t           z  dk(  r?| j                  d«       | j
                  t        xx   dz  cc<   d| j                   t        <   |r1t        t        fD ]!  }| j                   |dd     | j                   |<   Œ# y y )Nr   z*Re-enabling the distance and level caches.rº   Té	   )
r]   re   r—   rÛ   Ú_auto_off_cacher°   ri   r^   r×   rØ   )rî   Útake_samplerõ   s      rf   rS  zDeepDiff._auto_tune_cachey  sØ   € Ø—{‘{¤:Ñ.°×1NÑ1NÑNÐRSÑSˆØ×(Ò(Ø�{‰{Ô1Ò2ÙØ×(Ñ(Õ*à—‘œZÑ(¨4×+BÑ+BÔC]Ñ+^Ñ^ÐbcÒcØ×$Ñ$Ð%QÔRà×'Ñ'Ô(BÓCÀrÑIÓCØ6:�—‘Ô2Ñ3ÙÜ+Ô-NÐOò 8�Ø#'§;¡;¨s°1°2¨wÑ#7�—‘˜CÒ ñ8ð rh   c                 ón  — | j                   t           r¢| j                   t           | j                   dj                  t        «         z
  | j                   t           | j                   t
           z
  z  }|| j                  k  r4d| j                   t        <   | j                  dj                  d«      «       yyy)z:
        Auto adjust the cache based on the usage
        zPREVIOUS {}Fz*Due to minimal cache hits, {} is disabled.zdistance cacheN)r]   rÛ   rÖ   rc   re   r×   ÚCACHE_AUTO_ADJUST_THRESHOLDr^   )rî   Úangles     rf   rW  zDeepDiff._auto_off_cache‰  sÏ   € ð �;‰;Ô-Ò.Ø—[‘[Ô!9Ñ:¸T¿[¹[È×I]ÑI]Ô^vÓIwÑ=xÑxð  ~B÷  ~Iñ  ~Iô  JTñ  ~Uð  X\÷  Xcñ  Xcô  dwñ  Xxñ  ~xñ  yˆEØ�t×7Ñ7Ò7Ø6;�—‘Ô2Ñ3Ø×$Ñ$Ð%Q×%XÑ%XÐYiÓ%jÕkð 8ð /rh   c                 óx   — | j                   D ]+  }|j                  |«      sŒ|j                  || ¬«      }|sŒ+ y y)aê  
        For each level we check all custom operators.
        If any one of them was a match for the level, we run the diff of the operator.
        If the operator returned True, the operator must have decided these objects should not
        be compared anymore. It might have already reported their results.
        In that case the report will appear in the final results of this diff.
        Otherwise basically the 2 objects in the level are being omitted from the results.
        )r  Údiff_instanceTF)r~   ÚmatchÚgive_up_diffing)rî   r  ÚoperatorÚprevent_defaults       rf   Ú_use_custom_operatorzDeepDiff._use_custom_operator“  sF   € ð ×-Ñ-ò 	 ˆHØ�~‰~˜eÕ$Ø"*×":Ñ":ÀÐVZÐ":Ó"[�Ú"Ùð		 ð rh   c                 óN  — | j                  «       t        u ry| j                  |«      ry|j                  |j                  u ry| j                  |«      ryd}t        |j                  «      t        |j                  «      k7  �r| j                  D ]?  }| j                  |j                  |«      sŒ | j                  |j                  |«      sŒ=d} n | j                  r7t        |j                  t        «      r|j                  j                  |_        d}| j                  r7t        |j                  t        «      r|j                  j                  |_        d}|r| j                  ||¬«       y|j                  �|j                  €| j                  d||¬«       y| j                  rSt        |j                  t         t"        f«      r3t%        |j                  «      t%        |j                  «      cxk(  rdk(  ry t        |j                  t&        «      r| j)                  ||¬«       yt        |j                  t*        «      r“| j,                  rst        |j                  t.        «      rY	 t1        j2                  |j                  «      }|j4                  |j                  j4                  k7  r| j                  d||¬«       yy| j;                  ||¬«       yt        |j                  t<        j<                  «      r| j?                  ||¬«       yt        |j                  t@        «      r| jC                  ||¬«       yt        |j                  t<        jD                  t<        jF                  t<        jH                  f«      r| jK                  ||¬«       yt        |j                  t.        «      r“| j,                  rst        |j                  t$        «      rY	 t1        j2                  |j                  «      }|j                  j4                  |j4                  k7  r| j                  d||¬«       yy| jM                  ||¬«       yt        |j                  tN        «      r| jQ                  |||¬«       yt        |j                  tR        «      r| jU                  |||¬«       yt        |j                  tV        «      r| jY                  |||¬«       yt        |j                  tZ        t\        t^        f«      r| ja                  ||¬«       yt        |j                  tb        «      r| je                  |||¬«       yt        |j                  tf        «      r| ji                  |||d¬«       yt        |j                  tj        «      r| jm                  ||||¬	«       yt        |j                  t        «      r| jo                  |||¬«       y| ji                  ||«       y# t6        t8        f$ r | j                  d||¬«       Y yw xY w# t6        t8        f$ r | j                  d||¬«       Y yw xY w)
aE  
        The main diff method

        **parameters**

        level: the tree level or tree node
        parents_ids: the ids of all the parent objects in the tree from the current node.
        _original_type: If the objects had an original type that was different than what currently exists in the level.t1 and t2
        NTFr2  rY  Únan)r   r*  )r   r&  r…  )8r`  ra  rb  r�   r‚   rü   r%   rv   rÉ   ru   rè   r   rM  rP  r  rž   rŒ   r/   rŽ   r-   r%  r   rt   r   ÚuuidÚUUIDrã  rÀ   r5  rÔ  Údatetimer4  rA   r1  ÚdateÚ	timedeltaÚtimer6  r8  r   r/  r   r#  rÇ   rÖ  rÆ   rã   r@   r€  r.   rM  r>   r9  r   rˆ  r$  )	rî   r  r¼   r”   r   r*  Ú
type_groupÚt1_uuidÚt2_uuids	            rf   râ   zDeepDiff._diff¥  sË  € ð ×ÑÓ¤Ñ.Øà×$Ñ$ UÔ+Øà�8‰8�u—x‘xÑØà�?‰?˜5Ô!Øà!ÐÜ�E—H‘HÓ¤¨%¯(©(Ó!3Ó3Ø"×8Ñ8ò �
Ø×'Ñ'¨¯©°*Õ=À$×BVÑBVÐW\×W_ÑW_ÐakÕBlØ).Ð&Ùðð ×"Ò"¤z°%·(±(¼DÔ'AØ Ÿ8™8Ÿ>™>�”Ø%*Ð"Ø×"Ò"¤z°%·(±(¼DÔ'AØ Ÿ8™8Ÿ>™>�”Ø%*Ð"Ù!Ø× Ñ  °:Ð Ô>Øà�x‰xÐ 5§8¡8Ð#3Ø×#Ñ#Ð$4°eÈ
Ð#ÔSØà×%Ò%¬*°U·X±XÄÄ{Ð?SÔ*TÔY\Ð]b×]eÑ]eÓYfÔjmÐns×nvÑnvÓjwô  ZAð  |Aò  ZAØð ZAô �e—h‘h¤Ô)Ø×Ñ °*ÐÕ=ä˜Ÿ™¤'Ô*à×%Ò%¬*°U·X±X¼uÔ*EðXä"Ÿi™i¨¯©Ó1�GØ—{‘{ e§h¡h§l¡lÒ2Ø×+Ñ+Ð,<¸eÐPZÐ+Õ[ð 3ð —‘˜u°�Õ<ä˜Ÿ™¤(×"3Ñ"3Ô4Ø×Ñ °*ÐÕ=ä˜Ÿ™¤(Ô+Ø×Ñ °*ÐÕ=ä˜Ÿ™¤8§=¡=´(×2DÑ2DÄhÇmÁmÐ"TÔUØ�O‰O˜E¨jˆOÕ9ä˜Ÿ™¤%Ô(à×%Ò%¬*°U·X±X¼sÔ*CðXä"Ÿi™i¨¯©Ó1�GØ—x‘x—|‘| w§{¡{Ò2Ø×+Ñ+Ð,<¸eÐPZÐ+Õ[ð 3ð × Ñ  °:Ð Õ>ä˜Ÿ™¤'Ô*Ø×Ñ˜u°ÐPbÐÕcä˜Ÿ™¤'Ô*Ø�O‰O˜E ;¸:ˆOÕFä˜Ÿ™¤%Ô(Ø×Ñ˜U K¸JÐÕGä˜Ÿ™¤3¬	´:Ð">Ô?Ø�N‰N˜5¨ZˆNÕ8ä˜Ÿ™¤*Ô-Ø×"Ñ" 5¨+À*Ð"ÕMä˜Ÿ™Ô"3Ô4Ø�N‰N˜5 +¸*ÐY]ˆNÕ^ä˜Ÿ™¤(Ô+Ø×Ñ  {À>Ð^hÐÕiä˜Ÿ™¤$Ô'Ø�O‰O˜E ;¸:ˆOÕFð �N‰N˜5 +Õ.øôm #¤NÐ3ò Xà×'Ñ'Ð(8¸%ÈJÐ'ÖWðXûô. #¤NÐ3ò Xà×'Ñ'Ð(8¸%ÈJÐ'ÖWðXús&   É(AW ÏAW> ×#W;×:W;×>#X$Ø#X$c                 ó  — | j                   }| j                  s|j                  «        |t        k(  r	 |S |t        k(  r3t        | j                   | j                  ¬«      }|j                  «        |S |t        k(  r| j                  d¬«      }|S |t        k(  r$t        | j                  | j                   d¬«      }|S |t        k(  r$t        | j                  | j                   d¬«      }|S t        t        j!                  |«      «      ‚)z3
        Get the results based on the view
        )Útree_resultsr­   F)Úreport_repetition_required)r‚   Útree_resultÚcompactT)rÞ   rª   Ú*mutual_add_removes_to_become_value_changesr3   r2   rG   r­   ræ   r4   Ú_to_delta_dictr5   rX   r‚   r6   rÀ   ÚINVALID_VIEW_MSGrc   )rî   r†   rú   s      rf   rç   zDeepDiff._get_view_results  só   € ð —‘ˆØ×%Ò%Ø×=Ñ=Ô?Ø”9ÒØð ˆð ”YÒÜ¨T¯Y©YÀd×FXÑFXÔYˆFØ×$Ñ$Ô&ð ˆð ”ZÒØ×(Ñ(ÀEÐ(ÓJˆFð ˆð ”\Ò!Ü  D§G¡G¸¿¹ÈEÔRˆFð
 ˆð	 Ô)Ò)Ü  D§G¡G¸¿¹ÈDÔQˆFð ˆô Ô-×4Ñ4°TÓ:Ó;Ð;rh   c                 óŽ   — 	 | j                  |«      S # t        $ r( t        j                  dj	                  ||| «      «       ‚ w xY w)Nz2Unable to group {} by {}. The key is missing in {})rø  rá   rÌ   rÔ   rc   )Úrowr›   r»   s      rf   Ú_get_key_for_group_byzDeepDiff._get_key_for_group_by+  sG   € ð	Ø—7‘7˜8Ó$Ð$øÜò 	Ü�L‰LÐM×TÑTÐU^Ð`hÐjmÓnÔoØð	ús	   ‚ “1Ac                 óÚ  — d}t        |t        t        f«      r|d   }t        |«      dkD  r|d   }n|}t        |t        «      �röt        |t
        «      �såi }t        |«      }|D �]@  }t        |t
        «      rü| j                  |||«      }	t        | d«      r| j                  j                  |	«       |r†| j                  |||«      }
t        | d«      r| j                  j                  |
«       |	|vri ||	<   | j                  r.|
||	   vrg ||	   |
<   ||	   |
   }||vsŒ»|j                  |«       ŒÍ|||	   |
<   ŒÖ| j                  r'|	|vrg ||	<   |||	   vsŒó||	   j                  |«       �Œ	|||	<   �Œdj                  |||«      }t        j                  |«       t!        |«      ‚ | j                  r„|rN|j#                  «       D ]9  \  }	}|j#                  «       D ]!  \  }
}|j%                  | j                  ¬«       Œ# Œ; |S |j#                  «       D ]!  \  }}|j%                  | j                  ¬«       Œ# |S dj                  ||«      }t        j                  |«       t!        |«      ‚)z�
        Convert a list of dictionaries into a dictionary of dictionaries
        where the key is the value of the group_by key in each dictionary.
        Nr   r’   r¸   z?Unable to group {} by {} since the item {} is not a dictionary.)rõ   zUnable to group {} by {})rè   rÐ  rÇ   r_  r   r   r   rx  r  r¸   rþ   rœ   r  rc   rÌ   rÔ   rÀ   r¤  Úsort)rî   r\   r›   r»   Úgroup_by_level2Úgroup_by_level1rú   Ú	item_copyrw  ro  rp  Úresult_key1_key2ÚmsgÚrow1rõ   s                  rf   rà   z DeepDiff._group_iterable_to_dict3  sv  € ð
 ˆÜ�h¤¤u Ô.Ø& q™kˆOÜ�8‹}˜qÒ Ø"*¨1¡+‘à&ˆOÜ�dœHÕ%¬j¸¼wÕ.GØˆFÜ  ›ˆIØ ó  *�Ü˜c¤7Ô+Ø×5Ñ5°c¸?ÈIÓV�Dä˜t _Ô5Ø×*Ñ*×.Ñ.¨tÔ4Ù&Ø#×9Ñ9¸#¸ÐPYÓZ˜ä" 4¨Ô9Ø ×.Ñ.×2Ñ2°4Ô8Ø vÑ-Ø+-˜F 4™LØ×1Ò1Ø#¨6°$©<Ñ7Ø57  t¡¨TÑ 2Ø/5°d©|¸DÑ/AÐ,Ø"Ð*:Ò:Ø 0× 7Ñ 7¸Õ <à14˜F 4™L¨Ò.à×1Ò1Ø#¨6Ñ1Ø/1  t¡Ø"¨&°©,Ò6Ø & t¡× 3Ñ 3°CÖ 8à+.˜F 4›Là[×bÑbÐclÐn}ð  @Có  D�CÜ—L‘L Ô%Ü$ S›/Ð)ðA *ðB ×%Ò%Ù"Ø&,§l¡l£nò A™
˜˜dØ)-¯©«ò A™I˜D #ØŸH™H¨×)?Ñ)?˜HÕ@ñAðAð ˆMð %+§L¡L£Nò =™˜˜SØŸ™ T×%;Ñ%;˜Õ<ð=àˆMØ(×/Ñ/°	¸8ÓDˆÜ�‰�SÔÜ˜‹oÐrh   c                 ó   — | j                   S )zB
        Get some stats on internals of the DeepDiff run.
        )r]   rT  s    rf   rì   zDeepDiff.get_statsp  s   € ð �{‰{Ðrh   c                 ó¼   — t        «       }t        D ]H  }| j                  |«      }|sŒt        |t         «      r||z  }Œ-|t        |j	                  «       «      z  }ŒJ |S )a'  
        Get the list of paths that were affected.
        Whether a value was changed or they were added or removed.

        Example
            >>> t1 = {1: 1, 2: 2, 3: [3], 4: 4}
            >>> t2 = {1: 1, 2: 4, 3: [3, 4], 5: 5, 6: 6}
            >>> ddiff = DeepDiff(t1, t2)
            >>> ddiff
            >>> pprint(ddiff, indent=4)
            {   'dictionary_item_added': [root[5], root[6]],
                'dictionary_item_removed': [root[4]],
                'iterable_item_added': {'root[3][1]': 4},
                'values_changed': {'root[2]': {'new_value': 4, 'old_value': 2}}}
            >>> ddiff.affected_paths
            SetOrdered(['root[3][1]', 'root[4]', 'root[5]', 'root[6]', 'root[2]'])
            >>> ddiff.affected_root_keys
            SetOrdered([3, 4, 5, 6, 2])

        )r@   rL   rë  rè   rÂ   )rî   rú   rõ   rM  s       rf   Úaffected_pathszDeepDiff.affected_pathsv  sY   € ô, “ˆÜò 	7ˆCØ—H‘H˜S“MˆEÚÜ˜e¤ZÔ0Ø˜e‘O‘Fàœj¨¯©«Ó6Ñ6‘Fð	7ð ˆrh   c                 ó  — t        «       }t        D ]t  }| j                  j                  |«      }|sŒ!t	        |t         «      r|}n|j                  «       }|D ],  }|j                  «       }|t        usŒ|j                  |«       Œ. Œv |S )a*  
        Get the list of root keys that were affected.
        Whether a value was changed or they were added or removed.

        Example
            >>> t1 = {1: 1, 2: 2, 3: [3], 4: 4}
            >>> t2 = {1: 1, 2: 4, 3: [3, 4], 5: 5, 6: 6}
            >>> ddiff = DeepDiff(t1, t2)
            >>> ddiff
            >>> pprint(ddiff, indent=4)
            {   'dictionary_item_added': [root[5], root[6]],
                'dictionary_item_removed': [root[4]],
                'iterable_item_added': {'root[3][1]': 4},
                'values_changed': {'root[2]': {'new_value': 4, 'old_value': 2}}}
            >>> ddiff.affected_paths
            SetOrdered(['root[3][1]', 'root[4]', 'root[5]', 'root[6]', 'root[2]'])
            >>> ddiff.affected_root_keys
            SetOrdered([3, 4, 5, 6, 2])
        )	r@   rL   rÞ   rë  rè   rÂ   Úget_root_keyr   rþ   )rî   rú   rõ   rM  Úvalues_listr\   Úroot_keys          rf   Úaffected_root_keyszDeepDiff.affected_root_keys–  s�   € ô* “ˆÜò 
	-ˆCØ—I‘I—M‘M #Ó&ˆEÚÜ˜e¤ZÔ0Ø"'‘Kà"'§*¡*£,�KØ'ò -�DØ#×0Ñ0Ó2�HØ¤zÒ1ØŸ
™
 8Õ,ñ-ð
	-ð ˆrh   c                 ó’   •— t        | d«      r-| j                  t        t        hv rt	        | j
                  «      S t        ‰| �  «       S )Nré   )r  r†   r5   r6   rŽ   ré   r¾   Ú__str__)rî   rö   s    €rf   rŠ  zDeepDiff.__str__¹  s<   ø€ Ü�4˜Ô)¨d¯i©i¼LÔJ^Ð;_Ñ._Ü�t×)Ñ)Ó*Ð*Ü‰w‰Ó Ð rh   r³   )NNNN)NN)NT)Trˆ   r‰   rŠ   ÚdocÚ__doc__rZ  Ú!CUTOFF_DISTANCE_FOR_PAIRS_DEFAULTÚ%CUTOFF_INTERSECTION_FOR_PAIRS_DEFAULTrg  ÚtimezoneÚutcrÌ   rë   r2   r
   r   rã  r   rŒ   r	   rŽ   r   r   r   r   r  r�   r   r   r   r¿   rÜ   r  r  Ústaticmethodr  rã   r$  r9  rü   rD  rQ  r#  r€  rƒ  rˆ  r“  rž  r‡  r   r¡  r£  r¢  rÔ  rÖ  rÙ  rw  r   rè  rð  r  r†  r%  r/  r1  r4  r6  r8  rM  rP  r`  rS  rW  rb  râ   rç   rx  rà   rì   Úpropertyrƒ  rˆ  rŠ  Ú__classcell__)rö   s   @rf   r‘   r‘   ‰   sÇ  ø„ Ø€Gà"&Ðð
 04Ø()Ø!"Ø/0Ø8<Ø2SØ6[ØIQ×IZÑIZ×I^ÑI^Ø04Ø:>ØAEØVZØdhØ59Ø).Ø=AØ?CØ,0Ø26Ø.3Ø-2Ø38Ø$)Ø7;Ø04Ø*/Ø27ØHLØ.3Ø).Ø:>ØAEØ<@Ø;?Ø+,Ø7:Ø&+Ø/3Ø*.Ø!)Ø;>Ø;?Ø8>¿¹Ø).Ø37Ø37Ø26Ø&+Ø%*Ø$%Ø$Ø-2Ø7;Ø>BñqD*ØðD*àðD*ð "*¨#¡ðD*ð %(ð	D*ð
 !ðD*ð ,/ðD*ð $,¨D°©IÑ#6ðD*ð -2ðD*ð 16ðD*ð #(¨×(9Ñ(9¸<Ð(GÑ"HðD*ð % T¨#¡YÑ/ðD*ð (0°Ñ'9ðD*ð /7°xÑ.@ðD*ð !& c¨4°©9°c¸#±hÀ	È#ÁÐPTÐ&TÑ UðD*ð ',¨C°°c±¸GÀC¹LÈ$ÈwÐWZÉ|ÑJ\Ð^bÐ,bÑ&cðD*ð  !)¨¨d©Ñ 4ð!D*ð" %)ð#D*ð$ !  e¨C°¨H¡o°tÐ!;Ñ<ð%D*ð& %*¨#¨x¸Ð*=Ñ$>ð'D*ð( " (Ñ+ð)D*ð* " $ s¨C x¡.Ñ1ð+D*ð, *.ð-D*ð. )-ð/D*ð0 /3ð1D*ð2  $ð3D*ð4 %-¨XÑ$6ð5D*ð6 ,0ð7D*ð8 &*ð9D*ð: .2ð;D*ð< )1°°e¸CÀ¸H±oÑ1FÑ(Gð=D*ð> *.ð?D*ð@ %)ðAD*ðB (0°Ñ'9ðCD*ðD /7°xÑ.@ðED*ðF !& c¨4°©9°dÐ&:Ñ ;ðGD*ðH )1°Ñ(:ðID*ðJ (+ðKD*ðL 27ðMD*ðN "&ðOD*ðP  (¨™ðQD*ðR % S™MðSD*ðT !ðUD*ðV *1°Ñ):ðWD*ðX )1°Ñ(:ðYD*ðZ #+¨C¨5°$¨;Ñ"7ð[D*ð\ %)ð]D*ð^ &.¨c¡]ð_D*ð` ,1ðaD*ðb %-¨S¡MðcD*ðd "&ðeD*ðf !%ðgD*ðh !$ðiD*ðj ðkD*ðl )-ðmD*ðn ' t¨C°¨H¡~Ñ6ðoD*ðp &.¨d°3¸°8©nÑ%=õqD*òLó0ó$.ð$ ðc ð c¨¨c°3¨h©ò có ðcñ4 BKÃÐhlñ 
 ð 
°)¸C±.ð 
ÐZbÐcfÑZgð 
Ðquó 
ñ AJÃÐafð  CGð  bgñ #
˜sð #
°¸3±ð #
Ð\`ð #
Ðt|ð  ~Añ  uBð #
ð  ]að #
ð  lpó #
ðJ' ð '¨ó 'ðR Cð ¨cð °dó ð4)¨sð )¸3ð )À4ÈÈSÈÁ>ó )ñ\ %.¨b£MØ!&ØØ#'Ø#'Ø"&ñiMàðiMð ˜s‘^ðiMð !ð	iMð
 ðiMð ˜c‘]ðiMð ˜c‘]ðiMð ˜S‘MðiMð 
óiMñVY˜sð Y°¸±ð YÀtó Yð< ð Sð ¨cð °dò ó ðñ FOÃ[Ðquð  RVñ s Cð s°iÀ±nð sÐbjÐkoÑbpð sð  DLð  MPñ  DQð sð  [_ó sð )-Ø(,ñLð 
ˆe�E˜#˜s˜(‘O U¨3°¨8¡_Ð4Ñ5Ñ	6ó	Lð, )-Ø(,ñAð 
ˆe�E˜#˜s˜(‘O U¨3°¨8¡_Ð4Ñ5Ñ	6ó	AñF :C»ÐUYÐfjó 0ðd°8¸C±=ð ÀTó ñ .7«[Ø°dØ¨Ø¨ó	EQñP .7«[ÈÐhló6#ór5Lón
ZòDò2ðh Ù�tÔñ
+ó ó ð
+ð ^bóò4dóLrWóhPó$TóLPó
PóPóPñ
 4=³;È4ó 9óvJò
$ò8ò lòñ$ (1£{À4ÐTXó n/ò`ð, ñó ðò;òzð ñó ðð> ñ ó ð ÷D!ð !rh   r‘   Ú__main__)‘rÀ  Úloggingr¬  rg  re  Úenumr   rÑ   r   Úmathr   r)  Útypingr   r   r   r	   r
   r   r   r   r   r   r   r   r   Úcollections.abcr   r   r   Úcollectionsr   Úinspectr   Ú	itertoolsr   Ú	functoolsr   Údeepdiff.helperr   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   Údeepdiff.serializationrB   Údeepdiff.distancerC   rD   Údeepdiff.modelrE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   Údeepdiff.deephashrS   rT   Údeepdiff.baserU   Údeepdiff.lfucacherV   rW   Údeepdiff.colored_viewrX   Úpytz.tzinforY   Ú	getLoggerrˆ   rÌ   r  rR  r	  r‹  rb   rŽ   rŒ   rg   rÖ   re   rd   rÙ   rÚ   rÛ   r×   rØ   r=  ru  rÐ   rÎ   rÏ   ri   rã   rj   r�  rŽ  rù   r€   r‘   ÚdoctestÚtestmodr�   rh   rf   ú<module>rª     sö  ðó Û Û Û Û Ý Ý Ý $ß × × Õ ß 7Ñ 7Ý #Ý Ý !Ý ÷
N÷ 
N÷ 
N÷ 
N÷ 
N÷ 
N÷ 
N÷ 
N÷ 
N÷ 
Nó 
Nõ 6ß C÷÷ ÷ ÷ ÷ =Ý ß 0Ý -áÝ&ð 
ˆ×	Ñ	˜8Ó	$€ðYð ð
Xð ñ
 !¨!¨°:Ô>Ð áˆnÓ€ð E€ð]˜T # s (™^ð ]¸hÈÀuÈdÀ{Ñ>Sð ]Ð_dð ]Ðimó ]ð 6Ð Ø€
Ø€Ø1Ð Ø1Ð Ø1Ð Ø+Ð Ø$GÐ !ØoÐ Ø~Ð ØXÐ Ø?Ð ØAÐ Ø9Ð áÐ0Ð1Ó2Ð ð %(Ð !ð ),Ð %ðÐ ô0"�xô "ôs!ˆzÐ-¨}Ð>NÐPTô s!ðl9 ˆzÒÛØ€G‡O‚OÕð rh   