o
    5tiE                     @   s   U d Z ddlZddlmZ ddlmZ ddlmZmZm	Z	m
Z
 ddlmZ e
eeef ZedZeed< G d	d
 d
ejdZG dd deZG dd deZdS )zA
.. codeauthor:: Tsuyoshi Hombashi <tsuyoshi.hombashi@gmail.com>
    N)Sequence)Decimal)AnyFinalOptionalUnion)
RealNumbernanNANc                   @   s   e Zd Zeejdee fddZeejdee fddZ	ejdefddZ
ejdee dd	fd
dZejdddZdefddZdefddZdefddZdefddZd	S )AbstractContainerreturnc                 C      d S N selfr   r   K/home/ubuntu/.local/lib/python3.10/site-packages/dataproperty/_container.py	min_value      zAbstractContainer.min_valuec                 C   r   r   r   r   r   r   r   	max_value   r   zAbstractContainer.max_valuec                 C   r   r   r   r   r   r   r   mean      zAbstractContainer.meanvalueNc                 C   r   r   r   r   r   r   r   r   update    r   zAbstractContainer.updatec                 C   r   r   r   r   r   r   r   merge$   r   zAbstractContainer.mergec                 C   s*   |   sdS dd| j d| j gS )NNonez, zmin=zmax=)	has_valuejoinr   r   r   r   r   r   __repr__(   s   zAbstractContainer.__repr__c                 C   s   | j d uo	| jd uS r   r   r   r   r   r   r   r   .      zAbstractContainer.has_valuec                 C   s   |   o	| j| jkS r   r   r   r   r   r   r   r   is_same_value1   r!   zAbstractContainer.is_same_valuec                 C   s   |   o| jdko| jdkS )Nr   r"   r   r   r   r   is_zero4   s   zAbstractContainer.is_zeror   r   r   N)__name__
__module____qualname__propertyabcabstractmethodr   r   r   r   r   Tr   r   strr   boolr   r#   r$   r   r   r   r   r      s"    r   )	metaclassc                   @   s   e Zd ZdZedee fddZedee fddZede	e fddZ
dd
ee	e  dd	fddZdefddZdeeeed	f dd	fddZdddZd	S )ListContainer)__value_listr   c                 C   "   zt | jW S  ty   Y d S w r   )min_ListContainer__value_list
ValueErrorr   r   r   r   r   ;   
   zListContainer.min_valuec                 C   r2   r   )maxr4   r5   r   r   r   r   r   B   r6   zListContainer.max_valuec                 C      | j S r   )r4   r   r   r   r   
value_listI      zListContainer.value_listNr9   c                 C   s*   |d u r	g | _ d S |D ]}| | qd S r   )r4   r   r   r9   r   r   r   r   __init__M   s   zListContainer.__init__c                 C   s2   zt t| jt| j W S  ty   t Y S w r   )r   sumr4   lenZeroDivisionErrorr
   r   r   r   r   r   U   s
   zListContainer.meanr   c                 C   s4   |d u rd S t | }|d u rd S | j| d S r   )r   try_convertr4   append)r   r   store_valuer   r   r   r   [   s   zListContainer.updater   c                 C   s(   t |tsd S |jD ]}| | q
d S r   )
isinstancer0   r9   r   )r   r   vr   r   r   r   e   s
   

zListContainer.merger   r%   )r&   r'   r(   	__slots__r)   r   r   r   r   listr9   r<   r   r   intfloatr   r   r   r   r   r   r0   8   s    
r0   c                   @   s   e Zd ZdZddeee  ddfddZedee fddZ	edee fd	d
Z
dedefddZdedefddZdedefddZdefddZdefddZdee ddfddZdddZdS )MinMaxContainer)__min_value__max_valueNr9   r   c                 C   s0   d | _ d | _|d u rd S |D ]}| | qd S r   )_MinMaxContainer__min_value_MinMaxContainer__max_valuer   r;   r   r   r   r<   p   s   zMinMaxContainer.__init__c                 C   r8   r   )rL   r   r   r   r   r   z   r:   zMinMaxContainer.min_valuec                 C   r8   r   )rM   r   r   r   r   r   ~   r:   zMinMaxContainer.max_valueotherc                 C   s*   t |tsdS t| j|jk| j|jkgS NF)rC   rI   allr   r   r   rN   r   r   r   __eq__      
zMinMaxContainer.__eq__c                 C   s*   t |tsdS t| j|jk| j|jkgS )NT)rC   rI   anyr   r   rQ   r   r   r   __ne__   rS   zMinMaxContainer.__ne__xc                 C   s8   | j d u rdS | jd u rdS | j |  ko| jkS   S rO   r    )r   rV   r   r   r   __contains__   s
   

zMinMaxContainer.__contains__c                 C   sB   | j d u rtS | jd u rtS z| j| j  W S  ty    t Y S w r   )r   r
   r   	TypeErrorr   r   r   r   diff   s   

zMinMaxContainer.diffc                 C   sJ   | j d u rtS | jd u rtS z| j| j  td W S  ty$   t Y S w )Nz0.5)r   r
   r   r   rX   r   r   r   r   r      s   

zMinMaxContainer.meanr   c                 C   sZ   |d u rd S t |}| jd u r|| _nt| j|| _| jd u r$|| _d S t| j|| _d S r   )r   rL   r3   rM   r7   )r   r   decimal_valuer   r   r   r      s   


zMinMaxContainer.updater   c                 C   s*   t |tsd S | |j | |j d S r   )rC   rI   r   r   r   r   r   r   r   r      s   
zMinMaxContainer.merger   r%   )r&   r'   r(   rE   r   r   r   r<   r)   r   r   r   r.   rR   rU   r,   rW   rY   r   r   r   r   r   r   r   rI   m   s    
	rI   )__doc__r*   collections.abcr   decimalr   typingr   r   r   r   typepyr   rG   rH   r,   r
   __annotations__ABCMetar   r0   rI   r   r   r   r   <module>   s    '5