
    h-                     
   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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)CaseFuncStarWhen)IntegerField)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dd fd
Z	 fdZ
 fd	Z fd
Zd fd	Zed        Zd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filterc                    |r.| j                   s"t        d| j                  j                  z        || _        || _        t        |   |i | y )Nz%s does not allow distinct.)allow_distinct	TypeError	__class____name__r   r   super__init__)selfr   r   expressionsextrar   s        ^/var/www/html/ranktracker/api/venv/lib/python3.12/site-packages/django/db/models/aggregates.pyr   zAggregate.__init__   sI    D//9DNN<S<SSTT +//    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_expressions#   s/    "W;=;;%55!!r!   c                 h    | j                   xr |j                         | _         t        |   |      S r#   )r   popr   set_source_expressions)r   exprsr   s     r    r,   z Aggregate.set_source_expressions)   s)    kk1eiikw-e44r!   c           
         t         |   ||||      }|j                  xr |j                  j                  ||||      |_        |st         t        |         }t        |      D ]f  \  }}	|	j                  s| j	                         |   }
t        |
d      r|
j                  n
t        |
      }t        d|j                  d|d|d       |S )NnamezCannot compute z('z'): 'z' 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   s               r    r0   zAggregate.resolve_expression-   s    G&uk5)L88a ; ;E;PUW` a  	1DFK(5 mt**&*&A&A&CE&JO3:?F3S?//Y]^mYnD$XYX^X^`dfj%kll	m
 r!   c                     | j                         }t        |      dk(  r;t        |d   d      r,|d   j                  d| j                  j	                         S t        d      )N   r   r/   __z$Complex expressions require an alias)r$   lenr3   r/   lowerr   )r   r   s     r    default_aliaszAggregate.default_alias<   sV    113{q W[^V%D*1~22DIIOO4EFF>??r!   c                     g S r#    )r   aliass     r    get_group_by_colszAggregate.get_group_by_colsC   s    	r!   c                 J   | j                   rdnd|d<   | j                  r|j                  j                  rf| j                  j	                  ||      \  }}| j
                  |j                  d| j                        z  }t        |   ||f||d|\  }}|||z   fS | j                         }	d |	_        |	j                         }
t        | j                  |
d         }|	j                  t        |      g|
dd  z          t        t        |	  ||fi |S t        |   ||fi |S )	Nz	DISTINCT  r   template)rJ   r   r   )thenr?   )r   r   features supports_aggregate_filter_clauseas_sqlfilter_templategetrJ   r   copyr$   r   r,   r   r   )r   compiler
connectionextra_context
filter_sqlfilter_paramsrJ   sqlparamsrQ   r)   	conditionr   s               r    rN   zAggregate.as_sqlF   s/   37==Kbj!;;""CC,0KK,>,>x,T)
M//-2C2CJPTP]P]2^^#gnj3;J#V F]222yy{"%)%@%@%B" 3Ea3HI	++T)_,=@RSTSU@V,VWY4Xz[][[w~h
DmDDr!   c                     t         |          }| j                  r| j                  |d<   | j                  r| j                  |d<   |S )Nr   r   )r   _get_repr_optionsr   r   )r   optionsr   s     r    r[   zAggregate._get_repr_optionsZ   s?    '+-=="&--GJ;; $GHr!   )NTNFFr#   )r   
__module____qualname__rJ   r2   r/   rO   window_compatibler   r   r'   r$   r,   r0   propertyrC   rG   rN   r[   __classcell__r   s   @r    r   r      sm    :HD5ON.3D 0S"5 @ @E( r!   r   c                       e Zd ZdZd ZdZy)r   AVGTNr   r]   r^   functionr/   r   rE   r!   r    r   r   c       HDNr!   r   c                   @     e Zd ZdZd Z e       ZdZd fd	Zd Z	 xZ
S )r   COUNTTc                     |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__o   sD    Jj$'F,>WXX<F<e<r!   c                     |dS |S )Nr   rE   )r   valuern   rS   s       r    convert_valuezCount.convert_valuev   s    Mq,u,r!   r#   )r   r]   r^   rf   r/   r   output_fieldr   r   rq   ra   rb   s   @r    r   r   i   s#    HD>LN=-r!   r   c                       e Zd ZdZd Zy)r   MAXNr   r]   r^   rf   r/   rE   r!   r    r   r   z       HDr!   r   c                       e Zd ZdZd Zy)r   MINNru   rE   r!   r    r   r      rv   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rf   r   r   r   rn   sampler   r   s       r    r   zStdDev.__init__   s     )/\-u-r!   c                 F    i t         |          d| j                  dk(  iS )Nr   r{   r   r[   rf   r   r   s    r    r[   zStdDev._get_repr_options   s&    X%'+-Xx-9WXXr!   Fr   r]   r^   r/   r   r[   ra   rb   s   @r    r   r      s    D.Y Yr!   r   c                       e Zd ZdZd ZdZy)r   SUMTNre   rE   r!   r    r   r      rg   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    r[   zVariance._get_repr_options   s&    U%'+-Ux*9TUUr!   r   r   rb   s   @r    r   r      s    D.V Vr!   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   rE   r!   r    <module>r      s    . ? ? 0
P Pf
!8) -I -") 
) 
Y$i Y
 V&	 Vr!   