
(h{                 @   s   d  d l  m Z m Z m Z d  d l Z d d l m Z m Z d d l m	 Z	 m
 Z
 e r d  d l m Z m Z e d e  Z n e Z e j d  Z d	 d
   Z d d   Z d S)    )absolute_importdivisionprint_functionN   )TYPE_CHECKINGcast)InvalidVersionVersion)NewTypeUnionNormalizedNamez[-_.]+c             C   s%   t  j d |   j   } t d |  S)N-r   )_canonicalize_regexsublowerr   )namevalue r   :/tmp/pip-build-kmztzv_d/pip/pip/_vendor/packaging/utils.pycanonicalize_name   s    r   c             C   sU  t  |  t  s8 y t |   }  Wn t k
 r7 |  SYn Xg  } |  j d k rf | j d j |  j   | j t j d d d j d d   |  j	 D    |  j
 d k	 r | j d j d	 d   |  j
 D   |  j d k	 r | j d
 j |  j   |  j d k	 r | j d j |  j   |  j d k	 rH| j d j |  j   d j |  S)z
    This is very similar to Version.__str__, but has one subtle difference
    with the way it handles the release segment.
    r   z{0}!z(\.0)+$ .c             s   s   |  ] } t  |  Vq d  S)N)str).0xr   r   r   	<genexpr>1   s    z'canonicalize_version.<locals>.<genexpr>Nc             s   s   |  ] } t  |  Vq d  S)N)r   )r   r   r   r   r   r   5   s    z.post{0}z.dev{0}z+{0})
isinstancer	   r   epochappendformatrer   joinreleaseprepostdevlocal)versionpartsr   r   r   canonicalize_version   s$    	5&r)   )
__future__r   r   r   r    Z_typingr   r   r'   r   r	   Ztypingr
   r   r   r   compiler   r   r)   r   r   r   r   <module>   s   