
    g                        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	e      Z G d
 deee      Z G d de      Z G d de      Z G d de      Z G d dee      Z G d dee      Z G d dee      Zy)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                        e Zd ZdZdZdZdZdZdZdZ	dddd fd
Z
 fdZ fd	Z fd
Z	 d fd	Zed        Zd Z fdZ fdZ xZS )r   z)%(function)s(%(distinct)s%(expressions)s)TNz%s FILTER (WHERE %%(filter)s)F)distinctfilterdefaultc                   |r.| j                   s"t        d| j                  j                  z        |.| j                  "t        | j                  j                   d      || _        || _        || _        t        | $  |i | y )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extrar   s         s/var/www/python.vincentserveurtest.ovh/public_html/venv/lib/python3.12/site-packages/django/db/models/aggregates.pyr!   zAggregate.__init__#   s     D//9DNN<S<SSTT4#>#>#Jt~~6677OPQQ +//    c                 Z    t         |          D cg c]  }|j                   c}S c c}w N)r    get_source_expressions_output_field_or_none)r"   er   s     r%   get_source_fieldszAggregate.get_source_fields/   s+    161O1QR1QA''1QRRRs   (c                 @    t         |          }|| j                  gz   S r(   )r    r)   r   )r"   source_expressionsr   s     r%   r)   z Aggregate.get_source_expressions3   s"    "W;=!T[[M11r&   c                 6    |^ }| _         t        | 	  |      S r(   )r   r    set_source_expressions)r"   exprsr   s     r%   r0   z Aggregate.set_source_expressions7   s    #w-e44r&   c           
      z   t         |   ||||      }|j                  r|j                  j                  ||||      nd |_        |rN|j                         D ]:  }|j                  |   j
                  st        d|j                   d| d| d       n| j
                  st         t        |'         }t        |      D ]f  \  }	}
|
j                  s| j                         |	   }t        |d      r|j                  n
t        |      }t        d|j                  d|d|d       |j                  x}|S t        |d      r2|j                  ||||      }|j                  (|j                  |_        nt#        ||j                        }d |_        t%        |||j                        }|j
                  |_        |S )NzCannot compute z('z'): 'z' is an aggregatenameresolve_expression)output_field)r    r4   r   get_refsannotations
is_summaryr   r3   r   r)   	enumeratecontains_aggregatehasattrreprr   r*   r5   r   r   )r"   queryallow_joinsreuse	summarizefor_savecrefr#   indexexprbefore_resolvedr3   r   coalescer   s                  r%   r4   zAggregate.resolve_expression;   s    G&uk5)L xx HH''{E9M 	

 zz|$$S)44$)!&&C5cUBST  $
   	1DFK(5t**&*&A&A&CE&JO #?F; (,,!/2 
 %664/   6 yy G)H70100UIVG,,4'('>'>$GQ%<%<=G	AwQ5L5LMllr&   c                     | j                         D cg c]  }||	 }}t        |      dk(  r;t        |d   d      r,|d   j                  d| j                  j	                         S t        d      c c}w )N   r   r3   __z$Complex expressions require an alias)r)   lenr;   r3   lowerr   )r"   rE   r#   s      r%   default_aliaszAggregate.default_aliasi   s|     "88:
:Td>ND: 	 
 {q W[^V%D*1~22DIIOO4EFF>??
s
   A5A5c                     g S r(    )r"   s    r%   get_group_by_colszAggregate.get_group_by_colsr   s    	r&   c                 n   | j                   rdnd|d<   | j                  r|j                  j                  ri	 | j                  j	                  ||      \  }}| j
                  |j                  d| j                        z  }t        |   ||f||d|\  }}|g ||fS | j                         }	d |	_        |	j                         }
t        | j                  |
d         }|	j                  t        |      g|
dd  z          t        t        |	  ||fi |S t        |   ||fi |S # t        $ r Y w xY w)	Nz	DISTINCT  r   template)rS   r   r   )thenrI   )r   r   features supports_aggregate_filter_clauseas_sqlfilter_templategetrS   r    r   copyr)   r	   r0   r   r   )r"   compiler
connectionextra_context
filter_sqlfilter_paramsrS   sqlparamsrZ   r.   	conditionr   s               r%   rW   zAggregate.as_sqlu   sd   37==Kbj!;;""CC:040B0B8Z0X-J  $33m6G6G"DMM7  H #('. "# "*)	#
 (#KC  9& 9= 999yy{"%)%@%@%B" 3Ea3HI	++T)_,=@RSTSU@V,VWY4j,9  w~h
DmDD/ % s   D( (	D43D4c                     t         |          }| j                  r| j                  |d<   | j                  r| j                  |d<   |S )Nr   r   )r    _get_repr_optionsr   r   )r"   optionsr   s     r%   rd   zAggregate._get_repr_options   s?    '+-=="&--GJ;; $GHr&   )NTNFF)r   
__module____qualname__rS   r:   r3   rX   window_compatibler   r   r!   r,   r)   r0   r4   propertyrM   rP   rW   rd   __classcell__r   s   @r%   r   r      s    :HD5ON! &+4
0S25
 SX,\ @ @E> r&   r   c                       e Zd ZdZd ZdZy)r   AVGTNr   rf   rg   functionr3   r   rO   r&   r%   r   r          HDNr&   r   c                   >     e Zd ZdZd Z e       ZdZdZd fd	Z	 xZ
S )r   COUNTTr   c                     |dk(  r
t               }t        |t               r|t        d      t        |   |fd|i| y )N*z8Star cannot be used with filter. Please specify a field.r   )r   
isinstance
ValueErrorr    r!   )r"   
expressionr   r$   r   s       r%   r!   zCount.__init__   sD    Jj$'F,>WXX<F<e<r&   r(   )r   rf   rg   ro   r3   r
   r5   r   r   r!   rj   rk   s   @r%   r   r      s)    HD>LN= =r&   r   c                       e Zd ZdZd Zy)r   MAXNr   rf   rg   ro   r3   rO   r&   r%   r   r          HDr&   r   c                       e Zd ZdZd Zy)r   MINNrz   rO   r&   r%   r   r      r{   r&   r   c                   .     e Zd Zd Zd fd	Z fdZ xZS )r   c                 <    |rdnd| _         t        |   |fi | y )NSTDDEV_SAMP
STDDEV_POPro   r    r!   r"   rw   sampler$   r   s       r%   r!   zStdDev.__init__   s     )/\-u-r&   c                 F    i t         |          d| j                  dk(  iS )Nr   r   r    rd   ro   r"   r   s    r%   rd   zStdDev._get_repr_options   s&    X%'+-Xx-9WXXr&   Fr   rf   rg   r3   r!   rd   rj   rk   s   @r%   r   r      s    D.Y Yr&   r   c                       e Zd ZdZd ZdZy)r   SUMTNrn   rO   r&   r%   r   r      rp   r&   r   c                   .     e Zd Zd Zd fd	Z fdZ xZS )r   c                 <    |rdnd| _         t        |   |fi | y )NVAR_SAMPVAR_POPr   r   s       r%   r!   zVariance.__init__   s     &,
)-u-r&   c                 F    i t         |          d| j                  dk(  iS )Nr   r   r   r   s    r%   rd   zVariance._get_repr_options   s&    U%'+-Ux*9TUUr&   r   r   rk   s   @r%   r   r      s    D.V Vr&   r   N)__doc__django.core.exceptionsr   r   django.db.models.expressionsr   r   r   r   r	   django.db.models.fieldsr
   %django.db.models.functions.comparisonr   !django.db.models.functions.mixinsr   r   __all__r   r   r   r   r   r   r   r   rO   r&   r%   <module>r      s    = F F 0 :
	@ @F
!8) =I =) 
) 
Y$i Y
 V&	 Vr&   