
    si^                    Z   S r SSKJr  SSKJrJr  SSKJr  SSKJ	r	J
r
  SSKJrJrJrJrJrJrJrJrJr  SSKJr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJ r J!r!J"r"J#r#J$r$J%r%  SSK&J'r'   " S S\5      r( " S S\5      r) " S S\5      r* " S S\\5      r+\+" SS9r, " S S\5      r- " S S\5      r. " S S\5      r/ " S  S!\5      r0 " S" S#\5      r1 " S$ S%\5      r2 " S& S'\25      r3 " S( S)\5      r4 " S* S+\\5      r5 " S, S-\5      r6 " S. S/\55      r7 " S0 S1\55      r8 " S2 S3\85      r9g4)5a  Implements the data model for conda packages.

A PackageRecord is the record of a package present in a channel. A PackageCache is the record of a
downloaded and cached package. A PrefixRecord is the record of a package installed into a conda
environment.

Object inheritance:

.. autoapi-inheritance-diagram:: PackageRecord PackageCacheRecord PrefixRecord
   :top-classes: conda.models.records.PackageRecord
   :parts: 1
    )annotations)basenamejoin)Path)dt_to_timestampisoparse   )	BooleanFieldComposableFieldDictSafeMixinEntity	EnumFieldIntegerField	ListFieldNumberFieldStringField)context)
isiterable)
deprecated)PathNotFoundError   )Channel)FileModeLinkType
NoarchTypePackageTypePathEnumPlatform	MatchSpecc                  (   ^  \ rS rSrU 4S jrSrU =r$ )LinkTypeField+   c                  > [        U[        5      (       a]  UR                  SS5      R                  SS5      R                  5       nUS:X  a  [        R
                  nOUS:X  a  [        R                  n[        TU ]!  XU5      $ )N- _hardsoft)	
isinstancestrreplacelowerr   hardlinksoftlinksuperboxselfinstanceinstance_typeval	__class__s       4lib/python3.13/site-packages/conda/models/records.pyr1   LinkTypeField.box,   sk    c3++c2&..sB7==?Cf}''''w{8C88     __name__
__module____qualname____firstlineno__r1   __static_attributes____classcell__r7   s   @r8   r"   r"   +   s    9 9r:   r"   c                  (   ^  \ rS rSrU 4S jrSrU =r$ )NoarchField6   c                L   > [         TU ]  X[        R                  " U5      5      $ N)r0   r1   r   coercer2   s       r8   r1   NoarchField.box7   s    w{8J4E4Ec4JKKr:   r;   r<   rC   s   @r8   rE   rE   6   s    L Lr:   rE   c                  l   ^  \ rS rSrU 4S jr\S 5       r\S 5       rU 4S jrU 4S jr	U 4S jr
SrU =r$ )	TimestampField;   c                $   > [         TU ]  SSSS9  g )Nr   F)defaultrequireddefault_in_dumpr0   __init__r3   r7   s    r8   rS   TimestampField.__init__<   s    UEJr:   c                .    U (       a  U n U S:  a  U S-  n U $ Nl   A i  r;   r6   s    r8   _make_secondsTimestampField._make_seconds?   s&    C\! 
r:   c                .    U (       a  U S:  a  U S-  n U n U $ rW   r;   rX   s    r8   _make_milliseconds!TimestampField._make_millisecondsI   s     \!tC
r:   c                B   > U R                  [        TU ]	  XU5      5      $ rH   )rY   r0   r1   r2   s       r8   r1   TimestampField.boxQ   s    !!%'+hs"KLLr:   c           	     T   > [        U R                  [        TU ]  XU5      5      5      $ rH   )intr\   r0   dumpr2   s       r8   rb   TimestampField.dumpT   s)    ##EGL#$NO
 	
r:   c                   >  [         TU ]  X5      $ ! [         aB     [        [	        [        UR                  5      5      5      s $ ! [        [        4 a      gf = ff = f)Nr   )r0   __get__AttributeErrorra   r   r   date
ValueError)r3   r4   r5   r7   s      r8   re   TimestampField.__get__Y   s[    	7?8;; 	?8HMM+BCDD"J/ 	s,    
A&AAAAAAr;   )r=   r>   r?   r@   rS   staticmethodrY   r\   r1   rb   re   rA   rB   rC   s   @r8   rL   rL   ;   sF    K    M

 r:   rL   c                  0    \ rS rSr\" 5       r\" \SS9rSr	g)Linkc   FrP   r;   N)
r=   r>   r?   r@   r   sourcer"   r   typerA   r;   r:   r8   rl   rl   c   s    ]FE2Dr:   rl   r&   )ro   c                  :   ^  \ rS rSrU 4S jrU 4S jrS rSrU =r$ )_FeaturesFieldk   c                0   > [         TU ]  " [        40 UD6  g rH   )r0   rS   r+   )r3   kwargsr7   s     r8   rS   _FeaturesField.__init__l   s    ''r:   c                   > [        U[        5      (       a!  UR                  SS5      R                  S5      n[	        S S U 5        5       5      n[
        TU ]  XU5      $ )N ,c              3  6   #    U  H  o(       d  M  Uv   M     g 7frH   r;   ).0fs     r8   	<genexpr>%_FeaturesField.box.<locals>.<genexpr>r   s     ?9!QAA9s   
	c              3  @   #    U  H  oR                  5       v   M     g 7frH   )strip)r{   ffs     r8   r}   r~   r   s     9Sr

Ss   )r*   r+   r,   splittupler0   r1   r2   s       r8   r1   _FeaturesField.boxo   sR    c3++c3'--c2C?9S9??w{8C88r:   c                Z    [        U5      (       a  SR                  U5      $ U=(       d    S$ )Nrx   r;   )r   r   r3   r4   r5   r6   s       r8   rb   _FeaturesField.dumpu   s#    c??88C= 9"r:   r;   )	r=   r>   r?   r@   rS   r1   rb   rA   rB   rC   s   @r8   rr   rr   k   s    (9 r:   rr   c                  >   ^  \ rS rSrSU 4S jjrS rU 4S jrSrU =r$ )ChannelField|   r;   c                ,   > [         TU ]  [        SUS9  g NF)rP   aliases)r0   rS   r   r3   r   r7   s     r8   rS   ChannelField.__init__}   s    5'Br:   c                T    U(       a  [        U5      $ UR                  n[        U5      $ rH   )r+   channelr   s       r8   rb   ChannelField.dump   s"    s8O""Cs8Or:   c                   >  [         TU ]  X5      $ ! [         a*    UR                  nU R	                  X[        U5      5      s $ f = frH   )r0   re   rf   urlunboxr   )r3   r4   r5   r   r7   s       r8   re   ChannelField.__get__   sG    	E7?8;; 	E,,C::hws|DD	Es    1AAr;   )	r=   r>   r?   r@   rS   rb   re   rA   rB   rC   s   @r8   r   r   |   s    CE Er:   r   c                  4   ^  \ rS rSrU 4S jrU 4S jrSrU =r$ )SubdirField   c                    > [         TU ]  SS9  g )NFrn   rR   rT   s    r8   rS   SubdirField.__init__   s    %(r:   c                2  >  [         TU ]  X5      $ ! [         a     UR                  nO! [         a    S n Of = fU(       a'  U R	                  X[        U5      R                  5      s $  UR                  R                  UR                  pTO! [         a    Su  pE Of = fU(       a  U(       d  U R	                  XS5      s $ U(       a)  SU;   a
  SU;   a  SOSnU R	                  XU SU 35      s $ U R	                  X[        R                  5      s $ f = f)NNNnoarchx866432r%   )r0   re   rf   r   r   r   subdirplatformnamearchr   )r3   r4   r5   r   r   r   r7   s         r8   re   SubdirField.__get__   s    	K7?8;; 	Kll! zz(73<;N;NOO,!)!2!2!7!7$! ,!+$,zz(8DDD=#'4<4TDzz(hZq;OPPzz(7>>JJ'	KsZ    
D*D9D9/D+!BDBDB#D.D3 DDr;   r=   r>   r?   r@   rS   re   rA   rB   rC   s   @r8   r   r      s    )K Kr:   r   c                  8   ^  \ rS rSrSU 4S jjrU 4S jrSrU =r$ )FilenameField   r;   c                "   > [         TU ]  SUS9  g r   rR   r   s     r8   rS   FilenameField.__init__   s    %9r:   c                d  >  [         TU ]  X5      $ ! [         a     UR                  n[	        U5      R
                  nU(       d
  [        5       eO8! [         a+    UR                   SUR                   SUR                   3n Of = fU(       d  [        S5      eU R                  XU5      s $ f = f)Nr%   zFilename cannot be empty.)r0   re   rf   r   r   package_filenamer   versionbuildrh   r   )r3   r4   r5   r   fnr7   s        r8   re   FilenameField.__get__   s    	;7?8;; 
	;LllS\22(** ! L a(8(8'98>>:JKL !<==::hr::
	;s2    
B/2AB/2BB/B'B/.B/r   r   rC   s   @r8   r   r      s    :; ;r:   r   c                  4   ^  \ rS rSrU 4S jrU 4S jrSrU =r$ )PackageTypeField   c                0   > [         TU ]  [        SSS SS9  g )NFTrP   nullablerO   rQ   )r0   rS   r   rT   s    r8   rS   PackageTypeField.__init__   s$    ! 	 	
r:   c                $  > [         TU ]  X5      nUc|  UR                  nU(       ai  [        R                  [
        R                  [        R                  [
        R                  0nU[        R                  " U5         nU R                  XU5      nU$ rH   )r0   re   r   r   genericr   NOARCH_GENERICpythonNOARCH_PYTHONrI   r   )r3   r4   r5   r6   
noarch_valtype_mapr7   s         r8   re   PackageTypeField.__get__   sw    goh6;!J&&(B(B%%{'@'@ z00<=jj#>
r:   r;   r   rC   s   @r8   r   r      s    
 r:   r   c                  v    \ rS rSr\" 5       r\" SSSSS9r\" \SSS9r	\
" SSSSS9r\" \5      r\S 5       rSrg)	PathData   FTNr   rP   r   c                    U R                   $ rH   )_pathr3   s    r8   pathPathData.path   s     zzr:   r;   )r=   r>   r?   r@   r   r   prefix_placeholderr   r   	file_moder
   no_linkr   	path_typepropertyr   rA   r;   r:   r8   r   r      s^    ME$tU (UTBItUG (#I r:   r   c                  N    \ rS rSr\" SSS9r\" SSS9r\" \	SSS9r
\" SSS9rSrg)
PathDataV1   FTr   r;   N)r=   r>   r?   r@   r   sha256r   size_in_bytesr   r+   inode_pathssha256_in_prefixrA   r;   r:   r8   r   r      s5    %$7F %$?MC%$?K"EDAr:   r   c                  2    \ rS rSr\" 5       r\" \5      rSr	g)	PathsData   r;   N)
r=   r>   r?   r@   r   paths_versionr   r   pathsrA   r;   r:   r8   r   r      s     NMj!Er:   r   c                    ^  \ rS rSr% Sr\" 5       r \" 5       r \" SS9r \	" 5       r
 \" SS9r \" 5       r \" SS9r \" SSS	SS
9r \" SSS	SS
9r \	" SS	SS9r \" SSS	SS
9r \" SSS	SS
9r \S,S j5       r\\" SSSS9S 5       5       r\S 5       rS rS rS-S.S jjrS r\" SS	S9r\ " \!SS	S9r"\#" \$SS9r%\#" \$SS9r&\'" SSSS9r(\'" SSSS9r)\*" \+SS	SSS9r,\" SS	SSS9r-\" SSS	SS
9r.\" SS	SSS9r/\" SS	SSS9r0\1" 5       r2\S 5       r3\4" 5       r5\S 5       r6\" SS9r7\	" SS9r8S r9S  r:S! r;\S" 5       r<\S# 5       r=\S$ 5       r>S% r?S&\@S''   U 4S( jrA\BS/S) j5       rC\B S0       S1S* jj5       rDS+rEU =rF$ )2PackageRecord   af  Representation of a concrete package archive (tarball or .conda file).

It captures all the relevant information about a given package archive, including its source,
in the following attributes.

Note that there are three subclasses, :class:`SolvedRecord`, :class:`PrefixRecord` and
:class:`PackageCacheRecord`. These capture the same information, but are augmented with
additional information relevant for these sources of packages.

Further note that :class:`PackageRecord` makes use of its :attr:`_pkey`
for comparison and hash generation.
This means that for common operations, like comparisons between :class:`PackageRecord` s
and reference of :class:`PackageRecord` s in mappings, _different_ objects appear identical.
The fields taken into account are marked in the following list of attributes.
The subclasses do not add further attributes to the :attr:`_pkey`.
)build_string)r   )schannel)filenameNFT)rO   rP   r   rQ   rP   r   rQ   c                0    [        U R                  SS5      $ )zTstr: The canonical name of the channel of this package.

Part of the :attr:`_pkey`.
canonical_nameN)getattrr   r   s    r8   channel_namePackageRecord.channel_nameM  s     t||%5t<<r:   z25.9z26.3zUse .channel_name instead)addendumc                    U R                   $ rH   )r   r   s    r8   r   PackageRecord.schannelU  s        r:   c                |    U R                   $ ! [         a    U R                  R                  U R                  U R
                  U R                  U R                  U R                  /=ol         [        R                  (       a  UR                  U R                  5        [        U5      U l         U R                   s $ f = f)ai  tuple: The components of the PackageRecord that are used for comparison and hashing.

The :attr:`_pkey` is a tuple made up of the following fields of the :class:`PackageRecord`.
Two :class:`PackageRecord` s test equal if their respective :attr:`_pkey` s are equal.
The hash of the :class:`PackageRecord` (important for dictionary access) is the hash of the :attr:`_pkey`.

The included fields are:

* :attr:`channel_name`
* :attr:`subdir`
* :attr:`name`
* :attr:`version`
* :attr:`build_number`
* :attr:`build`
* :attr:`fn` only if :ref:`separate_format_cache <auto-config-reference>` is set to true (default: false)
)_PackageRecord__pkeyrf   r   r   r   r   r   build_numberr   r   separate_format_cacheappendr   r   )r3   r   s     r8   _pkeyPackageRecord._pkeyZ  s    $	;; 	++		!!

$ F[ ,,dgg&-DK;;	s    B*B;:B;c                     U R                   $ ! [         a(    [        U R                  5      U l          U R                   $ f = frH   )_hashrf   hashr   r   s    r8   __hash__PackageRecord.__hash__}  s:    	*:: 	*djj)DJzz	*s    $A A c                4    U R                   UR                   :H  $ rH   )r   )r3   others     r8   __eq__PackageRecord.__eq__  s    zzU[[((r:   c                
   SR                  U(       a  U R                  R                  OU R                  R                  U R                  (       a  SU R                  -   OSU R                  U R
                  U R                  5      $ )Nz{}{}::{}-{}-{}/r&   )formatr   r   r   r   r   r   )r3   r   s     r8   dist_strPackageRecord.dist_str  sY    &&+9DLL''t||?P?P#';;S4;;BIILLJJ
 	
r:   c           	        U R                   R                  U R                  U R                  U R                   R                  U R                  5       R                  S5      S   U R                  U R                  U R                  S.$ )N:)base_urlr   r   r   	dist_namer   r   r   )	r   r  r   r   r   r   r   r   r   r   s    r8   dist_fields_dumpPackageRecord.dist_fields_dump  sd    -- -- JJ||((..s3B7II||	
 		
r:   r   r;   )rO   )rP   rO   rQ   r   c                F    U R                   [        R                  " 5       ;   $ rH   )package_typer   unmanageable_package_typesr   s    r8   is_unmanageablePackageRecord.is_unmanageable  s      K$J$J$LLLr:   c                <   SSK Jn  UR                  " U R                  5       Vs0 s H  o"R                  U_M     nnU R
                  =(       d    S H*  nU" U5      nU" X"R                  U;  S9X2R                  '   M,     [        UR                  5       5      $ s  snf )Nr   r   r;   )optional)
match_specr    mergedependsr   
constrainsr   values)r3   r    msresultspecs        r8   combined_dependsPackageRecord.combined_depends  s    )(1(EF(E"''2+(EFOO)r)D4B'ggV6KMF77O * V]]_%%	 Gs   Brn   c           	         U R                   R                   SU R                   SU R                   SU R                   SU R
                   3	$ )Nr   ::z===)r   r   r   r   r   r   r   s    r8   __str__PackageRecord.__str__  sE    ,,--.a}BtyykDLL>YZ[_[e[eZfggr:   c                    [        U R                  U R                  U R                  U R                  U R
                  S9$ )N)r   r   r   r   r   )r    r   r   r   r   r   r   s    r8   to_match_specPackageRecord.to_match_spec  s2    LL;;LL**
 	
r:   c                >    [        U R                  U R                  S9$ )Nr   r   )r    r   r   r   s    r8   to_simple_match_spec"PackageRecord.to_simple_match_spec  s    LL
 	
r:   c                     SU R                   -   $ )Nzglobal:)r   r   s    r8   namekeyPackageRecord.namekey  s    499$$r:   c                R    U R                    SU R                   SU R                   3$ )z'Return package spec: name=version=buildr  )r   r   r   r   s    r8   r  PackageRecord.spec  s'     ))Adll^1TZZL99r:   c                8    U R                    SU R                   3$ )z/Return package spec without build: name=versionr  r"  r   s    r8   spec_no_buildPackageRecord.spec_no_build  s     ))Adll^,,r:   c           	         U R                   R                   SU R                   SU R                   SU R                   SU R                   3	$ )Nr   r  r%   )r   r   r   r   r   r   s    r8   	record_idPackageRecord.record_id  sE    
 ,,##$Adkk]"TYYKqaPTPZPZ|\\r:   zset[str]metadatac                D   > [         TU ]  " U0 UD6  [        5       U l        g rH   )r0   rS   setr0  )r3   argsru   r7   s      r8   rS   PackageRecord.__init__  s    $)&)r:   c                F    U S3nU " USSS[         R                  SU4SUS9	$ )N@0 12345678901234567890123456789012r   )	r   r   r   r   r   md5track_featuresr   r   )r   r   )clsfeature_namepkg_names      r8   featurePackageRecord.feature  s>     #^1%>>2(?

 
	
r:   c                z    U " [         R                  UU=(       d    SU=(       d    SS[        R                  SSUS9	$ )a   
Create a virtual package record.

:param name: The name of the virtual package.
:param version: The version of the virtual package, defaults to "0".
:param build_string: The build string of the virtual package, defaults to "0".
:return: A PackageRecord representing the virtual package.
r7  r6  r8  r   )	r	  r   r   r   r   r   r9  r   r   )r   VIRTUAL_SYSTEMr   r   )r;  r   r   r   s       r8   virtual_packagePackageRecord.virtual_package  s?     $33Ns%,>>2

 
	
r:   )__pkeyr   r0  )return
str | None)T)r   boolrE  r+   )rE  r   r   )r   r+   r   rF  r   rF  rE  r   )Gr=   r>   r?   r@   __doc__r   r   r   r   r   r   r   r   r   r   r   r   r9  legacy_bz2_md5legacy_bz2_sizer   r   r   r   r   r   r   r   r   r   r  r   r   r   r   r   r+   r  r  rr   r:  featuresrE   r   r   preferred_envpython_site_packages_pathlicenselicense_familyr   r	  r  rL   	timestampr  rg   sizer  r  r#  r&  r  r+  r.  __annotations__rS   classmethodr>  rB  rA   rB   rC   s   @r8   r   r      s    " =D
 mG
  12E
  >L =1G5]F
 
}	-B utUC + utUN N"EDRWXO F
utUC +utUF .= = )DE! F !    D)


 5DEDAHR(G3+J#UBPUVNub%PHUT4QVF  tUM !,utU! tUG !tUN $%LM M  I& &$ &D'Dh

 % % : : - -]  
 
 OS

!+
BL
	
 
r:   r   c                  4   ^  \ rS rSrU 4S jrU 4S jrSrU =r$ )Md5Fieldi(  c                "   > [         TU ]  SSS9  g )NFTr   rR   rT   s    r8   rS   Md5Field.__init__)  s    %$7r:   c                   >  [         TU ]  X5      $ ! [         a+  n UR                  5       s S nA$ ! [         a    Uef = fS nAff = frH   )r0   re   rf   _calculate_md5sumr   )r3   r4   r5   er7   s       r8   re   Md5Field.__get__,  sN    	7?8;; 	1133$ 	s!    
A2A?AAr;   r   rC   s   @r8   rU  rU  (  s    8 r:   rU  c                  ~    \ rS rSrSr\" 5       r \" 5       r \" 5       r	 \
S 5       r\
S 5       r\
S 5       rS rSrg)	PackageCacheRecordi6  a^  Representation of a package that has been downloaded or unpacked in the local package cache.

Specialization of :class:`PackageRecord` that adds information for packages that exist in the
local package cache, either as the downloaded package file, or unpacked in its own package dir,
or both.

Note that this class does not add new fields to the :attr:`PackageRecord._pkey` so that a pure
:class:`PackageRecord` object that has the same ``_pkey`` fields as a different
:class:`PackageCacheRecord` object (or, indeed, a :class:`PrefixRecord` object) will be considered
equal and will produce the same hash.
c                2    SSK Jn  U" U R                  5      $ )z.bool: Whether the package file exists locally.r	   isfile)gateways.disk.readr`  package_tarball_full_path)r3   r`  s     r8   
is_fetchedPackageCacheRecord.is_fetchedO  s     	0d4455r:   c                n    SSK JnJn  U R                  nU" U5      =(       a    U" [	        USS5      5      $ )z5bool: Whether the package has been extracted locally.r	   )isdirr`  infoz
index.json)ra  rf  r`  extracted_package_dirr   )r3   rf  r`  epds       r8   is_extractedPackageCacheRecord.is_extractedV  s/     	7((SzEfT#v|%DEEr:   c                ,    [        U R                  5      $ )z,str: The basename of the local package file.)r   rb  r   s    r8   tarball_basename#PackageCacheRecord.tarball_basename^  s     6677r:   c                    [        U SS 5      nU(       a  U$ SSKJn  U" U R                  5      (       a(  SSKJn  U" U R                  S5      n[        U SU5        U$ g )N_memoized_md5r   r_  r	   )compute_sumr9  )r   os.pathr`  rb  ra  rq  setattr)r3   memoized_md5r`  rq  md5sums        r8   rY  $PackageCacheRecord._calculate_md5sumc  sX    t_d;"$00118 !?!?GFD/62M 2r:   r;   N)r=   r>   r?   r@   rH  r   rb  rh  rU  r9  r   rc  rj  rm  rY  rA   r;   r:   r8   r]  r]  6  sn    
 !,.'M3
*C
 6 6 F F 8 8r:   r]  c                  $    \ rS rSrSr\" SS9rSrg)SolvedRecordir  zRepresentation of a package that has been returned as part of a solver solution.

This sits between :class:`PackageRecord` and :class:`PrefixRecord`, simply adding
``requested_spec`` so it can be used in lockfiles without requiring the artifact on
disk.
Frn   r;   N)r=   r>   r?   r@   rH  r   requested_specrA   r;   r:   r8   rx  rx  r  s     !%0Nur:   rx  c                      \ rS rSrSr\" SS9r \" SS9r \" \	SSS9r
 \" \SSSS9r \" \SS9r \" SSS	9r SS
 jrSrg)PrefixRecordi~  aw  Representation of a package that is installed in a local conda environmnet.

Specialization of :class:`PackageRecord` that adds information for packages that are installed
in a local conda environment or prefix.

Note that this class does not add new fields to the :attr:`PackageRecord._pkey` so that a pure
:class:`PackageRecord` object that has the same ``_pkey`` fields as a different
:class:`PrefixRecord` object (or, indeed, a :class:`PackageCacheRecord` object) will be considered
equal and will produce the same hash.

Objects of this class are generally constructed from metadata in json files inside `$prefix/conda-meta`.
Frn   r;   )rO   rP   Tr   r   c                   SnU R                   R                  (       d  U$ U R                   R                   H  nUR                  [        R                  [        R
                  4;   a  M3  [        USS5      b  X#R                  -  nMQ  [        U5      UR                  -  n X$R                  5       R                  -  nM     U$ ! [         a     M  f = f)a.  
Compute the installed size of this package within a prefix.

This sums up the size_in_bytes of all non-softlink paths in paths_data,
and stats the files on disk if size_in_bytes is missing.

:returns: Total size in bytes of all files installed by this package, or
0 if paths_data is missing or empty.
r   r   N)
paths_datar   r   r   r/   	directoryr   r   r   r   statst_sizeOSError)r3   prefix_path
total_size	path_data	file_paths        r8   package_sizePrefixRecord.package_size  s     
$$..I""x'8'8(:L:L&MMy/48D555
[)IOO;Inn.666
 /   s    C
CCN)r  r   rE  ra   )r=   r>   r?   r@   rH  r   rb  rh  r   r+   filesr   r   r}  rl   linkauthr  rA   r;   r:   r8   r{  r{  ~  st     !,U ;O'7Rc26E^ ED%J Z4%0DG 5D%r:   r{  N):rH  
__future__r   rr  r   r   pathlibr   boltons.timeutilsr   r   auxlib.entityr
   r   r   r   r   r   r   r   r   base.contextr   common.compatr   deprecationsr   
exceptionsr   r   r   enumsr   r   r   r   r   r   r  r    r"   rE   rL   rl   
EMPTY_LINKrr   r   r   r   r   r   r   r   r   rU  r]  rx  r{  r;   r:   r8   <module>r     s-   # "  7
 
 
 # & % *  R R !9I 9L) L
%[ %P3=& 3
 _
Y "E? E&K+ K:;K ;(y 2v "B B" "l
M6 l
^	{ 9 9x	v= 	vB< Br:   