o
    ×ŸŽi…  ã                   @   sî   d Z ddlmZmZ ddlmZ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ÚFullResultSet)ÚCaseÚFuncÚStarÚValueÚ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„ 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   © úeC:\Users\psant\Downloads\Anu Raj Backend\school\venv\Lib\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   s    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 ||||¡|_|sGt t|ƒ ¡ }t|ƒD ]#\}}	|	jrF|  ¡ | }
t|
dƒr8|
jnt	|
ƒ}t
d|j||f ƒ‚q#|j }d u rP|S t|dƒrg| ||||¡}|jd u rf|j|_nt||jƒ}d |_t|||jd�}|j|_|S )NÚnamez-Cannot compute %s('%s'): '%s' is an aggregateÚresolve_expression)Úoutput_field)r   r2   r   r   r)   Ú	enumerateÚcontains_aggregateÚhasattrr1   Úreprr   r   r%   r3   r   r
   Z
is_summary)r   ÚqueryZallow_joinsZreuseZ	summarizeZfor_saveÚcr    ÚindexÚexprZbefore_resolvedr1   r   Zcoalescer"   r#   r$   r2   <   s>   ÿÿý
ÿÿù

€zAggregate.resolve_expressionc                 C   sB   |   ¡ }t|ƒdkrt|d dƒrd|d j| j ¡ f S tdƒ‚)Né   r   r1   z%s__%sz$Complex expressions require an alias)r)   Úlenr6   r1   Úlowerr   )r   r    r#   r#   r$   Údefault_aliasa   s   zAggregate.default_aliasc                 C   s   g S r,   r#   r*   r#   r#   r$   Úget_group_by_colsh   s   zAggregate.get_group_by_colsc                    s  | j rdnd|d< | jrw|jjrHz| j ||¡\}}W n	 ty$   Y nSw | j| d| j¡ }t	ƒ j||f||dœ|¤Ž\}}|g |¢|¢R 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_sqlr   Úfilter_templateÚgetrB   r   Úcopyr)   r   r/   r   r   )r   ÚcompilerÚ
connectionZextra_contextZ
filter_sqlZfilter_paramsrB   ZsqlÚparamsrG   r-   Ú	conditionr"   r#   r$   rD   k   s@   ÿÿþü
û
ÿÿ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$   rL   Š   s   


zAggregate._get_repr_options)NTNFF)r   Ú
__module__Ú__qualname__rB   r5   r1   rE   Zwindow_compatibler   r   r   r+   r)   r/   r2   Úpropertyr?   r@   rD   rL   Ú__classcell__r#   r#   r"   r$   r      s(    ÿÿ%
r   c                   @   ó   e Zd ZdZd ZdZdS )r   ZAVGTN©r   rN   rO   Úfunctionr1   r   r#   r#   r#   r$   r   “   ó    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__r,   )r   rN   rO   rT   r1   r	   r3   r   r   r   rQ   r#   r#   r"   r$   r   ™   s    r   c                   @   ó   e Zd ZdZd ZdS )r   ÚMAXN©r   rN   rO   rT   r1   r#   r#   r#   r$   r   ¨   ó    r   c                   @   rZ   )r   ZMINNr\   r#   r#   r#   r$   r   ­   r]   r   c                       ó.   e Zd Zd Zd‡ fdd„	Z‡ fdd„Z‡  ZS )r   Fc                    ó&   |rdnd| _ tƒ j|fi |¤Ž d S )NÚSTDDEV_SAMPZ
STDDEV_POP©rT   r   r   ©r   rY   Úsampler!   r"   r#   r$   r   µ   ó   zStdDev.__init__c                    ó   i t ƒ  ¡ ¥d| jdki¥S )Nrc   r`   ©r   rL   rT   r*   r"   r#   r$   rL   ¹   ó   zStdDev._get_repr_options©F©r   rN   rO   r1   r   rL   rQ   r#   r#   r"   r$   r   ²   ó    r   c                   @   rR   )r   ZSUMTNrS   r#   r#   r#   r$   r   ½   rU   r   c                       r^   )r   Fc                    r_   )NÚVAR_SAMPZVAR_POPra   rb   r"   r#   r$   r   Æ   rd   zVariance.__init__c                    re   )Nrc   rk   rf   r*   r"   r#   r$   rL   Ê   rg   zVariance._get_repr_optionsrh   ri   r#   r#   r"   r$   r   Ã   rj   r   N)Ú__doc__Zdjango.core.exceptionsr   r   Zdjango.db.models.expressionsr   r   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    z