+
    UBi$A              
      <   R t ^ RIHt ^ RIt^ RIt^ RIHtHtHtH	t	H
t
Ht ^RIHtHtHtHt . ROt]
]]]3,          R3,          t]]]]
]]3,          3,          t]]]
]]
]]3,          ]
]]]]3,          3,          3,          R3,          3,          t]
]]
]R3,          ]]]]3,          t]]].]3,          t ! R R	]4      tR
 R lt ! R R]4      t ! R R4      tRt]t   ! R R]4      t! ! R R]!4      t"R R lt#]PH                  ! R4      t%R R lt&R R lt'R# )zB
.. testsetup::

    from packaging.version import parse, Version
)annotationsN)AnyCallable
NamedTupleSupportsIntTupleUnion)InfinityInfinityTypeNegativeInfinityNegativeInfinityTypeInvalidVersionVersion.c                  T    ] tR t^&t$ R]R&   R]R&   R]R&   R]R&   R]R&   R	]R
&   RtR# )_Versionintepochtuple[int, ...]releasetuple[str, int] | NonedevprepostLocalType | Nonelocal N)__name__
__module____qualname____firstlineno____annotations____static_attributes__r       6/usr/lib/python3.14/site-packages/packaging/version.pyr   r   &   s%    J		
  r"   r   c                    V ^8  d   QhRRRR/# )   versionstrreturnr   r   )formats   "r#   __annotate__r*   /   s     	 	3 	7 	r"   c                    \        V 4      # )zParse the given version string.

>>> parse('1.0.dev1')
<Version('1.0.dev1')>

:param version: The version string to parse.
:raises InvalidVersion: When the version string is not a valid version.
)r   )r&   s   &r#   parser,   /   s     7r"   c                      ] tR t^;tRtRtR# )r   zRaised when a version string is not a valid version.

>>> Version("invalid")
Traceback (most recent call last):
    ...
packaging.version.InvalidVersion: Invalid version: 'invalid'
r   N)r   r   r   r   __doc__r!   r   r"   r#   r   r   ;   s    r"   c                  v    ] tR t^Et$ R]R&   R R ltR R ltR R ltR	 R
 ltR R lt	R R lt
R R ltRtR# )_BaseVersionztuple[Any, ...]_keyc                   V ^8  d   QhRR/# r%   r(   r   r   )r)   s   "r#   r*   _BaseVersion.__annotate__H   s      # r"   c                	,    \        V P                  4      # N)hashr1   selfs   &r#   __hash___BaseVersion.__hash__H   s    DIIr"   c                    V ^8  d   QhRRRR/# r%   otherr0   r(   boolr   )r)   s   "r#   r*   r4   N        & &L &T &r"   c                	l    \        V\        4      '       g   \        # V P                  VP                  8  # r6   
isinstancer0   NotImplementedr1   r9   r>   s   &&r#   __lt___BaseVersion.__lt__N   (    %..!!yy5::%%r"   c                    V ^8  d   QhRRRR/# r=   r   )r)   s   "r#   r*   r4   T        ' 'L 'T 'r"   c                	l    \        V\        4      '       g   \        # V P                  VP                  8*  # r6   rB   rE   s   &&r#   __le___BaseVersion.__le__T   (    %..!!yyEJJ&&r"   c                    V ^8  d   QhRRRR/# r%   r>   objectr(   r?   r   )r)   s   "r#   r*   r4   Z        ' 'F 't 'r"   c                	l    \        V\        4      '       g   \        # V P                  VP                  8H  # r6   rB   rE   s   &&r#   __eq___BaseVersion.__eq__Z   rN   r"   c                    V ^8  d   QhRRRR/# r=   r   )r)   s   "r#   r*   r4   `   rJ   r"   c                	l    \        V\        4      '       g   \        # V P                  VP                  8  # r6   rB   rE   s   &&r#   __ge___BaseVersion.__ge__`   rN   r"   c                    V ^8  d   QhRRRR/# r=   r   )r)   s   "r#   r*   r4   f   r@   r"   c                	l    \        V\        4      '       g   \        # V P                  VP                  8  # r6   rB   rE   s   &&r#   __gt___BaseVersion.__gt__f   rH   r"   c                    V ^8  d   QhRRRR/# rP   r   )r)   s   "r#   r*   r4   l   rR   r"   c                	l    \        V\        4      '       g   \        # V P                  VP                  8g  # r6   rB   rE   s   &&r#   __ne___BaseVersion.__ne__l   rN   r"   r   N)r   r   r   r   r    r:   rF   rL   rT   rX   r\   r`   r!   r   r"   r#   r0   r0   E   s0    
&'''&' 'r"   r0   a  
    v?
    (?:
        (?:(?P<epoch>[0-9]+)!)?                           # epoch
        (?P<release>[0-9]+(?:\.[0-9]+)*)                  # release segment
        (?P<pre>                                          # pre-release
            [-_\.]?
            (?P<pre_l>alpha|a|beta|b|preview|pre|c|rc)
            [-_\.]?
            (?P<pre_n>[0-9]+)?
        )?
        (?P<post>                                         # post release
            (?:-(?P<post_n1>[0-9]+))
            |
            (?:
                [-_\.]?
                (?P<post_l>post|rev|r)
                [-_\.]?
                (?P<post_n2>[0-9]+)?
            )
        )?
        (?P<dev>                                          # dev release
            [-_\.]?
            (?P<dev_l>dev)
            [-_\.]?
            (?P<dev_n>[0-9]+)?
        )?
    )
    (?:\+(?P<local>[a-z0-9]+(?:[-_\.][a-z0-9]+)*))?       # local version
c                     ] tR t^t$ Rt]P                  ! R],           R,           ]P                  ]P                  ,          4      t
R]R&   R R ltR R	 ltR
 R lt]R R l4       t]R R l4       t]R R l4       t]R R l4       t]R R l4       t]R R l4       t]R R l4       t]R R l4       t]R R l4       t]R R l4       t]R  R! l4       t]R" R# l4       t]R$ R% l4       t]R& R' l4       tR(tR)# )*r   am  This class abstracts handling of a project's versions.

A :class:`Version` instance is comparison aware and can be compared and
sorted using the standard Python interfaces.

>>> v1 = Version("1.0a5")
>>> v2 = Version("1.0")
>>> v1
<Version('1.0a5')>
>>> v2
<Version('1.0')>
>>> v1 < v2
True
>>> v1 == v2
False
>>> v1 > v2
False
>>> v1 >= v2
False
>>> v1 <= v2
True
z^\s*z\s*$CmpKeyr1   c                    V ^8  d   QhRRRR/# )r%   r&   r'   r(   Noner   )r)   s   "r#   r*   Version.__annotate__   s     $
 $
 $
 $
r"   c                0   V P                   P                  V4      pV'       g   \        RV: 24      h\        VP	                  R4      '       d   \        VP	                  R4      4      M^ \        ;QJ d2    . R VP	                  R4      P                  R4       4       F  NK  	  5M+! R VP	                  R4      P                  R4       4       4      \        VP	                  R4      VP	                  R4      4      \        VP	                  R4      VP	                  R	4      ;'       g    VP	                  R
4      4      \        VP	                  R4      VP	                  R4      4      \        VP	                  R4      4      R7      V n
        \        V P                  P                  V P                  P                  V P                  P                  V P                  P                  V P                  P                   V P                  P"                  4      V n        R# )a  Initialize a Version object.

:param version:
    The string representation of a version which will be parsed and normalized
    before use.
:raises InvalidVersion:
    If the ``version`` does not conform to PEP 440 in any way then this
    exception will be raised.
zInvalid version: r   c              3  8   "   T F  p\        V4      x  K  	  R # 5ir6   )r   .0is   & r#   	<genexpr>#Version.__init__.<locals>.<genexpr>   s     L*KQ#a&&*K   r   .pre_lpre_npost_lpost_n1post_n2dev_ldev_nr   )r   r   r   r   r   r   N)_regexsearchr   r   groupr   tuplesplit_parse_letter_version_parse_local_version_version_cmpkeyr   r   r   r   r   r   r1   )r9   r&   matchs   && r#   __init__Version.__init__   sx    ""7+ #4WK!@AA !/4{{7/C/C#ekk'*+EL%++i*@*F*Fs*KLEEL%++i*@*F*Fs*KLL%ekk'&:EKK<PQ&H%u{{9'='W'WYAW &ekk'&:EKK<PQ&u{{7';<	
 MMMM!!MMMMMMMM
	r"   c                   V ^8  d   QhRR/# r%   r(   r'   r   )r)   s   "r#   r*   rf      s     & &# &r"   c                    RV  R2# )zhA representation of the Version that shows all internal state.

>>> Version('1.0.0')
<Version('1.0.0')>
z
<Version('z')>r   r8   s   &r#   __repr__Version.__repr__   s     D6%%r"   c                   V ^8  d   QhRR/# r   r   )r)   s   "r#   r*   rf      s       r"   c                n   . pV P                   ^ 8w  d   VP                  V P                    R24       VP                  RP                  R V P                   4       4      4       V P                  e2   VP                  RP                  R V P                   4       4      4       V P
                  e   VP                  RV P
                   24       V P                  e   VP                  RV P                   24       V P                  e   VP                  RV P                   24       RP                  V4      # )	zeA string representation of the version that can be round-tripped.

>>> str(Version("1.0a5"))
'1.0a5'
!ro   c              3  8   "   T F  p\        V4      x  K  	  R # 5ir6   r'   rj   xs   & r#   rl   "Version.__str__.<locals>.<genexpr>        ;lc!fflrn    c              3  8   "   T F  p\        V4      x  K  	  R # 5ir6   r   r   s   & r#   rl   r      s      :AQrn   z.postz.dev+)r   appendjoinr   r   r   r   r   r9   partss   & r#   __str__Version.__str__   s      ::?LLDJJ<q)* 	SXX;dll;;< 88LL : ::; 99 LL5,- 88LL4z*+ ::!LL1TZZL)*wwu~r"   c                   V ^8  d   QhRR/# r3   r   )r)   s   "r#   r*   rf     s     # #s #r"   c                .    V P                   P                  # )zWThe epoch of the version.

>>> Version("2.0.0").epoch
0
>>> Version("1!2.0.0").epoch
1
)r~   r   r8   s   &r#   r   Version.epoch  s     }}"""r"   c                   V ^8  d   QhRR/# r%   r(   r   r   )r)   s   "r#   r*   rf     s     % % %r"   c                .    V P                   P                  # )a  The components of the "release" segment of the version.

>>> Version("1.2.3").release
(1, 2, 3)
>>> Version("2.0.0").release
(2, 0, 0)
>>> Version("1!2.0.0.post0").release
(2, 0, 0)

Includes trailing zeroes but not the epoch or any pre-release / development /
post-release suffixes.
)r~   r   r8   s   &r#   r   Version.release  s     }}$$$r"   c                   V ^8  d   QhRR/# )r%   r(   r   r   )r)   s   "r#   r*   rf   '  s     ! !+ !r"   c                .    V P                   P                  # )zThe pre-release segment of the version.

>>> print(Version("1.2.3").pre)
None
>>> Version("1.2.3a1").pre
('a', 1)
>>> Version("1.2.3b1").pre
('b', 1)
>>> Version("1.2.3rc1").pre
('rc', 1)
)r~   r   r8   s   &r#   r   Version.pre&  s     }}   r"   c                   V ^8  d   QhRR/# r%   r(   z
int | Noner   )r)   s   "r#   r*   rf   6  s     E Ej Er"   c                x    V P                   P                  '       d   V P                   P                  ^,          # R# )zqThe post-release number of the version.

>>> print(Version("1.2.3").post)
None
>>> Version("1.2.3.post1").post
1
N)r~   r   r8   s   &r#   r   Version.post5  s-     )-(:(:(:t}}!!!$DDr"   c                   V ^8  d   QhRR/# r   r   )r)   s   "r#   r*   rf   A  s     C CZ Cr"   c                x    V P                   P                  '       d   V P                   P                  ^,          # R# )zmThe development number of the version.

>>> print(Version("1.2.3").dev)
None
>>> Version("1.2.3.dev1").dev
1
N)r~   r   r8   s   &r#   r   Version.dev@  s-     (,}}'8'8'8t}}  #BdBr"   c                   V ^8  d   QhRR/# )r%   r(   
str | Noner   )r)   s   "r#   r*   rf   L  s      z r"   c                    V P                   P                  '       d-   RP                  R V P                   P                   4       4      # R# )zwThe local version segment of the version.

>>> print(Version("1.2.3").local)
None
>>> Version("1.2.3+abc").local
'abc'
ro   c              3  8   "   T F  p\        V4      x  K  	  R # 5ir6   r   r   s   & r#   rl    Version.local.<locals>.<genexpr>U  s     @,?qCFF,?rn   N)r~   r   r   r8   s   &r#   r   Version.localK  s6     ==88@DMM,?,?@@@r"   c                   V ^8  d   QhRR/# r   r   )r)   s   "r#   r*   rf   Z  s     
* 
* 
*r"   c                F    \        V 4      P                  R^4      ^ ,          # )zThe public portion of the version.

>>> Version("1.2.3").public
'1.2.3'
>>> Version("1.2.3+abc").public
'1.2.3'
>>> Version("1!1.2.3dev1+abc").public
'1!1.2.3.dev1'
r   )r'   r{   r8   s   &r#   publicVersion.publicY  s     4ysA&q))r"   c                   V ^8  d   QhRR/# r   r   )r)   s   "r#   r*   rf   g  s      c r"   c                    . pV P                   ^ 8w  d   VP                  V P                    R24       VP                  RP                  R V P                   4       4      4       RP                  V4      # )a  The "base version" of the version.

>>> Version("1.2.3").base_version
'1.2.3'
>>> Version("1.2.3+abc").base_version
'1.2.3'
>>> Version("1!1.2.3dev1+abc").base_version
'1!1.2.3'

The "base version" is the public version of the project without any pre or post
release markers.
r   ro   c              3  8   "   T F  p\        V4      x  K  	  R # 5ir6   r   r   s   & r#   rl   'Version.base_version.<locals>.<genexpr>{  r   rn   r   )r   r   r   r   r   s   & r#   base_versionVersion.base_versionf  s\      ::?LLDJJ<q)* 	SXX;dll;;<wwu~r"   c                   V ^8  d   QhRR/# r%   r(   r?   r   )r)   s   "r#   r*   rf     s     < <t <r"   c                J    V P                   RJ;'       g    V P                  RJ# )zWhether this version is a pre-release.

>>> Version("1.2.3").is_prerelease
False
>>> Version("1.2.3a1").is_prerelease
True
>>> Version("1.2.3b1").is_prerelease
True
>>> Version("1.2.3rc1").is_prerelease
True
>>> Version("1.2.3dev1").is_prerelease
True
N)r   r   r8   s   &r#   is_prereleaseVersion.is_prerelease  s$     xxt#;;txxt';;r"   c                   V ^8  d   QhRR/# r   r   )r)   s   "r#   r*   rf     s     % % %r"   c                    V P                   RJ# )zWhether this version is a post-release.

>>> Version("1.2.3").is_postrelease
False
>>> Version("1.2.3.post1").is_postrelease
True
N)r   r8   s   &r#   is_postreleaseVersion.is_postrelease  s     yy$$r"   c                   V ^8  d   QhRR/# r   r   )r)   s   "r#   r*   rf     s     $ $t $r"   c                    V P                   RJ# )zWhether this version is a development release.

>>> Version("1.2.3").is_devrelease
False
>>> Version("1.2.3.dev1").is_devrelease
True
N)r   r8   s   &r#   is_devreleaseVersion.is_devrelease  s     xxt##r"   c                   V ^8  d   QhRR/# r3   r   )r)   s   "r#   r*   rf     s     @ @s @r"   c                `    \        V P                  4      ^8  d   V P                  ^ ,          # ^ # )zYThe first item of :attr:`release` or ``0`` if unavailable.

>>> Version("1.2.3").major
1
lenr   r8   s   &r#   majorVersion.major  s'     #&dll"3q"8t||A?a?r"   c                   V ^8  d   QhRR/# r3   r   )r)   s   "r#   r*   rf          @ @s @r"   c                `    \        V P                  4      ^8  d   V P                  ^,          # ^ # )zsThe second item of :attr:`release` or ``0`` if unavailable.

>>> Version("1.2.3").minor
2
>>> Version("1").minor
0
r   r8   s   &r#   minorVersion.minor  '     #&dll"3q"8t||A?a?r"   c                   V ^8  d   QhRR/# r3   r   )r)   s   "r#   r*   rf     r   r"   c                `    \        V P                  4      ^8  d   V P                  ^,          # ^ # )zrThe third item of :attr:`release` or ``0`` if unavailable.

>>> Version("1.2.3").micro
3
>>> Version("1").micro
0
r   r8   s   &r#   microVersion.micro  r   r"   )r1   r~   N)r   r   r   r   r.   recompileVERSION_PATTERNVERBOSE
IGNORECASErw   r    r   r   r   propertyr   r   r   r   r   r   r   r   r   r   r   r   r   r   r!   r   r"   r#   r   r      sh   . ZZ/1G;RZZ"--=WXF
L$
L&B # # % % ! ! E E C C   
* 
*  0 < <  % % $ $ @ @ @ @ @ @r"   c                  8   a  ] tR tRt]R V 3R ll4       tRtV ;t# )_TrimmedReleasei  c                   V ^8  d   QhRR/# r   r   )r)   s   "r#   r*   _TrimmedRelease.__annotate__  s     ' ' 'r"   c                n   < \         SV `  pR \        V4       4       p\        V^ R7      pVRV^,            # )z
Release segment without any trailing zeros.

>>> _TrimmedRelease('1.0.0').release
(1,)
>>> _TrimmedRelease('0.0').release
(0,)
c              3  >   "   T F  w  rV'       g   K  Vx  K  	  R # 5ir6   r   )rj   indexvals   &  r#   rl   *_TrimmedRelease.release.<locals>.<genexpr>  s     BNjecEENs   
)defaultN)superr   	enumeratemax)r9   relnonzeroslast_nonzero	__class__s   &   r#   r   _TrimmedRelease.release  s;     goBIcNB8Q/%\A%&&r"   r   )r   r   r   r   r   r   r!   __classcell__)r   s   @r#   r   r     s    ' 'r"   r   c               $    V ^8  d   QhRRRRRR/# )r%   letterr   numberz str | bytes | SupportsInt | Noner(   r   r   )r)   s   "r#   r*   r*     s$     " "" @""r"   c                    V '       dK   Vf   ^ pV P                  4       p V R8X  d   Rp MV R8X  d   Rp MV R9   d   Rp M	V R9   d   Rp V \        V4      3# V '       d   Q hV'       d   Rp V \        V4      3# R # )	Nalphaabetabrcr   )cr   preview)revr)lowerr   )r   r   s   &&r#   r|   r|     s      >F 
 WFvF..F|#Fs6{"": s6{""r"   z[\._-]c                    V ^8  d   QhRRRR/# )r%   r   r   r(   r   r   )r)   s   "r#   r*   r*     s     	 	
 	/? 	r"   c                    V eS   \         ;QJ d'    . R \        P                  V 4       4       F  NK  	  5# ! R \        P                  V 4       4       4      # R# )zJ
Takes a string like abc.1.twelve and turns it into ("abc", 1, "twelve").
Nc              3     "   T F6  pVP                  4       '       g   VP                  4       M
\        V4      x  K8  	  R # 5ir6   )isdigitr   r   )rj   parts   & r#   rl   '_parse_local_version.<locals>.<genexpr>  s0      
> !%DJJLCI=>s
   A #A )rz   _local_version_separatorsr{   )r   s   &r#   r}   r}     sW     u 
177>
u 	
u 
177>
 
 	
 r"   c               4    V ^8  d   QhRRRRRRRRRRR	R
RR/# )r%   r   r   r   r   r   r   r   r   r   r   r(   rc   r   )r)   s   "r#   r*   r*     sN     ;6 ;6;6;6 
 ;6 !	;6
 
 ;6 ;6 ;6r"   c                f   \        \        \        \        P                  ! R  \        V4      4      4      4      4      pVf   Vf   Ve   \
        pMVf   \        pMTpVf   \
        pMTpVf   \        p	MTp	Vf   \
        p
M,\         ;QJ d    . R V 4       F  NK  	  5M! R V 4       4      p
WWxW3# )c                    V ^ 8H  # )    r   )r   s   &r#   <lambda>_cmpkey.<locals>.<lambda>  s    AFr"   c              3  f   "   T F'  p\        V\        4      '       d   VR 3M\        V3x  K)  	  R# 5i)r   N)rC   r   r   ri   s   & r#   rl   _cmpkey.<locals>.<genexpr>B  s.      
NSz!S))QG0@!/DDes   /1)rz   reversedlist	itertools	dropwhiler   r	   )r   r   r   r   r   r   _release_pre_post_dev_locals   &&&&&&     r#   r   r     s     i))*:HW<MNOPH {t|"2 
 |#3  {"* }/  
NS
 
NS
 
 D55r"   )r   r   r   r,   )(r.   
__future__r   r  r   typingr   r   r   r   r   r   _structuresr	   r
   r   r   __all__r   r'   	LocalTypeCmpPrePostDevTypeCmpLocalTyperc   r?   VersionComparisonMethodr   r,   
ValueErrorr   r0   _VERSION_PATTERNr   r   r   r|   r   r  r}   r   r   r"   r#   <module>r!     sZ   #  	 G G W W
C%S/3&'	,(<eCHoMN 	%c3h';U38_'L!MM
NPS
STV 
	#s(O
 #FF#3T#9: z 	Z +' +'` > #	b@l b@J	'g '""J JJy1 	;6r"   