U
    R+|jÚ  ã                   @   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 ddd	d
ddddg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                   sb   |r| j std| jj ƒ‚|d k	r>| jd k	r>t| jj› d�ƒ‚|| _|| _|| _tƒ j	||Ž 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   © úcc:\users\snmko\desktop\web_content\django_cbt\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 ||||¡|_|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 krà|S t|dƒ�r| ||||¡}|jd k�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   r2   r   Zget_refsÚannotationsZ
is_summaryr   r1   r   r)   Ú	enumerateÚcontains_aggregateÚhasattrÚreprr   r%   r3   r   r
   )r   ÚqueryZallow_joinsZreuseZ	summarizeZfor_saveÚcÚrefr    ÚindexÚexprZbefore_resolvedr1   r   Zcoalescer"   r#   r$   r2   <   sL       ÿÿÿý
ÿÿ
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   r1   z%s__%sz$Complex expressions require an alias)r)   Úlenr7   r1   Ú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k
rJ   Y qèX | j| d| j¡ }t	ƒ j||f||dœ|—Ž\}}|||˜fS nZ|  
¡ }	d |	_|	 ¡ }
t| j|
d d�}|	 t|ƒg|
dd …  ¡ t	t|	ƒj||f|ŽS t	ƒ j||f|ŽS )	Nz	DISTINCT Ú r   Útemplate)rD   r   r   )Zthenr>   )r   r   ÚfeaturesZ supports_aggregate_filter_clauseÚas_sqlr   Úfilter_templateÚgetrD   r   Úcopyr)   r   r/   r   r   )r   ÚcompilerÚ
connectionZextra_contextZ
filter_sqlZfilter_paramsrD   ZsqlÚparamsrI   r-   Ú	conditionr"   r#   r$   rF   r   sB     ÿþüû

 ÿÿ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$   rN   ‘   s    


zAggregate._get_repr_options)NTNFF)r   Ú
__module__Ú__qualname__rD   r6   r1   rG   Zwindow_compatibler   r   r   r+   r)   r/   r2   ÚpropertyrA   rB   rF   rN   Ú__classcell__r#   r#   r"   r$   r      s2     ÿ         ÿ,
c                   @   s   e Zd ZdZd ZdZdS )r   ZAVGTN©r   rP   rQ   Úfunctionr1   r   r#   r#   r#   r$   r   š   s   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 k	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   rP   rQ   rU   r1   r	   r3   r   r   r   rS   r#   r#   r"   r$   r       s   c                   @   s   e Zd ZdZd ZdS )r   ÚMAXN©r   rP   rQ   rU   r1   r#   r#   r#   r$   r   ¯   s   c                   @   s   e Zd ZdZd ZdS )r   ZMINNr[   r#   r#   r#   r$   r   ´   s   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|Ž d S )NÚSTDDEV_SAMPZ
STDDEV_POP©rU   r   r   ©r   rY   Úsampler!   r"   r#   r$   r   ¼   s    zStdDev.__init__c                    s   t ƒ  ¡ d| jdki–S )Nr_   r\   ©r   rN   rU   r*   r"   r#   r$   rN   À   s    zStdDev._get_repr_options)F©r   rP   rQ   r1   r   rN   rS   r#   r#   r"   r$   r   ¹   s   c                   @   s   e Zd ZdZd ZdZdS )r   ZSUMTNrT   r#   r#   r#   r$   r   Ä   s   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|Ž d S )NÚVAR_SAMPZVAR_POPr]   r^   r"   r#   r$   r   Í   s    zVariance.__init__c                    s   t ƒ  ¡ d| jdki–S )Nr_   rb   r`   r*   r"   r#   r$   rN   Ñ   s    zVariance._get_repr_options)Fra   r#   r#   r"   r$   r   Ê   s   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.   ø 