o
    QDi`                     @  s   d dl mZ d dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
mZmZmZmZ d dlZddlmZ d	d
lmZ e
rBddlmZ G dd dZdddZdddZdddZdS )    )annotationsN)Counter)Decimalnan)TYPE_CHECKINGAnyDictListUnion   )helpers   )types)TableResourcec                   @  s   e Zd Zdddd	d
ZdS )AnalyzerF)detailedresourcer   r   boolreturntypes.IAnalysisReportc                C  s  t  }i }i |d< d|d< d|d< i |d< i }g d}|[ |jD ]O}d}|D ]<}	|j|	}
|
||	d }|
j|vrDg ||
j< |d u rS|
j|v rOt	}|d7 }t
|tr\t|}||
j | q(|dkrq|d  d7  < q"W d    n1 s|w   Y  |r|ri |d< |jjD ]}
i |d |
j< |
j|d vrd|d |
j< |d |
j  d7  < |
jg |d	vrd
|d |
j d< t||
j |d |
j d< |
j|v rd|d |
j d< dd ||
j D }t|dk rq|d |
j t| g |d |
j d< |jjt| |d |
j d< |jjD ]Y}|j|v rrg }g }t||
j ||j D ]\}}t	||fvrF|| || q1t|dkrr|
j|d vr^g |d |
j< |jt||d}|d |
j | q|d |
j d \}}||
j D ]!}|t	ur||  k r|k sn |d |
j d | qq|jj|d  |d< d|d< |jjr|jjr|jj|jj |d< |j|d< i |tj|jdd dS )NvariableTypesr   notNullRowsrowsWithNullValues
fieldStats)integernumericnumberr   correlationsbooleancategoricaltypevaluesr   c                 S  s   g | ]}|t ur|qS  r   ).0cellr#   r#   W/var/www/Datamplify/venv/lib/python3.10/site-packages/frictionless/analyzer/analyzer.py
<listcomp>K   s    z3Analyzer.analyze_table_resource.<locals>.<listcomp>r   outliersmissingValues)	fieldNamecorrboundsaverageRecordSizeInBytes	timeTakenc                 S  s   |d uS )Nr#   )_vr#   r#   r&   <lambda>   s    z1Analyzer.analyze_table_resource.<locals>.<lambda>)filter)r   Timer
row_streamschema	get_field	read_cellgetnamer!   r   
isinstancer   floatappendfieldssetlenupdate_statisticsstatsrowszip
statisticscorrelationbytestimeattrsasdict)selfr   r   timeranalysis_reportcolumns_datar   rownull_columns
field_namefieldr%   rows_without_nan_valuesfield_yvar_xvar_ycell_xcell_ycorrelation_resultlower_boundupper_boundr#   r#   r&   analyze_table_resource   s   









zAnalyzer.analyze_table_resourceN)r   r   r   r   r   r   )__name__
__module____qualname__r\   r#   r#   r#   r&   r      s    r   dataUnion[float, int]r   c                 C  s6   t | }|d}|r|d d dkr|d d S dS )zFinds highly common data with frequency

    Args:
        data (float|int): data

    Returns:
        (float|int): highly common element and its count
    r   r   N)r   most_common)r`   columncommon_valuer#   r#   r&   _common_values   s
   	
re   Dict[str, Any]c                 C  s   i }t | |d< t | |d< t| |d< t | |d< t | |d< t | |d< t| |d< t| |d< t	|d |d	< t
t| |d
< |S )zCalculate the descriptive statistics of the data

    Args:
        data (float|int): data

    Returns:
        dict : statistics of the data
    meanmedianmodevariance	quantilesstdevmaxminr,   uniqueValues)rE   rg   rh   re   rj   rk   rl   rm   rn   _find_boundsr?   r>   )r`   resource_statsr#   r#   r&   rA      s   	rA   	quartiles	List[Any]c                 C  s:   | \}}}|| }t |d|  }t |d|  }||gS )zCalculate the higher and lower bound of distribution

    Args:
        quantiles (List): list of quartiles of distribution

    Returns:
        List: upper and lower bound
    g      ?)round)rr   q1r/   q3inter_quartile_ranger[   rZ   r#   r#   r&   rp      s
   
	rp   )r`   ra   r   ra   )r`   ra   r   rf   )rr   rs   )
__future__r   rE   collectionsr   decimalr   mathr   typingr   r   r	   r
   r   rI    r   r   	resourcesr   r   re   rA   rp   r#   r#   r#   r&   <module>   s      

