a
    LcòfÚ  ã                   @   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   © úX/home/httpd/docs/test/DocsMgr/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$   r0   8   s    z Aggregate.set_source_expressionsc              	      s@  t ƒ  ||||¡}|jo(|j ||||¡|_|rj| ¡ D ].}|j| jr8td|j› d|› d|› d�ƒ‚q8nd| jsÎt t|ƒ 	¡ }t
|ƒD ]F\}	}
|
jr†|  	¡ |	 }t|dƒr°|jnt|ƒ}td|j||f ƒ‚q†|j }d u rà|S t|dƒ�r| ||||¡}|jd u �r|j|_nt||jƒ}d |_t|||jd�}|j|_|S )	NzCannot compute z('z'): 'z' is an aggregateÚnamez-Cannot compute %s('%s'): '%s' is an aggregateÚresolve_expression)Úoutput_field)r   r3   r   Zget_refsÚannotationsZ
is_summaryr   r2   r   r*   Ú	enumerateÚcontains_aggregateÚhasattrÚreprr   r%   r4   r   r
   )r   ÚqueryZallow_joinsZreuseZ	summarizeZfor_saveÚcÚrefr    ÚindexÚexprZbefore_resolvedr2   r   Zcoalescer"   r#   r$   r3   <   sF    ÿÿÿý
ÿÿ
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   r2   z%s__%sz$Complex expressions require an alias)r*   Úlenr8   r2   Úlowerr   )r   r    r#   r#   r$   Údefault_aliash   s    zAggregate.default_aliasc                 C   s   g S r-   r#   r+   r#   r#   r$   Úget_group_by_colso   s    zAggregate.get_group_by_colsc                    s  | j r
dnd|d< | jrð|jjr’z| j ||¡\}}W n tyH   Y qð0 | j| d| j¡ }t	ƒ j||f||dœ|¤Ž\}}|g |¢|¢R fS n^|  
¡ }	d |	_|	 ¡ }
t| j|
d d�}|	 t|ƒg|
dd …  ¡ t	t|	ƒj||fi |¤ŽS t	ƒ j||fi |¤ŽS )	Nz	DISTINCT Ú r   Útemplate)rE   r   r   )Zthenr?   )r   r   ÚfeaturesZ supports_aggregate_filter_clauseÚas_sqlr   Úfilter_templateÚgetrE   r   Úcopyr*   r   r0   r   r   )r   ÚcompilerÚ
connectionZextra_contextZ
filter_sqlZfilter_paramsrE   ÚsqlÚparamsrJ   r.   Ú	conditionr"   r#   r$   rG   r   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$   rP   ‘   s    


zAggregate._get_repr_options)NTNFF)r   Ú
__module__Ú__qualname__rE   r7   r2   rH   Zwindow_compatibler   r   r   r,   r*   r0   r3   ÚpropertyrB   rC   rG   rP   Ú__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   rR   rS   Úfunctionr2   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   rR   rS   rW   r2   r	   r4   r   r   r   rU   r#   r#   r"   r$   r       s   r   c                   @   s   e Zd ZdZd ZdS )r   ÚMAXN©r   rR   rS   rW   r2   r#   r#   r#   r$   r   ¯   s   r   c                   @   s   e Zd ZdZd ZdS )r   ZMINNr]   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©rW   r   r   ©r   r[   Úsampler!   r"   r#   r$   r   ¼   s    zStdDev.__init__c                    s   i t ƒ  ¡ ¥d| jdki¥S )Nra   r^   ©r   rP   rW   r+   r"   r#   r$   rP   À   s    zStdDev._get_repr_options)F©r   rR   rS   r2   r   rP   rU   r#   r#   r"   r$   r   ¹   s   r   c                   @   s   e Zd ZdZd ZdZdS )r   ZSUMTNrV   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 )Nra   rd   rb   r+   r"   r#   r$   rP   Ñ   s    zVariance._get_repr_options)Frc   r#   r#   r"   r$   r   Ê   s   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    