o
    TZh                     @   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def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   M/var/www/html/lang_env/lib/python3.10/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   s8   t |tr	t|S t |tr|S t| dt| d)Nz (type z ) cannot be compared to version.)
isinstancestrr   	TypeErrortyper   otherr   r   r   _validate_operandA   s
   

zVersion._validate_operandc              	   C   s4   z|  |}W n ttfy   Y dS w | j|jk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                    s4   dd t | D  | di  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 | ]\}}| v r||qS r   r   )r&   kvfield_namesr   r   
<dictcomp>Z   s    z%Version.from_dict.<locals>.<dictcomp>r   )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       | ]}t |V  qd S r   )r:   r&   r*   r   r   r   	<genexpr>e       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   r=   r   )r   r>   r   r   r   r?   j   r@   z(_version_tuple_to_str.<locals>.<genexpr>)join)Zversion_tupler   r   r   r#   h   s   r#   )r8   r.   rer   	functoolsr   typingr   r   compilerA   r   r   r#   r   r   r   r   <module>   s   
B