+
    æôÖjœ)  ã                   ó¾   € R t ^ RIt^ RIt^ RIHt ^ RIHt . ROt/ tRt	. ROt
R tRR ltR tR t ! R	 R4      tRR
 lt]]3R ltR tR t]R8X  d
   ]! 4        R# R# )z³Utilities for comparing files and directories.

Classes:
    dircmp

Functions:
    cmp(f1, f2, shallow=True) -> int
    cmpfiles(a, b, common) -> ([], [], [])
    clear_cache()

N)Úfilterfalse)ÚGenericAliasÚdircmpc                 ó.   € \         P                  4        R# )zClear the filecmp cache.N)Ú_cacheÚclear© ó    Ú[/home/div/.local/share/uv/python/cpython-3.14.7-linux-aarch64-gnu/lib/python3.14/filecmp.pyÚclear_cacher      s   € ä
‡L�L†Nr	   c                óâ  € \        \        P                  ! V 4      4      p\        \        P                  ! V4      4      pV^ ,          \        P                  8w  g   V^ ,          \        P                  8w  d   R# V'       d	   W48X  d   R# V^,          V^,          8w  d   R# \        P                  WW434      pVf5   \        W4      p\        \        4      ^d8”  d   \        4        V\        WW43&   V# )a  Compare two files.

Arguments:

f1 -- First file name

f2 -- Second file name

shallow -- treat files as identical if their stat signatures (type, size,
           mtime) are identical. Otherwise, files are considered different
           if their sizes or contents differ.  [default: True]

Return value:

True if the files are the same, False otherwise.

This function uses a cache for past comparisons and the results,
with cache entries invalidated if their stat information
changes.  The cache may be cleared by calling clear_cache().

FT)	Ú_sigÚosÚstatÚS_IFREGr   ÚgetÚ_do_cmpÚlenr   )Úf1Úf2ÚshallowÚs1Ús2Úoutcomes   &&&   r
   Úcmpr      s«   € ô. 
Œb�gŠg�b‹kÓ	€BÜ	Œb�gŠg�b‹kÓ	€BØ	ˆ!…u”—‘Ô  1¥¬¯©Ô 5Ùß�2”8ÙØ	ˆ!…u��1•„~Ùä�j‰j˜" "Ð)Ó*€GØ‚Ü˜"“/ˆÜŒv‹;˜ÔÜŒMØ!(Œˆr�rˆ~ÑØ€Nr	   c                 óp   € \         P                  ! V P                  4      V P                  V P                  3# ©N)r   ÚS_IFMTÚst_modeÚst_sizeÚst_mtime)Ústs   &r
   r   r   F   s*   € Ü�KŠK˜Ÿ
™
Ó#Ø�J‰JØ�K‰Kðð r	   c           	      óv  € \         p\        V R 4      ;_uu_ 4       p\        VR 4      ;_uu_ 4       p VP                  V4      pVP                  V4      pWV8w  d    RRR4       RRR4       R# V'       d   KF   RRR4       RRR4       R#   + '       g   i     M; iRRR4       R#   + '       g   i     R# ; i)ÚrbTNF)ÚBUFSIZEÚopenÚread)r   r   ÚbufsizeÚfp1Úfp2Úb1Úb2s   &&     r
   r   r   K   sq   € Ü€GÜ	ˆb�$�Œ˜3¤ R¨§¤°#ØØ—‘˜'Ó"ˆBØ—‘˜'Ó"ˆBØŒxØ÷ !/�‰÷ ‘2Ø÷ !/�‰§§ú���Šús4   ›B'°+B
	ÁB'Á-B
	Á7B
	Á8B'Â
BÂB'Â'B8	c                   óª   a € ] tR t^Xt o RtRRR/R lltR tR tR tR	 t	R
 t
R tR tR tR t]! ]
]	]	]	]]]]]]]]R7      tR t]! ]4      tRtV tR# )r   a·  A class that manages the comparison of 2 directories.

dircmp(a, b, ignore=None, hide=None, *, shallow=True)
  A and B are directories.
  IGNORE is a list of names to ignore,
    defaults to DEFAULT_IGNORES.
  HIDE is a list of names to hide,
    defaults to [os.curdir, os.pardir].
  SHALLOW specifies whether to just check the stat signature (do not read
    the files).
    defaults to True.

High level usage:
  x = dircmp(dir1, dir2)
  x.report() -> prints a report on the differences between dir1 and dir2
   or
  x.report_partial_closure() -> prints report on differences between dir1
        and dir2, and reports on common immediate subdirectories.
  x.report_full_closure() -> like report_partial_closure,
        but fully recursive.

Attributes:
 left_list, right_list: The files in dir1 and dir2,
    filtered by hide and ignore.
 common: a list of names in both dir1 and dir2.
 left_only, right_only: names only in dir1, dir2.
 common_dirs: subdirectories in both dir1 and dir2.
 common_files: files in both dir1 and dir2.
 common_funny: names in both dir1 and dir2 where the type differs between
    dir1 and dir2, or the name is not stat-able.
 same_files: list of identical files.
 diff_files: list of filenames which differ.
 funny_files: list of files which could not be compared.
 subdirs: a dictionary of dircmp instances (or MyDirCmp instances if this
   object is of type MyDirCmp, a subclass of dircmp), keyed by names
   in common_dirs.
 Nr   Tc               ó¶   € Wn         W n        Vf'   \        P                  \        P                  .V n        MW@n        Vf   \        V n        MW0n        WPn        R # r   )	ÚleftÚrightr   ÚcurdirÚpardirÚhideÚDEFAULT_IGNORESÚignorer   )ÚselfÚaÚbr4   r2   r   s   &&&&&$r
   Ú__init__Údircmp.__init__   s@   € ØŒ	ØŒ
ØŠ<ÜŸ™¤B§I¡IÐ.ˆD�IàŒIØŠ>Ü)ˆD�Kà ŒKØŽr	   c                ó–  € \        \        P                  ! V P                  4      V P                  V P
                  ,           4      V n        \        \        P                  ! V P                  4      V P                  V P
                  ,           4      V n        V P                  P                  4        V P                  P                  4        R # r   )
Ú_filterr   Úlistdirr.   r2   r4   Ú	left_listr/   Ú
right_listÚsort©r5   s   &r
   Úphase0Údircmp.phase0Œ   sx   € Ü ¤§¢¨D¯I©IÓ!6Ø!%§¡¨4¯;©;Õ!6ó8ˆŒä!¤"§*¢*¨T¯Z©ZÓ"8Ø"&§)¡)¨D¯K©KÕ"7ó9ˆŒà�‰×ÑÔØ�‰×ÑÖr	   c           	     ó‚  € \        \        \        \        P                  P
                  V P                  4      V P                  4      4      p\        \        \        \        P                  P
                  V P                  4      V P                  4      4      p\        \        VP                  \        VP                  V4      4      4      V n        \        \        VP                  \        VP                  V4      4      4      V n        \        \        VP                  \        VP                  V4      4      4      V n        R # r   )ÚdictÚzipÚmapr   ÚpathÚnormcaser=   r>   ÚlistÚ__getitem__ÚfilterÚ__contains__Úcommonr   Ú	left_onlyÚ
right_only)r5   r6   r7   s   &  r
   Úphase1Údircmp.phase1”   s¼   € Ü””SœŸ™×)Ñ)¨4¯>©>Ó:¸D¿N¹NÓKÓLˆÜ””SœŸ™×)Ñ)¨4¯?©?Ó;¸T¿_¹_ÓMÓNˆÜœ3˜qŸ}™}¬f°Q·^±^ÀQÓ.GÓHÓIˆŒÜœc !§-¡-´¸Q¿^¹^ÈQÓ1OÓPÓQˆŒÜœs 1§=¡=´+¸a¿n¹nÈaÓ2PÓQÓRˆŽr	   c                óú  € . V n         . V n        . V n        V P                   EF   p\        P
                  P                  V P                  V4      p\        P
                  P                  V P                  V4      pR p \        P                  ! V4      p \        P                  ! V4      pV'       dö   \        P                  ! XP                  4      p\        P                  ! XP                  4      pWx8w  d   V P                  P                  V4       Kó  \        P                  ! V4      '       d   V P                   P                  V4       EK-  \        P                   ! V4      '       d   V P                  P                  V4       EKg  V P                  P                  V4       EK…  V P                  P                  V4       EK£  	  R#   \        \        3 d    Rp ELLi ; i  \        \        3 d    Rp ELOi ; i)TFN)Úcommon_dirsÚcommon_filesÚcommon_funnyrM   r   rG   Újoinr.   r/   r   ÚOSErrorÚ
ValueErrorr   r   ÚappendÚS_ISDIRÚS_ISREG)	r5   ÚxÚa_pathÚb_pathÚokÚa_statÚb_statÚa_typeÚb_types	   &        r
   Úphase2Údircmp.phase2›   si  € ØˆÔØˆÔØˆÔà—•ˆAÜ—W‘W—\‘\ $§)¡)¨QÓ/ˆFÜ—W‘W—\‘\ $§*¡*¨aÓ0ˆFàˆBðÜŸš ›�ðÜŸš ›�÷
 ÜŸš V§^¡^Ó4�ÜŸš V§^¡^Ó4�ØÔ#Ø×%Ñ%×,Ñ,¨QÖ/Ü—\’\ &×)Ò)Ø×$Ñ$×+Ñ+¨A×.Ü—\’\ &×)Ò)Ø×%Ñ%×,Ñ,¨Q×/à×%Ñ%×,Ñ,¨Q×/à×!Ñ!×(Ñ(¨×+ó= øô œZÐ(ô ð “ð	ûô œZÐ(ô à“ðús$   Á=G	ÂG#Ç	G ÇG Ç#G:Ç9G:c                óœ   € \        V P                  V P                  V P                  V P                  4      pVw  V n        V n        V n        R # r   )Úcmpfilesr.   r/   rT   r   Ú
same_filesÚ
diff_filesÚfunny_files)r5   Úxxs   & r
   Úphase3Údircmp.phase3À   s7   € Ü�d—i‘i §¡¨T×->Ñ->ÀÇÁÓMˆØ=?Ñ:ˆŒ˜œ¨$Ö*:r	   c           	     ób  € / V n         V P                   F—  p\        P                  P	                  V P
                  V4      p\        P                  P	                  V P                  V4      pV P                  W#V P                  V P                  V P                  R 7      V P                   V&   K™  	  R# ))r   N)ÚsubdirsrS   r   rG   rV   r.   r/   Ú	__class__r4   r2   r   )r5   r\   Úa_xÚb_xs   &   r
   Úphase4Údircmp.phase4Ä   s|   € ð
 ˆŒØ×!Ô!ˆAÜ—'‘'—,‘,˜tŸy™y¨!Ó,ˆCÜ—'‘'—,‘,˜tŸz™z¨1Ó-ˆCØ#Ÿ~™~¨c¸¿¹ÀTÇYÁYØ6:·l±lð  .ó  DˆD�L‰L˜‹Oó "r	   c                óˆ   € V P                  4        V P                  P                  4        F  pVP                  4        K  	  R # r   )rs   ro   ÚvaluesÚphase4_closure©r5   Úsds   & r
   rw   Údircmp.phase4_closureÐ   s.   € Ø�‰ŒØ—,‘,×%Ñ%Ö'ˆBØ×ÑÖó (r	   c                ó  € \        R V P                  V P                  4       V P                  '       d=   V P                  P	                  4        \        RV P                  RV P                  4       V P
                  '       d=   V P
                  P	                  4        \        RV P                  RV P
                  4       V P                  '       d1   V P                  P	                  4        \        RV P                  4       V P                  '       d1   V P                  P	                  4        \        RV P                  4       V P                  '       d1   V P                  P	                  4        \        RV P                  4       V P                  '       d1   V P                  P	                  4        \        RV P                  4       V P                  '       d3   V P                  P	                  4        \        RV P                  4       R# R# )	ÚdiffzOnly inÚ:zIdentical files :zDiffering files :zTrouble with common files :zCommon subdirectories :zCommon funny cases :N)Úprintr.   r/   rN   r?   rO   rh   ri   rj   rS   rU   r@   s   &r
   ÚreportÚdircmp.reportÕ   sV  € äˆf�d—i‘i §¡Ô,Ø�>�>ˆ>Ø�N‰N×ÑÔ!Ü�)˜TŸY™Y¨¨T¯^©^Ô<Ø�?�?ˆ?Ø�O‰O× Ñ Ô"Ü�)˜TŸZ™Z¨¨d¯o©oÔ>Ø�?�?ˆ?Ø�O‰O× Ñ Ô"ÜÐ% t§¡Ô7Ø�?�?ˆ?Ø�O‰O× Ñ Ô"ÜÐ% t§¡Ô7Ø××ÐØ×Ñ×!Ñ!Ô#ÜÐ/°×1AÑ1AÔBØ××ÐØ×Ñ×!Ñ!Ô#ÜÐ+¨T×-=Ñ-=Ô>Ø××ÐØ×Ñ×"Ñ"Ô$ÜÐ(¨$×*;Ñ*;Ö<ñ r	   c                óœ   € V P                  4        V P                  P                  4        F  p\        4        VP                  4        K  	  R # r   )r   ro   rv   r~   rx   s   & r
   Úreport_partial_closureÚdircmp.report_partial_closureî   s0   € Ø�‰ŒØ—,‘,×%Ñ%Ö'ˆBÜŒGØ�I‰IŽKó (r	   c                óœ   € V P                  4        V P                  P                  4        F  p\        4        VP	                  4        K  	  R # r   )r   ro   rv   r~   Úreport_full_closurerx   s   & r
   r…   Údircmp.report_full_closureô   s3   € Ø�‰ŒØ—,‘,×%Ñ%Ö'ˆBÜŒGØ×"Ñ"Ö$ó (r	   )ro   rh   ri   rj   rS   rT   rU   rM   rN   rO   r=   r>   c                ó€   € WP                   9  d   \        V4      hV P                   V,          ! V 4       \        W4      # r   )Ú	methodmapÚAttributeErrorÚgetattr)r5   Úattrs   &&r
   Ú__getattr__Údircmp.__getattr__   s3   € Ø—~‘~Ô%Ü  Ó&Ð&Ø�‰�tÖ˜TÔ"Ü�tÓ"Ð"r	   )rM   rS   rT   rU   ri   rj   r2   r4   r.   r=   rN   r/   r>   rO   rh   r   ro   )NN)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r8   rA   rP   rd   rl   rs   rw   r   r‚   r…   rD   rˆ   rŒ   Úclassmethodr   Ú__class_getitem__Ú__static_attributes__Ú__classdictcell__)Ú__classdict__s   @r
   r   r   X   s‚   ø‡ € ñ$	ñLÀõ òòSò#,òJ@ò
Dò ò
=ò2ò%ñ ˜VØ &°6ÀvØ!'°fÈ6Ø"¨fÀØ%°&ô	:€Iò#ñ $ LÓ1Ör	   c                óâ   € . . . 3pV Fc  p\         P                  P                  W4      p\         P                  P                  W4      pV\        WgV4      ,          P	                  V4       Ke  	  V# )a=  Compare common files in two directories.

a, b -- directory names
common -- list of file names found in both directories
shallow -- if true, do comparison based solely on stat() information

Returns a tuple of three lists:
  files that compare equal
  files that are different
  filenames that aren't regular files.

)r   rG   rV   Ú_cmprY   )r6   r7   rM   r   Úresr\   ÚaxÚbxs   &&&&    r
   rg   rg   	  s^   € ð ˆr�2ˆ,€CÛˆÜ�W‰W�\‰\˜!ÓˆÜ�W‰W�\‰\˜!ÓˆØŒD�˜Ó!Õ"×)Ñ)¨!Ö,ñ ð €Jr	   c                 ó\   €  V! V! WV4      4      '       * #   \         \        3 d     ^# i ; i)é   )rW   rX   )r6   r7   ÚshÚabsr   s   &&&&&r
   r™   r™   $  s2   € ðÙ‘s˜1 “}Ó%Ô%Ð%øÜ”ZÐ ô Úðús   ‚ –+ª+c                 ó@   € \        \        VP                  V 4      4      # r   )rI   r   rL   )ÚflistÚskips   &&r
   r;   r;   -  s   € Ü”˜D×-Ñ-¨uÓ5Ó6Ð6r	   c                  ó*  € ^ RI p ^ RIpVP                  V P                  R,          R4      w  r#\        V4      ^8w  d   VP	                  RR4      h\        V^ ,          V^,          4      pRV9   d   VP                  4        R# VP                  4        R# )é    N:é   NNÚrzneed exactly two args)z-rÚ )ÚsysÚgetoptÚargvr   ÚGetoptErrorr   r…   r   )r©   rª   ÚoptionsÚargsÚdds        r
   Údemor°   3  sr   € ÛÛØ—M‘M #§(¡(¨2¥,°Ó4�M€GÜ
ˆ4ƒy�A„~Ø× Ñ Ð!8¸$Ó?Ð?Ü	��Q•˜˜a�Ó	!€BØ�WÔØ
×ÑÖ à
�	‰	Žr	   Ú__main__)r   r   r   rg   r3   i    )ÚRCSÚCVSÚtagsz.gitz.hgz.bzrÚ_darcsÚ__pycache__)T)r’   r   r   Ú	itertoolsr   Útypesr   Ú__all__r   r$   r3   r   r   r   r   r   rg   r    r™   r;   r°   rŽ   r   r	   r
   Ú<module>rº      s€   ðñ
ó 
Û Ý !Ý â
I€à	€Ø
€òJ€òô&òPò
	÷n2ñ n2ôbð6  ô ò7ò
ð ˆzÔÙ†Fñ r	   