o
    ^"<f-                     @   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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)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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filterc                   s<   |r| j std| jj || _|| _t j|i | d S )Nz%s does not allow distinct.)allow_distinct	TypeError	__class____name__r   r   super__init__)selfr   r   expressionsextrar    R/var/www/html/kck/venv/lib/python3.10/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>!   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$   #   s   
z Aggregate.get_source_expressionsc                    s   | j o| | _ t |S r'   )r   popr   set_source_expressions)r   exprsr   r   r   r*   )   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#|S )Nnamez-Cannot compute %s('%s'): '%s' is an aggregate)r   resolve_expressionr   r
   r$   	enumeratecontains_aggregatehasattrr,   reprr   )r   queryallow_joinsreuse	summarizefor_savecr   indexexprbefore_resolvedr,   r   r   r   r-   -   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   r,   z%s__%sz$Complex expressions require an alias)r$   lenr0   r,   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_colsC   s   zAggregate.get_group_by_colsc                    s   | j rdnd|d< | jrh|jjr9| 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   )thenr;   )r   r   features supports_aggregate_filter_clauseas_sqlfilter_templategetrB   r   copyr$   r   r*   r   r
   )r   compiler
connectionextra_context
filter_sqlfilter_paramsrB   sqlparamsrI   r(   	conditionr   r   r   rF   F   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   rR   Z   s   


zAggregate._get_repr_options)NTNFFr'   )r   
__module____qualname__rB   r/   r,   rG   window_compatibler   r   r&   r$   r*   r-   propertyr>   r@   rF   rR   __classcell__r   r   r   r   r
      s"    

r
   c                   @      e Zd ZdZd ZdZdS )r   AVGTNr   rT   rU   functionr,   r   r   r   r   r   r   c       r   c                       s8   e Zd ZdZd Ze ZdZd fdd	Zdd Z	  Z
S )	r   COUNTTNc                    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   o   s
   zCount.__init__c                 C   s   |d u rdS |S )Nr   r   )r   valuerb   rK   r   r   r   convert_valuev   s   zCount.convert_valuer'   )r   rT   rU   r\   r,   r   output_fieldr   r   rd   rX   r   r   r   r   r   i   s    r   c                   @      e Zd ZdZd ZdS )r   MAXNr   rT   rU   r\   r,   r   r   r   r   r   z       r   c                   @   rf   )r   MINNrh   r   r   r   r   r      ri   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_SAMP
STDDEV_POPr\   r   r   r   rb   sampler   r   r   r   r         zStdDev.__init__c                       i t   d| jdkiS )Nrq   rm   r   rR   r\   r%   r   r   r   rR         zStdDev._get_repr_optionsFr   rT   rU   r,   r   rR   rX   r   r   r   r   r          r   c                   @   rY   )r   SUMTNr[   r   r   r   r   r      r]   r   c                       rk   )r   Fc                    rl   )NVAR_SAMPVAR_POPro   rp   r   r   r   r      rr   zVariance.__init__c                    rs   )Nrq   rz   rt   r%   r   r   r   rR      ru   zVariance._get_repr_optionsrv   rw   r   r   r   r   r      rx   r   N)__doc__django.core.exceptionsr   django.db.models.expressionsr   r   r   r   django.db.models.fieldsr   !django.db.models.functions.mixinsr   r	   __all__r
   r   r   r   r   r   r   r   r   r   r   r   <module>   s    S