o
    QDi8                     @  s   d dl mZ d dlZd dlmZmZmZmZ d dlZddl	m
Z
 ddlmZ er:ddlmZ ddlmZ dd	lmZ dZd
ZejejejdZejdddG dd deZdS )    )annotationsN)TYPE_CHECKINGAnyIterableList   )errors)Check)Error)Resource)Rowmean)r   medianmodeTF)kw_onlyreprc                      s   e Zd ZU dZdZejgZded< 	 e	Z
ded< 	 eZded< 	 d fd
dZdddZdddZdddZdgddiddiddiddZ  ZS )deviated_valuez%Check for deviated values in a field.zdeviated-valuestr
field_nameintintervalaverageresourcer   c                   s*   t  | g | _g | _t| j| _d S N)superconnect_deviated_value__cells_deviated_value__row_numbersAVERAGE_FUNCTIONSgetr   !_deviated_value__average_function)selfr   	__class__ `/var/www/Datamplify/venv/lib/python3.10/site-packages/frictionless/checks/cell/deviated_value.pyr   6   s   zdeviated_value.connectreturnIterable[Error]c                 c  s    ddg}| j | jjjvrd}tj|| j  dV  n| jj| j j|vr1d}tj|| j  dV  | jsHd}|d	t
  }tj|dV  d S d S )Nintegernumberz1deviated value check requires field "%s" to existnotez6deviated value check requires field "%s" to be numericz9deviated value check supports only average functions "%s"z, )r   r   schemafield_namesr   
CheckError	get_fieldtyper    joinr   keys)r!   numericr+   r$   r$   r%   validate_start>   s   zdeviated_value.validate_startrowr   c                 c  s<    || j  }|d ur| j| | j|j g E d H  d S r   )r   r   appendr   
row_number)r!   r5   cellr$   r$   r%   validate_rowK   s   
zdeviated_value.validate_rowc           	   
   c  s    t | jdk r
d S zt| j}| | j}||| j  }||| j  }W n tyD } zd| }tj|dV  W Y d }~d S d }~ww t	| j
| jD ]"\}}||  krZ|ksnn d}|||| j||f }tj|dV  qLd S )N   zcalculation issue "%s"r*   zLvalue "%s" in row at position "%s" and field "%s" is deviated "[%.2f, %.2f]")lenr   
statisticsstdevr    r   	Exceptionr   DeviatedValueErrorzipr   r   )	r!   r=   r   minimummaximum	exceptionr+   r7   r8   r$   r$   r%   validate_endR   s*   zdeviated_value.validate_end	fieldNamer0   stringr)   )rE   r   r   )required
properties)r   r   )r&   r'   )r5   r   r&   r'   )__name__
__module____qualname____doc__r0   r   r?   Errors__annotations__DEFAULT_INTERVALr   DEFAULT_AVERAGEr   r   r4   r9   rD   metadata_profile_patch__classcell__r$   r$   r"   r%   r      s(   
 


r   )
__future__r   r<   typingr   r   r   r   attrs r   	checklistr	   errorr
   r   r   tabler   rO   rP   r   r   r   r   definer   r$   r$   r$   r%   <module>   s$    