+
     h$A  c            
      s<   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                  sT    ] 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   Zformat   "r    __annotate__r(   /   s     	 	3 	7 	r   c                s    \        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#      &r    parser*   /   s     7r   c                  s    ] 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                  sv    ] 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&   r'   r    r(   _BaseVersion.__annotate__H   s      # r   c                	s,    \        V P                  4      # N)Zhashr-   selfr)   r    __hash__Z_BaseVersion.__hash__H   s    DIIr   c               r!   r"   otherr,   r%   boolr   r&   r'   r    r(   r0   N        & &L &T &r   c                	sl    \        V\        4      '       g   \        # V P                  VP                  8  # r1   
isinstancer,   ZNotImplementedr-   r3   r6      &&r    __lt__Z_BaseVersion.__lt__N   (    %..!!yy5::%%r   c               r!   r5   r   r&   r'   r    r(   r0   T        ' 'L 'T 'r   c                	sl    \        V\        4      '       g   \        # V P                  VP                  8*  # r1   r9   r;   r<   r    __le__Z_BaseVersion.__le__T   (    %..!!yyEJJ&&r   c               r!   r"   r6   Zobjectr%   r7   r   r&   r'   r    r(   r0   Z        ' 'F 't 'r   c                	sl    \        V\        4      '       g   \        # V P                  VP                  8H  # r1   r9   r;   r<   r    __eq__Z_BaseVersion.__eq__Z   rA   r   c               r!   r5   r   r&   r'   r    r(   r0   `   r?   r   c                	sl    \        V\        4      '       g   \        # V P                  VP                  8  # r1   r9   r;   r<   r    __ge__Z_BaseVersion.__ge__`   rA   r   c               r!   r5   r   r&   r'   r    r(   r0   f   r8   r   c                	sl    \        V\        4      '       g   \        # V P                  VP                  8  # r1   r9   r;   r<   r    __gt__Z_BaseVersion.__gt__f   r>   r   c               r!   rB   r   r&   r'   r    r(   r0   l   rC   r   c                	sl    \        V\        4      '       g   \        # V P                  VP                  8g  # r1   r9   r;   r<   r    __ne__Z_BaseVersion.__ne__l   rA   r   r   N)r   r   r   r   r   r4   r=   r@   rD   rE   rF   rG   r   r   r   r    r,   r,   E   s0    
&'''&' 'r   r,   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                  s   ] 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*$CmpKeyr-   c               r!   )r"   r#   r$   r%   ZNoner   r&   r'   r    r(   Version.__annotate__   s     $
 $
 $
 $
r   c                s0   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r1   )r   .0Zi   & r    	<genexpr>Z#Version.__init__.<locals>.<genexpr>   s     L*KQ#a&&*K   r   .Zpre_lZpre_nZpost_lZpost_n1Zpost_n2Zdev_lZdev_nr   )r   r   r   r   r   r   N)_regexZsearchr   r   Zgroupr   tuplesplit_parse_letter_version_parse_local_version_version_cmpkeyr   r   r   r   r   r   r-   )r3   r#   Zmatchs   && r    __init__Z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               r.   r"   r%   r$   r   r&   r'   r    r(   rI      s     & &# &r   c                s    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   r2   r)   r    __repr__ZVersion.__repr__   s     D6%%r   c               r.   rY   r   r&   r'   r    r(   rI      s       r   c                sn   . 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'
!rP   c              3  rJ   r1   r$   rL   xrM   r    rN   "Version.__str__.<locals>.<genexpr>        ;lc!fflrO    c              3  rJ   r1   r\   r]   rM   r    rN   r_      s      :AQrO   z.postz.dev+)r   appendjoinr   r   r   r   r   r3   ZpartsrM   r    __str__ZVersion.__str__   s      ::?LLDJJ<q)* 	SXX;dll;;< 88LL : ::; 99 LL5,- 88LL4z*+ ::!LL1TZZL)*wwu~r   c               r.   r/   r   r&   r'   r    r(   rI     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
)rV   r   r2   r)   r    r   ZVersion.epoch  s     }}"""r   c               r.   r"   r%   r   r   r&   r'   r    r(   rI     s     % % %r   c                rg   )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.
)rV   r   r2   r)   r    r   ZVersion.release  s     }}$$$r   c               r.   )r"   r%   r   r   r&   r'   r    r(   rI   '  s     ! !+ !r   c                rg   )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)
)rV   r   r2   r)   r    r   ZVersion.pre&  s     }}   r   c               r.   r"   r%   z
int | Noner   r&   r'   r    r(   rI   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)rV   r   r2   r)   r    r   ZVersion.post5  s-     )-(:(:(:t}}!!!$DDr   c               r.   ri   r   r&   r'   r    r(   rI   A  s     C CZ Cr   c                rj   )zmThe development number of the version.

>>> print(Version("1.2.3").dev)
None
>>> Version("1.2.3.dev1").dev
1
N)rV   r   r2   r)   r    r   ZVersion.dev@  s-     (,}}'8'8'8t}}  #BdBr   c               r.   )r"   r%   
str | Noner   r&   r'   r    r(   rI   L  s      z r   c                s    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'
rP   c              3  rJ   r1   r\   r]   rM   r    rN   Z Version.local.<locals>.<genexpr>U  s     @,?qCFF,?rO   N)rV   r   rd   r2   r)   r    r   ZVersion.localK  s6     ==88@DMM,?,?@@@r   c               r.   rY   r   r&   r'   r    r(   rI   Z  s     
* 
* 
*r   c                sF    \        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'
rb   )r$   rS   r2   r)   r    publicZVersion.publicY  s     4ysA&q))r   c               r.   rY   r   r&   r'   r    r(   rI   g  s      c r   c                s    . 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[   rP   c              3  rJ   r1   r\   r]   rM   r    rN   Z'Version.base_version.<locals>.<genexpr>{  r`   rO   ra   )r   rc   rd   r   re   rM   r    base_versionZVersion.base_versionf  s\      ::?LLDJJ<q)* 	SXX;dll;;<wwu~r   c               r.   r"   r%   r7   r   r&   r'   r    r(   rI     s     < <t <r   c                sJ    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   r2   r)   r    is_prereleaseZVersion.is_prerelease  s$     xxt#;;txxt';;r   c               r.   rn   r   r&   r'   r    r(   rI     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   r2   r)   r    is_postreleaseZVersion.is_postrelease  s     yy$$r   c               r.   rn   r   r&   r'   r    r(   rI     s     $ $t $r   c                rp   )zWhether this version is a development release.

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

>>> Version("1.2.3").major
1
Zlenr   r2   r)   r    majorZVersion.major  s'     #&dll"3q"8t||A?a?r   c               r.   r/   r   r&   r'   r    r(   rI          @ @s @r   c                s`    \        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
rs   r2   r)   r    minorZVersion.minor  '     #&dll"3q"8t||A?a?r   c               r.   r/   r   r&   r'   r    r(   rI     ru   r   c                s`    \        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
rs   r2   r)   r    microZVersion.micro  rw   r   )r-   rV   N)r   r   r   r   r+   recompileVERSION_PATTERNZVERBOSEZ
IGNORECASErQ   r   rX   rZ   rf   propertyr   r   r   r   r   r   rl   rm   ro   rq   rr   rt   rv   rx   r   r   r   r    r   r      sh   . ZZ/1G;RZZ"--=WXF
L$
L&B # # % % ! ! E E C C   
* 
*  0 < <  % % $ $ @ @ @ @ @ @r   c                  s8   a  ] tR tRt]R V 3R ll4       tRtV ;t# )_TrimmedReleasei  c               r.   rh   r   r&   r'   r    r(   Z_TrimmedRelease.__annotate__  s     ' ' 'r   c                sn   < \         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  s>   "   T F  w  rV'       g   K  Vx  K  	  R # 5ir1   r   )rL   ZindexZvals   &  r    rN   Z*_TrimmedRelease.release.<locals>.<genexpr>  s     BNjecEENs   
)ZdefaultN)Zsuperr   Z	enumerateZmax)r3   ZrelZnonzerosZlast_nonzero	__class__s   &   r    r   Z_TrimmedRelease.release  s;     goBIcNB8Q/%\A%&&r   r   )r   r   r   r   r|   r   r   Z__classcell__)r~   s   @r    r}   r}     s    ' 'r   r}   c               s$    V ^8  d   QhRRRRRR/# )r"   letterrk   numberz str | bytes | SupportsInt | Noner%   r   r   r&   r'   r    r(   r(     s$     " "" @""r   c                s    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 # )	NZalphaZaZbetaZbZrcr   )Zcr   Zpreview)ZrevZr)lowerr   )r   r   r<   r    rT   rT     s      >F 
 WFvF..F|#Fs6{"": s6{""r   z[\._-]c               r!   )r"   r   rk   r%   r   r   r&   r'   r    r(   r(     s     	 	
 	/? 	r   c                s    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  s   "   T F6  pVP                  4       '       g   VP                  4       M
\        V4      x  K8  	  R # 5ir1   )Zisdigitr   r   )rL   ZpartrM   r    rN   Z'_parse_local_version.<locals>.<genexpr>  s0      
> !%DJJLCI=>s
   A #A )rR   _local_version_separatorsrS   )r   r)   r    rU   rU     sW     u 
177>
u 	
u 
177>
 
 	
 r   c               s4    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%   rH   r   r&   r'   r    r(   r(     sN     ;6 ;6;6;6 
 ;6 !	;6
 
 ;6 ;6 ;6r   c                sf   \        \        \        \        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                s    V ^ 8H  # )i    r   )r^   r)   r    Z<lambda>Z_cmpkey.<locals>.<lambda>  s    AFr   c              3  sf   "   T F'  p\        V\        4      '       d   VR 3M\        V3x  K)  	  R# 5i)ra   N)r:   r   r	   rK   rM   r    rN   Z_cmpkey.<locals>.<genexpr>B  s.      
NSz!S))QG0@!/DDes   /1)rR   ZreversedZlist	itertoolsZ	dropwhiler	   r   )r   r   r   r   r   r   Z_releaseZ_preZ_postZ_devZ_locals   &&&&&&     r    rW   rW     s     i))*:HW<MNOPH {t|"2 
 |#3  {"* }/  
NS
 
NS
 
 D55r   )r{   r   r   r*   )(r+   Z
__future__r    r   ry   Ztypingr   r   r   r   r   r   Z_structuresr   r   r	   r
   Z__all__r   r$   Z	LocalTypeZCmpPrePostDevTypeZCmpLocalTyperH   r7   ZVersionComparisonMethodr   r*   Z
ValueErrorr   r,   Z_VERSION_PATTERNr{   r   r}   rT   rz   r   rU   rW   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   