Ë
    q^ëi…  ã                   ó  — 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         €úL/var/www/eb/venv/lib/python3.12/site-packages/django/db/models/aggregates.pyr!   zAggregate.__init__"   s�   ø€ ñ ˜D×/Ò/ÜÐ9¸D¿N¹N×<SÑ<SÑSÓTÐTØÐ 4×#>Ñ#>Ð#JÜ˜tŸ~™~×6Ñ6Ð7Ð7OÐ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±Ñ1OÓ1QÖR¨A�×'Ó'Ò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)   ø€ Ø—k‘kÒ1 e§i¡i£kˆŒÜ‰wÑ-¨eÓ4Ð4r&   c           
      óÆ  •— t         ‰| �  ||||«      }|j                  xr |j                  j                  ||||«      |_        |s†t         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 )NÚnamezCannot compute z('z'): 'z' is an aggregateÚresolve_expression)Úoutput_field)r    r5   r   r   r)   Ú	enumerateÚcontains_aggregateÚhasattrr4   Úreprr   r   r*   r6   r   r   Ú
is_summary)r"   ÚqueryÚallow_joinsÚreuseÚ	summarizeÚfor_saveÚcr#   ÚindexÚexprÚbefore_resolvedr4   r   Úcoalescer   s                 €r%   r5   zAggregate.resolve_expression<   s`  ø€ ô ‰GÑ& u¨k¸5À)ÓLˆØ—8‘8ò 
 §¡× ;Ñ ;Ø�;  yó!
ˆŒñ ô  ¤	¨1ÑDÓFˆKÜ(¨Ó5ò ‘��tØ×*Ó*Ø&*×&AÑ&AÓ&CÀEÑ&J�Oô # ?°FÔ;ð (×,Ò,ä! /Ó2ð õ
 %àŸ6›6¢4ªð/óð ðð —y‘yÐ ˆGÐ)ØˆHÜ�7Ð0Ô1Ø×0Ñ0°¸ÀUÈIÓVˆGØ×,Ñ,Ð4Ø'(×'>Ñ'>�Õ$ä˜G Q×%<Ñ%<Ó=ˆGØˆŒ	Ü˜A˜w°Q×5LÑ5LÔMˆØŸl™lˆÔØˆ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)   Úlenr9   r4   Úlowerr   )r"   r#   s     r%   Údefault_aliaszAggregate.default_aliasa   sV   € à×1Ñ1Ó3ˆÜˆ{Ó˜qÒ ¤W¨[¸©^¸VÔ%DØ*¨1™~×2Ó2°D·I±I·O±OÔ4EÐFÐFÜÐ>Ó?Ð?r&   c                 ó   — g S r(   © )r"   s    r%   Úget_group_by_colszAggregate.get_group_by_colsh   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)rQ   r   r   )ÚthenrG   )r   r   ÚfeaturesÚ supports_aggregate_filter_clauseÚas_sqlÚfilter_templateÚgetrQ   r    r   Úcopyr)   r	   r1   r   r   )r"   ÚcompilerÚ
connectionÚextra_contextÚ
filter_sqlÚfilter_paramsrQ   ÚsqlÚparamsrX   r.   Ú	conditionr   s               €r%   rU   zAggregate.as_sqlk   sd  ø€ Ø37·=²=¡KÀbˆ�jÑ!Ø�;Š;Ø×"Ñ"×CÒCð:Ø04·±×0BÑ0BÀ8ÈZÓ0XÑ-�J ð  $×3Ñ3°m×6GÑ6GØ" D§M¡Mó7ñ  �Hô #(¡'¡.Ø Ø"ð#ð "*Ø)ñ	#ð
 (ñ#‘K�C˜ð Ð 9 &Ð 9¨=Ñ 9Ð9Ð9à—y‘y“{�Ø"�”Ø%)×%@Ñ%@Ó%BÐ"Ü  §¡Ð3EÀaÑ3HÔI�	Ø×+Ñ+¬T°)«_Ð,=Ð@RÐSTÐSUÐ@VÑ,VÔWÜœY¨Ñ4Ø˜jñØ,9ñð ô ‰w‰~˜h¨
ÑD°mÑ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%   rb   zAggregate._get_repr_optionsŠ   s?   ø€ Ü‘'Ñ+Ó-ˆØ�=Š=Ø"&§-¡-ˆG�JÑØ�;Š;Ø $§¡ˆG�HÑØˆr&   )NTNFF)r   Ú
__module__Ú__qualname__rQ   r8   r4   rV   Úwindow_compatibler   r   r!   r,   r)   r1   r5   ÚpropertyrK   rN   rU   rb   Ú__classcell__©r   s   @r%   r   r      s   ø„ Ø:€HØÐØ€DØ5€OØÐØ€NØ!Ðð &+°4Àö
0ôSô"ô5ð
 SXõ#ðJ ñ@ó ð@òôE÷>ð r&   r   c                   ó   — e Zd ZdZd ZdZy)r   ÚAVGTN©r   rd   re   Úfunctionr4   r   rM   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   rd   re   rm   r4   r
   r6   r   r   r!   rh   ri   s   @r%   r   r   ™   s)   ø„ Ø€HØ€DÙ“>€LØ€NØÐ÷=ñ =r&   r   c                   ó   — e Zd ZdZd Zy)r   ÚMAXN©r   rd   re   rm   r4   rM   r&   r%   r   r   ¨   ó   „ Ø€HØ�Dr&   r   c                   ó   — e Zd ZdZd Zy)r   ÚMINNrx   rM   r&   r%   r   r   ­   ry   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©rm   r    r!   ©r"   ru   Úsampler$   r   s       €r%   r!   zStdDev.__init__µ   s    ø€ Ù)/™°\ˆŒÜ‰Ñ˜Ñ- uÓ-r&   c                 óF   •— i t         ‰| �  «       ¥d| j                  dk(  i¥S )Nr‚   r~   ©r    rb   rm   ©r"   r   s    €r%   rb   zStdDev._get_repr_options¹   s&   ø€ ØX”%‘'Ñ+Ó-ÐX¨x¸¿¹È-Ñ9WÑXÐXr&   ©F©r   rd   re   r4   r!   rb   rh   ri   s   @r%   r   r   ²   s   ø„ Ø€Dõ.÷Yð Yr&   r   c                   ó   — e Zd ZdZd ZdZy)r   ÚSUMTNrl   rM   r&   r%   r   r   ½   rn   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%   rb   zVariance._get_repr_optionsÊ   s&   ø€ ØU”%‘'Ñ+Ó-ÐU¨x¸¿¹È*Ñ9TÑUÐUr&   r†   r‡   ri   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   rM   r&   r%   ú<module>r–      s�   ðñ÷ =ß FÕ FÝ 0Ý :÷ò
	€ôw�ô wôtÐ
Ð!8¸)ô ô=ˆIô =ôˆ)ô ô
ˆ)ô ô
YÐ$ iô YôÐ
 ô ôVÐ&¨	õ Vr&   