
    Hwg                        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         R/var/www/horilla/myenv/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RA''RRRs   (c                 \    t         |          }| j                  r|| j                  gz   S |S r(   )r    r)   r   )r"   source_expressionsr   s     r%   r)   z Aggregate.get_source_expressions2   s/    "W;=;;%55!!r&   c                 h    | j                   xr |j                         | _         t        |   |      S r(   )r   popr    set_source_expressions)r"   exprsr   s     r%   r1   z Aggregate.set_source_expressions8   s)    kk1eiikw-e44r&   c           
      z   t         |   ||||      }|j                  xr |j                  j                  ||||      |_        |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    r5   r   get_refsannotations
is_summaryr   r4   r   r)   	enumeratecontains_aggregatehasattrreprr   r*   r6   r   r   )r"   queryallow_joinsreuse	summarizefor_savecrefr#   indexexprbefore_resolvedr4   r   coalescer   s                  r%   r5   zAggregate.resolve_expression<   s    G&uk5)L88 
 ; ;;y!
 zz| $$S)44$)!&&C5cUBST 
   	1DFK(5 t**&*&A&A&CE&JO #?F; (,,!/2 
 %664/  yy G)H70100UIVG,,4'('>'>$GQ%<%<=G	AwQ5L5LMllr&   c                     | j                         }t        |      dk(  r;t        |d   d      r,|d   j                  d| j                  j	                         S t        d      )N   r   r4   __z$Complex expressions require an alias)r)   lenr<   r4   lowerr   )r"   r#   s     r%   default_aliaszAggregate.default_aliash   sV    113{q W[^V%D*1~22DIIOO4EFF>??r&   c                     g S r(    )r"   s    r%   get_group_by_colszAggregate.get_group_by_colso   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)rT   r   r   )thenrJ   )r   r   features supports_aggregate_filter_clauseas_sqlfilter_templategetrT   r    r   copyr)   r	   r1   r   r   )r"   compiler
connectionextra_context
filter_sqlfilter_paramsrT   sqlparamsr[   r.   	conditionr   s               r%   rX   zAggregate.as_sqlr   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%   re   zAggregate._get_repr_options   s?    '+-=="&--GJ;; $GHr&   )NTNFF)r   
__module____qualname__rT   r;   r4   rY   window_compatibler   r   r!   r,   r)   r1   r5   propertyrN   rQ   rX   re   __classcell__r   s   @r%   r   r      s    :HD5ON! &+4
0S"5
 SX*X @ @E> r&   r   c                       e Zd ZdZd ZdZy)r   AVGTNr   rg   rh   functionr4   r   rP   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   rg   rh   rp   r4   r
   r6   r   r   r!   rk   rl   s   @r%   r   r      s)    HD>LN= =r&   r   c                       e Zd ZdZd Zy)r   MAXNr   rg   rh   rp   r4   rP   r&   r%   r   r          HDr&   r   c                       e Zd ZdZd Zy)r   MINNr{   rP   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rp   r    r!   r"   rx   sampler$   r   s       r%   r!   zStdDev.__init__   s     )/\-u-r&   c                 F    i t         |          d| j                  dk(  iS )Nr   r   r    re   rp   r"   r   s    r%   re   zStdDev._get_repr_options   s&    X%'+-Xx-9WXXr&   Fr   rg   rh   r4   r!   re   rk   rl   s   @r%   r   r      s    D.Y Yr&   r   c                       e Zd ZdZd ZdZy)r   SUMTNro   rP   r&   r%   r   r      rq   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%   re   zVariance._get_repr_options   s&    U%'+-Ux*9TUUr&   r   r   rl   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   rP   r&   r%   <module>r      s    = F F 0 :
	~ ~B
!8) =I =) 
) 
Y$i Y
 V&	 Vr&   