+
     h\  c                   s   R t ^ RIt^ RIt^RIHt ^RIHt . RGOt]P                  ! ]	4      t
 ! R R
]4      t ! R R]4      t ! R R]4      t]P                   ! R]P"                  4      tR t]t ! R R]4      tR t ! R R]4      t]P                   ! R4      R3]P                   ! R4      R3]P                   ! R4      R3]P                   ! R4      R3]P                   ! R4      R3]P                   ! R4      R3]P                   ! R4      R 3]P                   ! R!4      R"3]P                   ! R#4      R$3]P                   ! R%4      R&33
t]P                   ! R'4      R3]P                   ! R(4      R3]P                   ! R)4      R 3]P                   ! R4      R 3]P                   ! R*4      R33t]P                   ! R+4      tR, tR- t]P                   ! R.]P"                  4      tR/R0R1R0R2R3R4R0R5R6RRR R/tR7 t ! R8 R]4      t  ! R9 R]4      t!]P                   ! R:]P"                  4      t"R; t#R< t$ ! R= R]4      t% ! R> R	]4      t& ! R? R@]4      t'RA]'! ]]]4      RB]'! ]]!RC 4      RD]'! ]$]&]4      /t(](RA,          ](RE&   RF t)R# )Hz~
Implementation of a flexible versioning scheme providing support for PEP-440,
setuptools-compatible and semantic versioning.
N)string_typesparse_requirementNormalizedVersionNormalizedMatcherLegacyVersionLegacyMatcherSemanticVersionSemanticMatcherUnsupportedVersionErrorc                   s    ] tR t^tRtRtR# )r	   zThis is an unsupported version. N)__name__
__module____qualname____firstlineno____doc____static_attributes__r
       @/usr/lib/python3.14/site-packages/pip/_vendor/distlib/version.pyr	   r	      s    )r   c                   sx   a  ] tR t^t o R tR tR tR tR tR t	R t
R tR	 tR
 tR tR t]R 4       tRtV tR# )Versionc                sd    VP                  4       ;V n        pV P                  V4      ;V n        pR # N)strip_stringparse_parts)selfsparts   && r   __init__ZVersion.__init__   s(    779$q"jjm+er   c                    \        R 4      h)zplease implement in a subclassNotImplementedErrorr   r      &&r   r   ZVersion.parse%   s    !"BCCr   c                s^    \        V 4      \        V4      8w  d   \        R V : RV: 24      hR# zcannot compare z and N)type	TypeErrorr   Zotherr"   r   _check_compatibleZVersion._check_compatible(   s'    :e$$FGG %r   c                sV    V P                  V4       V P                  VP                  8H  # r   r'   r   r&   r"   r   __eq__ZVersion.__eq__,   s#    u%{{ell**r   c                .    V P                  V4      '       * # r   r)   r&   r"   r   __ne__ZVersion.__ne__0       ;;u%%%r   c                sV    V P                  V4       V P                  VP                  8  # r   r(   r&   r"   r   __lt__ZVersion.__lt__3   s#    u%{{U\\))r   c                s`    V P                  V4      ;'       g    V P                  V4      '       * # r   r.   r)   r&   r"   r   __gt__ZVersion.__gt__7   s%    KK&<<$++e*<==r   c                V    V P                  V4      ;'       g    V P                  V4      # r   r/   r&   r"   r   __le__ZVersion.__le__:   "    {{5!77T[[%77r   c                r1   r   )r0   r)   r&   r"   r   __ge__ZVersion.__ge__=   r3   r   c                s,    \        V P                  4      # r   )hashr   r      &r   __hash__ZVersion.__hash__A   s    DKK  r   c                sR    V P                   P                  : R V P                  : R2# )z('z')	__class__r   r   r6   r7   r   __repr__ZVersion.__repr__D   s    !^^44dllCCr   c                    V P                   # r   r   r6   r7   r   __str__ZVersion.__str__G       ||r   c                r   )zPlease implement in subclasses.r   r6   r7   r   is_prereleaseZVersion.is_prereleaseJ   s    !"CDDr   )r   r   N)r   r   r   r   r   r   r'   r)   r,   r.   r0   r2   r4   r8   r;   r>   propertyr@   r   __classdictcell__Z__classdict__   @r   r   r      sZ     DH+&*>88!D E Er   r   c                   s   a  ] tR t^Ot o RtRR RR RR RR	 R
R RR RR RR /tR tR tR t]	R 4       t
R tR tR tR tR tR tRtV tR# )MatcherN<c                s
    W8  # r   r
   vcp   &&&r   <lambda>Matcher.<lambda>T       QUr   >c                s
    W8  # r   r
   rG   rK   r   rL   rM   U   rN   r   <=c                s"    W8H  ;'       g    W8  # r   r
   rG   rK   r   rL   rM   V       afooor   >=c                "    W8H  ;'       g    W8  # r   r
   rG   rK   r   rL   rM   W   rQ   r   ==c                
    W8H  # r   r
   rG   rK   r   rL   rM   X       afr   ===c                rU   r   r
   rG   rK   r   rL   rM   Y   s    qvr   ~=c                rS   r   r
   rG   rK   r   rL   rM   [   rQ   r   !=c                s
    W8g  # r   r
   rG   rK   r   rL   rM   \   rV   r   c                    \        V4      # r   r   r!   r"   r   r   ZMatcher.parse_requirementa   s     ##r   c                sh   V P                   f   \        R4      hVP                  4       ;V n        pV P	                  V4      pV'       g   \        RV,          4      hVP
                  V n        V P
                  P                  4       V n        . pVP                  '       d   VP                   Fr  w  rAVP                  R4      '       d2   VR9  d   \        RV,          4      hVR R RreV P                  V4       MV P                  V4      RreVP                  WEV34       Kt  	  \        V4      V n        R # )	NzPlease specify a version classzNot valid: %rz.*z#'.*' not allowed for %r constraintsTF)rT   rY   i)version_class
ValueErrorr   r   r   namelowerkeyZconstraintsendswithappendtupler   )r   r   ZrZclistZopZvnprefix   &&     r   r   ZMatcher.__init__d   s   %=>>779$q""1%_q011FF	99??$===::d##-( *:<>*? @ @ "#3B&&r* "&!3!3A!6bf-. ' Elr   c                s|   \        V\        4      '       d   V P                  V4      pV P                   F  w  r#pV P                  P                  V4      p\        V\        4      '       d   \        W4      pV'       g)   V: RV P                  P                  : 2p\        V4      hV! WV4      '       d   K   R# 	  R# )z
Check if the provided version matches the constraints.

:param version: The version to match against this instance.
:type version: String or :class:`Version` instance.
z not implemented for FT)

isinstancer    r[   r   
_operatorsgetZgetattrr:   r   r    )r   versionZoperator
constraintrc   ZfZmsgrd   r   matchZMatcher.match   s     g|,,((1G,0KK(H&##H-A!\**D$#+T^^-D-DF)#..W&11 -8 r   c                s    R p\        V P                  4      ^8X  d:   V P                  ^ ,          ^ ,          R9   d   V P                  ^ ,          ^,          pV# )N)rT   rW   )lenr   )r   result   & r   exact_versionZMatcher.exact_version   sC    t{{q T[[^A%6-%G[[^A&Fr   c                s    \        V 4      \        V4      8w  g   V P                  VP                  8w  d   \        R V : RV: 24      hR# r#   )r$   r]   r%   r&   r"   r   r'   ZMatcher._check_compatible   s7    :e$		UZZ(?$FGG )@r   c                s    V P                  V4       V P                  VP                  8H  ;'       d    V P                  VP                  8H  # r   )r'   r_   r   r&   r"   r   r)   ZMatcher.__eq__   s8    u%xx599$DD)DDr   c                r*   r   r+   r&   r"   r   r,   ZMatcher.__ne__   r-   r   c                s`    \        V P                  4      \        V P                  4      ,           # r   )r5   r_   r   r6   r7   r   r8   ZMatcher.__hash__   s    DHH~T[[ 111r   c                sR    V P                   P                  : R V P                  : R2# )Z(Z)r9   r6   r7   r   r;   ZMatcher.__repr__   s    >>22DLLAAr   c                r<   r   r=   r6   r7   r   r>   ZMatcher.__str__   r?   r   )r   r   r_   r]   )r   r   r   r   r[   rf   r   r   rj   rA   rn   r'   r)   r,   r8   r;   r>   r   rB   rC   rD   r   rE   rE   O   s     M 	""--$%-$
J$#:*  HE&2B r   rE   z^v?(\d+!)?(\d+(\.\d+)*)((a|alpha|b|beta|c|rc|pre|preview)(\d+)?)?(\.(post|r|rev)(\d+)?)?([._-]?(dev)(\d+)?)?(\+([a-zA-Z\d]+(\.[a-zA-Z\d]+)?))?$c                 s   V P                  4       p \        P                  V 4      pV'       g   \        R V ,          4      hVP	                  4       p\
        ;QJ d*    . R V^,          P                  R4       4       F  NK  	  5M#! R V^,          P                  R4       4       4      p\        V4      ^8  d   VR,          ^ 8X  d   VRR pK%  V^ ,          '       g   ^ pM\        V^ ,          RR 4      pVR,          pVR,          pVR,          pV^,          pVR8X  d   R	pM2V^,          f   V^ ,          ^ 3pMV^ ,          \        V^,          4      3pVR8X  d   R	pM2V^,          f   V^ ,          ^ 3pMV^ ,          \        V^,          4      3pVR8X  d   R	pM2V^,          f   V^ ,          ^ 3pMV^ ,          \        V^,          4      3pVf   R	pM^. p	VP                  R4       F<  p
V
P                  4       '       d   ^\        V
4      3p
M^ V
3p
V	P                  V
4       K>  	  \        V	4      pV'       g   V'       g   V'       d   R
pMRpV'       g   RpV'       g   RpWCWVWx3# )zNot a valid version: %sc              3   8   "   T F  p\        V4      x  K  	  R # 5ir   int.0rH   rm   r   	<genexpr>Z_pep_440_key.<locals>.<genexpr>   s     6!5AQ!5   .N:i   i   N:i   i	   N:i
   i   N)NNr
   )arw   )Zz)_)final)r   PEP440_VERSION_RErj   r	   groupsrb   splitrk   rq   isdigitra   )r   mr|   ZnumsZepochpreZpostdevZlocalr   Zparts   &          r   _pep_440_keyr      s   		A"A%&?!&CDDXXZF56!56556!566D
d)a-DHMCRy!99F1IcrN#
+C#;D
-C2JE
lq6>a&!)Ca&#c!f+%C|7?7A:D7CQL(D
lq6>a&!)Ca&#c!f+%C}KK$D ||~~3t9~4yLL % eCC3--r   c                   sN   a  ] tR tRt o RtR t]! . RO4      t]R 4       t	Rt
V tR# )r   i   a  A rational version.

Good:
    1.2         # equivalent to "1.2.0"
    1.2.0
    1.2a1
    1.2.3a2
    1.2.3b1
    1.2.3c1
    1.2.3.4
    TODO: fill this out

Bad:
    1           # minimum two numbers
    1.2a        # release level must have a release serial
    1.2.3b
c                s.   \        V4      p\        P                  V4      pVP                  4       p\        ;QJ d1    . R  V^,          P                  R4       4       F  NK  	  5V n        V# ! R  V^,          P                  R4       4       4      V n        V# )c              3   ro   r   rp   rr   rm   r   rt   Z*NormalizedVersion.parse.<locals>.<genexpr>  s     $J5ISVV5Iru   rv   )_normalized_keyr{   rj   r|   rb   r}   _release_clause)r   r   rl   r   r|      &&   r   r   ZNormalizedVersion.parse  sv     #
 ##A&$u$JVAY__S5I$Ju  %$JVAY__S5I$JJr   c                s   a  \         ;QJ d)    V 3R  lS P                   4       F  '       g   K   R# 	  R# ! V 3R  lS P                   4       4      # )c              3   sb   <"   T F$  q'       g   K  V^ ,          SP                   9   x  K&  	  R# 5i)i    N)PREREL_TAGS)rs   Ztr   s   & r   rt   Z2NormalizedVersion.is_prerelease.<locals>.<genexpr>!  s%     F[A+1Q44+++[s   	//TF)Zanyr   r6   s   fr   r@   ZNormalizedVersion.is_prerelease  s4    sFT[[FssFsFsFT[[FFFr   )r   N)rx   brI   rcr   )r   r   r   r   r   r   Zsetr   rA   r@   r   rB   rC   rD   r   r   r      s0     "	 23KG Gr   c                 s    \        V 4      p \        V4      pW8X  d   R # V P                  V4      '       g   R# \        V4      pW,          R8H  # )TFrv   )str
startswithrk   )xZyZnr   r   _match_prefixr   $  sA    AAAAv<<??AA43;r   c                   s~   a  ] tR tRt o ]tRRRRRRRR	R
RRRRRRR/tR tR tR t	R t
R tR tR tR tR tRtV tR# )r   i/  rX   _match_compatiblerF   	_match_ltrO   	_match_gtrP   	_match_lerR   	_match_gerT   	_match_eqrW   _match_arbitraryrY   	_match_nec                s8   V'       d"   R V9  ;'       d    VP                   R,          pM3VP                   R,          '       * ;'       d    VP                   R,          pV'       d5   VP                  P                  R ^4      ^ ,          pV P                  V4      pW3# )+rw   )r   r   r}   r[   )r   rh   ri   rc   Zstrip_localr      &&&&  r   _adjust_localZNormalizedMatcher._adjust_local>  s}    Z/FFGNN24FK )//33JJr8JK%%c1-a0A((+G""r   c                s    V P                  WV4      w  rW8  d   R # VP                  pRP                  V Uu. uF  p\        V4      NK  	  up4      p\	        W4      '       * # u upi Frv   r   r   joinr   r   r   rh   ri   rc   Zrelease_clauseiZpfx   &&&&   r   r   ZNormalizedMatcher._match_ltL  _    "00fM #33hh71A78 ... 8   A#c                s    V P                  WV4      w  rW8:  d   R # VP                  pRP                  V Uu. uF  p\        V4      NK  	  up4      p\	        W4      '       * # u upi r   r   r   r   r   r   ZNormalizedMatcher._match_gtT  r   r   c                s2    V P                  WV4      w  rW8*  # r   r   r   rh   ri   rc      &&&&r   r   ZNormalizedMatcher._match_le\       "00fM$$r   c                s2    V P                  WV4      w  rW8  # r   r   r   r   r   r   ZNormalizedMatcher._match_ge`  r   r   c                s`    V P                  WV4      w  rV'       g   W8H  pV# \        W4      pV# r   r   r   r   rh   ri   rc   rl      &&&& r   r   ZNormalizedMatcher._match_eqd  s:    "00fM+F  #77Fr   c                s0    \        V4      \        V4      8H  # r   )r   r   r   r   r   Z"NormalizedMatcher._match_arbitraryl  s    7|s:..r   c                sj    V P                  WV4      w  rV'       g   W8g  pV# \        W4      '       * pV# r   r   r   r   r   r   ZNormalizedMatcher._match_neo  s=    "00fM+F  'w;;Fr   c                s    V P                  WV4      w  rW8X  d   R # W8  d   R# VP                  p\        V4      ^8  d   VRR pRP                  V Uu. uF  p\	        V4      NK  	  up4      p\        W4      # u upi )TFNrv   rw   )r   r   rk   r   r   r   r   r   r   r   Z#NormalizedMatcher._match_compatiblew  s    "00fM  $33~"+CR0Nhh71A78W** 8s   A;r
   N)r   r   r   r   r   r[   rf   r   r   r   r   r   r   r   r   r   r   rB   rC   rD   r   r   r   /  so     %M 	![[kkk!k	J#//%%/+ +r   z[.+-]$ z^[.](\d)z0.\1z^[.-]z
^\((.*)\)$\1z^v(ersion)?\s*(\d+)z\2z^r(ev)?\s*(\d+)z[.]{2,}rv   z\b(alfa|apha)\balphaz\b(pre-alpha|prealpha)\bz	pre.alphaz	\(beta\)$betaz
^[:~._+-]+z
[,*")([\]]z[~:+_ -]z\.$z(\d+(\.\d+)*)c                s   V P                  4       P                  4       p\         F  w  r#VP                  W14      pK  	  V'       g   Rp\        P                  V4      pV'       g   RpTpEMVP                  4       ^ ,          P                  R4      pV Uu. uF  p\        V4      NK  	  pp\        V4      ^8  d   VP                  ^ 4       K#  \        V4      ^8X  d   WP                  4       R pMQRP                  VR,           Uu. uF  p\        V4      NK  	  up4      WP                  4       R ,           pVR,          pRP                  V Uu. uF  p\        V4      NK  	  up4      pVP                  4       pV'       d!   \         F  w  r#VP                  W64      pK  	  V'       g   TpMRV9   d   RMRpWX,           V,           p\        V4      '       g   RpV# u upi u upi u upi )	zt
Try to suggest a semantic form for a version for which
_suggest_normalized_version couldn't come up with anything.
z0.0.0rv   N:   NNNr   Nr   -r   )r   r^   _REPLACEMENTSsub_NUMERIC_PREFIXrj   r|   r}   rq   rk   ra   Zendr   r   _SUFFIX_REPLACEMENTS	is_semver)	r   rl   Zpatreplr   rc   Zsuffixr   Zseps	   &        r   _suggest_semantic_versionr     s   
 WWY__F"	& #
 	f%AA$$S)"()&Q#a&&)&kAoMM!v;!EEGH%FXXvbz:z!s1vz:;fUUWX>NNFBZF626a3q6623 .ICWWT*F . f_c#&VM/ * ;2s   GG$G)c                s    \        V 4       V #   \         d     Mi ; iT P                  4       pR  F  w  r#TP                  Y#4      pK  	  \        P
                  ! RRT4      p\        P
                  ! RRT4      p\        P
                  ! RRT4      p\        P
                  ! RR	T4      p\        P
                  ! R
RT4      pTP                  R4      '       d
   TR,          p\        P
                  ! RRT4      p\        P
                  ! RRT4      p\        P
                  ! RRT4      p\        P
                  ! RRT4      p\        P
                  ! RRT4      p\        P
                  ! RRT4      p\        P
                  ! RRT4      p\        P
                  ! RRT4      p\        P
                  ! RRT4      p\        P
                  ! RRT4      p\        P
                  ! RRT4      p \        T4       T#   \         d    Rp T# i ; i)!a  Suggest a normalized version close to the given version string.

If you have a version string that isn't rational (i.e. NormalizedVersion
doesn't like it) then you might be able to get an equivalent (or close)
rational version from this function.

This does a number of simple normalizations to the given string, based
on observation of versions currently in use on PyPI. Given a dump of
those version during PyCon 2009, 4287 of them:
- 2312 (53.93%) match NormalizedVersion without change
  with the automatic suggestion
- 3474 (81.04%) match when using this suggestion method

@param s {str} An irrational version string.
@returns A rational version string, or None, if couldn't determine one.
r   zpre$Zpre0zdev$Zdev0z([abc]|rc)[\-\.](\d+)$z\1\2z[\-\.](dev)[\-\.]?r?(\d+)$z.\1\2z[.~]?([abc])\.?r   rH      NNz\b0+(\d+)(?!\d)z(\d+[abc])$z\g<1>0z\.?(dev-r|dev\.r)\.?(\d+)$z.dev\2z-(a|b|c)(\d+)$z[\.\-](dev|devel)$z.dev0z(?![\.\-])dev$z(final|stable)$z\.?(r|-|-r)\.?(\d+)$z.post\2z\.?(dev|git|bzr)\.?(\d+)$z\.?(pre|preview|-c)(\d+)$zc\g<2>zp(\d+)$z.post\1N))z-alpharx   )z-betar   )r   rx   )r   r   )r   rI   )z-finalr   )z-prerI   )z-releaser   )z.releaser   )z-stabler   )r   rv   )ry   rv   )Z r   )z.finalr   )rz   r   )r   r	   r^   Zreplacerer   r   )r   ZrsZorigr      &   r   _suggest_normalized_versionr     s   ""  
B&
 ZZ#& 
"	%B	"	%B
 
)7B	7B 
-x	<B 
"E2	.B 
}}SV
 
"E2	.B
 
	2	.B 
-y"	=B 
!7B	/B 
%x	4B 
!8R	0B 
"B	+B 
'R	8B 
,i	<B 
,i	<B 

J	+B I # Is    -G: :H
Hz([a-z]+|\d+|[\.-])r   rI   Zpreviewr   zfinal-r   r   Z@c                 s>   R  p. pV! V 4       F  pVP                  R4      '       dX   VR8  d)   V'       d!   VR,          R8X  d   VP                  4        K(  V'       d!   VR,          R8X  d   VP                  4        K(  VP                  V4       K  	  \        V4      # )c                 sH   . p\         P                  V P                  4       4       Fg  p\        P	                  W"4      pV'       g   K"  R VR,          u;8:  d   R8:  d   M MVP                  ^4      pM	RV,           pVP                  V4       Ki  	  VP                  R4       V# )Z0:Nr   NZ9**final)_VERSION_PARTr}   r^   _VERSION_REPLACErg   zfillra   )r   rl   rJ      &  r   	get_partsZ_legacy_key.<locals>.get_partsM  s}    $$QWWY/A $$Q*Aq!B%&3&
AaAa  0 	hr   r   r   z*final-Z00000000rw   )r   Zpopra   rb   )r   r   rl   rJ   r   r   _legacy_keyr   L  sx     Fq\<<8|y!8JJLVBZ:5

a  =r   c                   6   a  ] tR tRt o R t]R 4       tRtV tR# )r   if  c                rZ   r   )r   r!   r"   r   r   ZLegacyVersion.parseg  s    1~r   c                s    R pV P                    F@  p\        V\        4      '       g   K  VP                  R4      '       g   K4  VR8  g   K=  Rp V# 	  V# )Fr   r   T)r   re   r    r   )r   rl   r   r   r   r@   ZLegacyVersion.is_prereleasej  sJ    A1l++S0A0Aa(l	  r   r
   N	r   r   r   r   r   rA   r@   r   rB   rC   rD   r   r   r   f  s       r   c                   s|   a  ] tR tRt o ]t]! ]P                  4      tR]R&   ]	P                  ! R4      tR tRtV tR# )r   it  r   rX   z^(\d+(\.\d+)*)c                s   W8  d   R # V P                   P                  \        V4      4      pV'       g   \        P	                  RW4       R# VP                  4       ^ ,          pRV9   d   VP                  R^4      ^ ,          p\        W4      # )FzACannot compute compatible match for version %s  and constraint %sTrv   )
numeric_rerj   r   loggerZwarningr|   Zrsplitr   )r   rh   ri   rc   r   r   r   r   r   ZLegacyMatcher._match_compatible|  st    OO!!#j/2NN 018FHHJqM!8a #AW((r   r
   N)r   r   r   r   r   r[   ZdictrE   rf   r   compiler   r   r   rB   rC   rD   r   r   r   t  s=     !Mg(()J*Jt-.J) )r   zN^(\d+)\.(\d+)\.(\d+)(-[a-z0-9]+(\.[a-z0-9-]+)*)?(\+[a-z0-9]+(\.[a-z0-9-]+)*)?$c                 s,    \         P                  V 4      # r   )
_SEMVER_RErj   )r   r7   r   r   r     s    Ar   c                 s   R  p\        V 4      pV'       g   \        V 4      hVP                  4       pVR,           Uu. uF  p\        V4      NK  	  upw  rVpV! V^,          R4      V! V^,          R4      rWVV3W3# u upi )c                 s    V f   V3pV# V R,          P                  R4      p\        V Uu. uF+  qDP                  4       '       d   VP                  ^4      MTNK-  	  up4      pV# u upi )Nr   rv   )r}   rb   r~   r   )r   Zabsentrl   r   rJ   r   r   
make_tupleZ!_semantic_key.<locals>.make_tuple  sd    9YF 	 bEKK$E eLe))++AGGAJ1<eLMF Ms   1A%r   |r   )r   r	   r|   rq   )
r   r   r   r|   r   ZmajorZminorZpatchr   Zbuilds
   &         r   _semantic_keyr     s~     	!A%a((XXZF+1":6:a3q6:6E%F1Is+Zq	3-G% #,, 7s   A<c                   r   )r   i  c                rZ   r   )r   r!   r"   r   r   ZSemanticVersion.parse  s    Qr   c                s<    V P                   ^,          ^ ,          R8g  # )r   r   )r   r6   r7   r   r@   ZSemanticVersion.is_prerelease  s    {{1~a C''r   r
   Nr   rC   rD   r   r   r     s       ( (r   c                   s    ] tR tRt]tRtR# )r   i  r
   N)r   r   r   r   r   r[   r   r
   r   r   r   r     s    #Mr   c                   sB   a  ] tR tRt o R	R ltR tR tR tR tRt	V t
R# )
VersionSchemei  Nc                s*    Wn         W n        W0n        R # r   r_   matcher	suggester)r   r_   r   r   r   r   r   ZVersionScheme.__init__  s    "r   c                sj     V P                   P                  V4       R pV#   \         d    Rp T# i ; iTF)r   r[   r	   r   r   rl   r   r   is_valid_versionZVersionScheme.is_valid_version  s@    	LL&&q)F  ' 	F	s   ! 22c                sV     V P                  V4       R pV#   \         d    Rp T# i ; ir   )r   r	   r   r   r   is_valid_matcherZVersionScheme.is_valid_matcher  s9    	LLOF  ' 	F	s    ((c                sj    VP                  R4      '       d   VRR pV P                  RV,          4      # )z*
Used for processing some metadata fields
Z,Nzdummy_name (%s)rw   )r`   r   r!   r"   r   is_valid_constraint_listZ&VersionScheme.is_valid_constraint_list  s3    
 ::c??#2A$$%6%:;;r   c                sL    V P                   f   R pV# V P                  V4      pV# r   )r   r   r   r   suggestZVersionScheme.suggest  s-    >>!F  ^^A&Fr   r   r   )r   r   r   r   r   r   r   r   r   r   rB   rC   rD   r   r   r     s#     #
< r   r   Z
normalizedZlegacyc                 s    V# r   r
   r!   r"   r   rL   rL     s    r   ZsemanticZdefaultc                 sV    V \         9  d   \        R V ,          4      h\         V ,          # )zunknown scheme name: %r)_SCHEMESr\   )r]   r7   r   
get_schemer     s%    82T9::D>r   )r   r   r   r   r   r   r	   r   )*r   Zloggingr   Zcompatr    Zutilr   Z__all__Z	getLoggerr   r   r\   r	   Zobjectr   rE   r   ZIr{   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   <module>r      s  
  	   #4
 
		8	$	j 	
.Ef .Ebaf aH JJ  FGIttM 
B.J !G !GHT+ T+p ZZ2ZZg&ZZ"ZZ&ZZ&'/ZZ"#U+ZZ	C ZZ"#W-ZZ+,ZZv& ZZr"ZZ#ZZ
S!ZZ	C ZZ  **-.+\lf 

0"$$7	3s#	3 4G )G )4 ZZ :;=44A

-*(g ($g $$F $P -1B ;=mK8IJm_79	 |, r   