U
    -e                     @   sp   d Z ddlZddlZddlmZ ddlmZ ddlmZmZ e	dZ
eeG dd dZd	d
 Zdd ZdS )zVersion utils.    N)	dataclass)total_ordering)OptionalUnionz0^(?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)$c                   @   s   e Zd ZU dZeed< dZee ed< dZee	ee
f  ed< dZee	ee
f  ed< dZee	ee
f  ed< dd	 Zd
d Zedd Zdd Zdd Zdd Zdd Zedd ZedddZdS )Versiona[  Dataset version `MAJOR.MINOR.PATCH`.

    Args:
        version_str (`str`):
            The dataset version.
        description (`str`):
            A description of what is new in this version.
        major (`str`):
        minor (`str`):
        patch (`str`):

    Example:

    ```py
    >>> VERSION = datasets.Version("1.0.0")
    ```
    version_strNdescriptionmajorminorpatchc                 C   s   t | j\| _| _| _d S N)_str_to_version_tupler   r	   r
   r   self r   W/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/datasets/utils/version.py__post_init__7   s    zVersion.__post_init__c                 C   s&   | j d  d| j d  d| j d  S )Nr   .      )tupler   r   r   r   __repr__:   s    zVersion.__repr__c                 C   s   | j | j| jfS r   )r	   r
   r   r   r   r   r   r   =   s    zVersion.tuplec                 C   s<   t |trt|S t |tr |S t| dt| dd S )Nz (type z ) cannot be compared to version.)
isinstancestrr   	TypeErrortyper   otherr   r   r   _validate_operandA   s
    

zVersion._validate_operandc              	   C   s:   z|  |}W n ttfk
r(   Y dS X | j|jkS d S )NF)r   r   
ValueErrorr   r   r   r   r   __eq__H   s
    zVersion.__eq__c                 C   s   |  |}| j|jk S r   )r   r   r   r   r   r   __lt__P   s    
zVersion.__lt__c                 C   s   t t| jS r   )hash_version_tuple_to_strr   r   r   r   r   __hash__T   s    zVersion.__hash__c                    s0   dd t | D  | f  fdd| D S )Nc                 S   s   h | ]
}|j qS r   )name).0fr   r   r   	<setcomp>Y   s     z$Version.from_dict.<locals>.<setcomp>c                    s   i | ]\}}| kr||qS r   r   )r&   kvfield_namesr   r   
<dictcomp>Z   s       z%Version.from_dict.<locals>.<dictcomp>)dataclassesfieldsitems)clsZdicr   r+   r   	from_dictW   s    zVersion.from_dict)returnc                 C   s   | j S r   )r   r   r   r   r   _to_yaml_string\   s    zVersion._to_yaml_string)__name__
__module____qualname____doc__r   __annotations__r   r   r	   r   intr
   r   r   r   propertyr   r   r    r!   r$   classmethodr2   r4   r   r   r   r   r      s"   


r   c                 C   sH   t | }|std|  dtdd |d|d|dfD S )zFReturn the tuple (major, minor, patch) version extracted from the str.zInvalid version 'z4'. Format should be x.y.z with {x,y,z} being digits.c                 s   s   | ]}t |V  qd S r   )r:   r&   r*   r   r   r   	<genexpr>e   s     z(_str_to_version_tuple.<locals>.<genexpr>r	   r
   r   )_VERSION_REGmatchr   r   group)r   resr   r   r   r   `   s    
r   c                 C   s   d dd | D S )zDReturn the str version from the version tuple (major, minor, patch).r   c                 s   s   | ]}t |V  qd S r   )r   r=   r   r   r   r>   j   s     z(_version_tuple_to_str.<locals>.<genexpr>)join)version_tupler   r   r   r#   h   s    r#   )r8   r.   rer   	functoolsr   typingr   r   compiler?   r   r   r#   r   r   r   r   <module>   s   
B