a
    ÛEb  ã                   @   sæ   d Z ddlmZ ddlmZmZmZmZ ddlm	Z	 ddl
mZ ddlmZmZ g d¢ZG dd	„ d	eƒZG d
d„ deeeƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deeƒZG dd„ deeƒZG dd„ deeƒZdS )z>
Classes to represent the definitions of aggregate functions.
é    )Ú
FieldError)ÚCaseÚFuncÚStarÚWhen)ÚIntegerField)ÚCoalesce)ÚFixDurationInputMixinÚNumericOutputFieldMixin)Ú	AggregateÚAvgÚCountÚMaxÚMinÚStdDevÚSumÚVariancec                       s¢   e Zd ZdZdZdZdZdZdZdZ	ddddœ‡ fdd„
Z
‡ fd	d
„Z‡ fdd„Z‡ fdd„Zd‡ fdd„	Zedd„ ƒZddd„Z‡ fdd„Z‡ fdd„Z‡  ZS )r   z)%(function)s(%(distinct)s%(expressions)s)TNz%s FILTER (WHERE %%(filter)s)F)ÚdistinctÚfilterÚdefaultc                   sf   |r| j std| jj ƒ‚|d ur>| jd ur>t| jj› d�ƒ‚|| _|| _|| _tƒ j	|i |¤Ž d S )Nz%s does not allow distinct.z does not allow default.)
Úallow_distinctÚ	TypeErrorÚ	__class__Ú__name__Úempty_result_set_valuer   r   r   ÚsuperÚ__init__)Úselfr   r   r   ÚexpressionsÚextra©r   © ú[/home/ja/django-apps/lartica_env/lib/python3.9/site-packages/django/db/models/aggregates.pyr   "   s    
zAggregate.__init__c                    s   dd„ t ƒ  ¡ D ƒS )Nc                 S   s   g | ]
}|j ‘qS r!   )Ú_output_field_or_none)Ú.0Úer!   r!   r"   Ú
<listcomp>0   ó    z/Aggregate.get_source_fields.<locals>.<listcomp>)r   Úget_source_expressions©r   r    r!   r"   Úget_source_fields.   s    zAggregate.get_source_fieldsc                    s    t ƒ  ¡ }| jr|| jg S |S ©N)r   r(   r   )r   Úsource_expressionsr    r!   r"   r(   2   s    
z Aggregate.get_source_expressionsc                    s   | j o| ¡ | _ tƒ  |¡S r+   )r   Úpopr   Úset_source_expressions)r   Úexprsr    r!   r"   r.   8   s    z Aggregate.set_source_expressionsc                    sÜ   t ƒ  ||||¡}|jo(|j ||||¡|_|sŽt t|ƒ ¡ }t|ƒD ]F\}}	|	jrF|  ¡ | }
t|
dƒrp|
jnt	|
ƒ}t
d|j||f ƒ‚qF|j }d u r |S t|dƒrº| ||||¡}d |_t|||jd�}|j|_|S )NÚnamez-Cannot compute %s('%s'): '%s' is an aggregateÚresolve_expression)Úoutput_field)r   r1   r   r   r(   Ú	enumerateÚcontains_aggregateÚhasattrr0   Úreprr   r   r   r#   Z
is_summary)r   ÚqueryZallow_joinsZreuseZ	summarizeZfor_saveÚcr   ÚindexÚexprZbefore_resolvedr0   r   Zcoalescer    r!   r"   r1   <   s4    ÿÿý
ÿÿ
zAggregate.resolve_expressionc                 C   sF   |   ¡ }t|ƒdkr:t|d dƒr:d|d j| j ¡ f S tdƒ‚d S )Né   r   r0   z%s__%sz$Complex expressions require an alias)r(   Úlenr5   r0   Úlowerr   )r   r   r!   r!   r"   Údefault_alias]   s    zAggregate.default_aliasc                 C   s   g S r+   r!   )r   Úaliasr!   r!   r"   Úget_group_by_colsd   s    zAggregate.get_group_by_colsc                    sæ   | j r
dnd|d< | jrÐ|jjrr| j ||¡\}}| j| d| j¡ }tƒ j||f||dœ|¤Ž\}}||| fS |  	¡ }	d |	_|	 
¡ }
t| j|
d d�}|	 t|ƒg|
dd …  ¡ tt|	ƒj||fi |¤ŽS tƒ j||fi |¤ŽS )	Nz	DISTINCT Ú r   Útemplate)rB   r   r   )Zthenr;   )r   r   ÚfeaturesZ supports_aggregate_filter_clauseÚas_sqlÚfilter_templateÚgetrB   r   Úcopyr(   r   r.   r   r   )r   ÚcompilerÚ
connectionZextra_contextZ
filter_sqlZfilter_paramsrB   ÚsqlÚparamsrG   r,   Ú	conditionr    r!   r"   rD   g   s8    ÿþüû

ÿÿzAggregate.as_sqlc                    s.   t ƒ  ¡ }| jr| j|d< | jr*| j|d< |S )Nr   r   )r   Ú_get_repr_optionsr   r   )r   Úoptionsr    r!   r"   rM   ‚   s    


zAggregate._get_repr_options)NTNFF)N)r   Ú
__module__Ú__qualname__rB   r4   r0   rE   Zwindow_compatibler   r   r   r*   r(   r.   r1   Úpropertyr>   r@   rD   rM   Ú__classcell__r!   r!   r    r"   r      s&   ÿ ÿ!

r   c                   @   s   e Zd ZdZd ZdZdS )r   ZAVGTN©r   rO   rP   Úfunctionr0   r   r!   r!   r!   r"   r   ‹   s   r   c                       s4   e Zd ZdZd Zeƒ ZdZdZd‡ fdd„	Z	‡  Z
S )r   ZCOUNTTr   Nc                    sD   |dkrt ƒ }t|t ƒr(|d ur(tdƒ‚tƒ j|fd|i|¤Ž d S )NÚ*z8Star cannot be used with filter. Please specify a field.r   )r   Ú
isinstanceÚ
ValueErrorr   r   )r   Ú
expressionr   r   r    r!   r"   r   ˜   s
    zCount.__init__)N)r   rO   rP   rT   r0   r   r2   r   r   r   rR   r!   r!   r    r"   r   ‘   s   r   c                   @   s   e Zd ZdZd ZdS )r   ÚMAXN©r   rO   rP   rT   r0   r!   r!   r!   r"   r       s   r   c                   @   s   e Zd ZdZd ZdS )r   ZMINNrZ   r!   r!   r!   r"   r   ¥   s   r   c                       s.   e Zd Zd Zd‡ fdd„	Z‡ fdd„Z‡  ZS )r   Fc                    s&   |rdnd| _ tƒ j|fi |¤Ž d S )NÚSTDDEV_SAMPZ
STDDEV_POP©rT   r   r   ©r   rX   Úsampler   r    r!   r"   r   ­   s    zStdDev.__init__c                    s   i t ƒ  ¡ ¥d| jdki¥S )Nr^   r[   ©r   rM   rT   r)   r    r!   r"   rM   ±   s    zStdDev._get_repr_options)F©r   rO   rP   r0   r   rM   rR   r!   r!   r    r"   r   ª   s   r   c                   @   s   e Zd ZdZd ZdZdS )r   ZSUMTNrS   r!   r!   r!   r"   r   µ   s   r   c                       s.   e Zd Zd Zd‡ fdd„	Z‡ fdd„Z‡  ZS )r   Fc                    s&   |rdnd| _ tƒ j|fi |¤Ž d S )NÚVAR_SAMPZVAR_POPr\   r]   r    r!   r"   r   ¾   s    zVariance.__init__c                    s   i t ƒ  ¡ ¥d| jdki¥S )Nr^   ra   r_   r)   r    r!   r"   rM   Â   s    zVariance._get_repr_options)Fr`   r!   r!   r    r"   r   »   s   r   N)Ú__doc__Zdjango.core.exceptionsr   Zdjango.db.models.expressionsr   r   r   r   Zdjango.db.models.fieldsr   Z%django.db.models.functions.comparisonr   Z!django.db.models.functions.mixinsr	   r
   Ú__all__r   r   r   r   r   r   r   r   r!   r!   r!   r"   Ú<module>   s   r