o
    [h                     @   s   d Z ddlmZmZ ddlmZ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ColPairs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    /home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/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>1   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g S N)r   r*   r   )r    source_expressionsr#   r$   r%   r*   3   s   
z Aggregate.get_source_expressionsc                    s   |^ }| _ t |S r-   )r   r   set_source_expressions)r    Zexprsr#   r$   r%   r/   7   s   z Aggregate.set_source_expressionsc              	      s"  t  ||||}|r(| D ]}|j| jr&td|j d| d| dqn2| jsZt t| }t	|D ]#\}	}
|
j
rY|  |	 }t|drK|jnt|}td|j||f q6|j }d u rc|S t|drz|||||}|jd u ry|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   r1   Zget_refsannotationsZ
is_summaryr   r0   r   r*   	enumeratecontains_aggregatehasattrreprr   r&   r2   r   r   )r    queryZallow_joinsZreuseZ	summarizeZfor_savecrefr!   indexexprZbefore_resolvedr0   r   Zcoalescer#   r$   r%   r1   ;   sH   


zAggregate.resolve_expressionc                 C   sL   dd |   D }t|dkr"t|d dr"d|d j| j f S td)Nc                 S   s   g | ]}|d ur|qS r-   r$   )r'   r<   r$   r$   r%   r)   f   s    z+Aggregate.default_alias.<locals>.<listcomp>   r   r0   z%s__%sz$Complex expressions require an alias)r*   lenr6   r0   lowerr   )r    r!   r$   r$   r%   default_aliasd   s   zAggregate.default_aliasc                 C   s   g S r-   r$   r+   r$   r$   r%   get_group_by_colsm   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)rC   r   r   )Zthenr=   )r   r   featuresZ supports_aggregate_filter_clauseas_sqlr   filter_templategetrC   r   copyr*   r	   r/   r   r   )r    compiler
connectionZextra_contextZ
filter_sqlZfilter_paramsrC   sqlparamsrH   r.   	conditionr#   r$   r%   rE   p   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%   rN      s   


zAggregate._get_repr_options)NTNFF)r   
__module____qualname__rC   r5   r0   rF   Zwindow_compatibler   r   r   r,   r*   r/   r1   propertyr@   rA   rE   rN   __classcell__r$   r$   r#   r%   r      s(    )
r   c                   @      e Zd ZdZd ZdZdZdS )r   ZAVGTr=   Nr   rP   rQ   functionr0   r   arityr$   r$   r$   r%   r      
    r   c                       sH   e Zd ZdZd Ze ZdZdZdZ	dZ
d
 fdd	Z fdd	Z  ZS )r   ZCOUNTTr   r=   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__c                    sR   t  j|i |}|jd }t|tr'| jrtd| }t|d |j	dS |S )Nr   z6COUNT(DISTINCT) doesn't support composite primary keys)r   )
r   r1   r.   rZ   r   r   r[   Zget_colsr   r   )r    argskwargsresultr<   colsr#   r$   r%   r1      s   

zCount.resolve_expressionr-   )r   rP   rQ   rV   r0   r
   r2   r   r   rW   Zallows_composite_expressionsr   r1   rS   r$   r$   r#   r%   r      s    r   c                   @      e Zd ZdZd ZdZdS )r   MAXr=   Nr   rP   rQ   rV   r0   rW   r$   r$   r$   r%   r          r   c                   @   ra   )r   ZMINr=   Nrc   r$   r$   r$   r%   r      rd   r   c                       2   e Zd Zd ZdZd fdd	Z fddZ  ZS )r   r=   Fc                    &   |rdnd| _ t j|fi | d S )NSTDDEV_SAMPZ
STDDEV_POPrV   r   r   r    r\   sampler"   r#   r$   r%   r         zStdDev.__init__c                       i t   d| jdkiS )Nrj   rg   r   rN   rV   r+   r#   r$   r%   rN         zStdDev._get_repr_optionsFr   rP   rQ   r0   rW   r   rN   rS   r$   r$   r#   r%   r      
    r   c                   @   rT   )r   ZSUMTr=   NrU   r$   r$   r$   r%   r      rX   r   c                       re   )r   r=   Fc                    rf   )NVAR_SAMPZVAR_POPrh   ri   r#   r$   r%   r      rk   zVariance.__init__c                    rl   )Nrj   rr   rm   r+   r#   r$   r%   rN      rn   zVariance._get_repr_optionsro   rp   r$   r$   r#   r%   r      rq   r   N)__doc__Zdjango.core.exceptionsr   r   Zdjango.db.models.expressionsr   r   r   r   r   r	   Zdjango.db.models.fieldsr
   Zdjango.db.models.functionsr   Z!django.db.models.functions.mixinsr   r   __all__r   r   r   r   r   r   r   r   r$   r$   r$   r%   <module>   s     ~!