
    Evg                     P   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dS )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                      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extrar   s         X/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/django/db/models/aggregates.pyr!   zAggregate.__init__#   s      	UD/ 	U9DN<SSTTT4#>#Jt~6PPPQQQ +//////    c                 X    d t                                                      D             S )Nc                     g | ]	}|j         
S  )_output_field_or_none).0es     r%   
<listcomp>z/Aggregate.get_source_fields.<locals>.<listcomp>1   s    RRRA'RRRr&   )r    get_source_expressionsr"   r   s    r%   get_source_fieldszAggregate.get_source_fields/   s'    RR1O1O1Q1QRRRRr&   c                 Z    t                                                      }|| j        gz   S N)r    r.   r   )r"   source_expressionsr   s     r%   r.   z Aggregate.get_source_expressions3   s(    "WW;;==!T[M11r&   c                 Z    |^ }| _         t                                          |          S r2   )r   r    set_source_expressions)r"   exprsr   s     r%   r5   z Aggregate.set_source_expressions7   s'    #ww--e444r&   c           
         t                                          ||||          }|j        r|j                            ||||          nd |_        |rH|                                D ]2}|j        |         j        rt          d|j         d| d| d          3n| j        st          t          |          	                                }t          |          D ]j\  }	}
|
j        r^| 	                                |	         }t          |d          r|j        nt          |          }t          d|j        d|d|d          k|j        x}|S t          |d          r,|                    ||||          }|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    r9   r   get_refsannotations
is_summaryr   r8   r   r.   	enumeratecontains_aggregatehasattrreprr   r*   r:   r   r   )r"   queryallow_joinsreuse	summarizefor_savecrefr#   indexexprbefore_resolvedr8   r   coalescer   s                  r%   r9   zAggregate.resolve_expression;   s    GG&&uk5)LL xAH''{E9MMM 	

  	zz||  $S)4 $T!&TTCTTcTTT  
  	  	1--DDFFK(55  t* 
&*&A&A&C&CE&JO #?F;;3,,!/22 
 %*666444/  
 y G)H7011 	>00UIVVG,4'('>$GQ%<==G	AwQ5LMMMlr&   c                     d |                                  D             }t          |          dk    r?t          |d         d          r)|d         j        d| j                                        S t          d          )Nc                     g | ]}||S r2   r)   )r+   rJ   s     r%   r-   z+Aggregate.default_alias.<locals>.<listcomp>k   s$     
 
 
d>ND>N>N>Nr&      r   r8   __z$Complex expressions require an alias)r.   lenr@   r8   lowerr   )r"   r#   s     r%   default_aliaszAggregate.default_aliasi   s    
 
!88::
 
 
 {q  W[^V%D%D *1~222DIOO4E4E4EFF>???r&   c                     g S r2   r)   )r"   s    r%   get_group_by_colszAggregate.get_group_by_colsr   s    	r&   c                    | j         rdnd|d<   | j        r#|j        j        r|	 | j                            ||          \  }}| j        |                    d| j                  z  } t                      j        ||f||d|\  }}|g ||R fS # t          $ r Y nw xY w| 
                                }	d |	_        |	                                }
t          | j        |
d                   }|	                    t          |          g|
dd          z               t          t          |	          j        ||fi |S  t                      j        ||fi |S )	Nz	DISTINCT  r   template)rX   r   r   )thenrO   )r   r   features supports_aggregate_filter_clauseas_sqlfilter_templategetrX   r    r   copyr.   r	   r5   r   r   )r"   compiler
connectionextra_context
filter_sqlfilter_paramsrX   sqlparamsr_   r3   	conditionr   s               r%   r\   zAggregate.as_sqlu   s   37=$HKKbj!; 	"C :040B0B8Z0X0X-J  $3m6G6G"DM7 7  H #1%''. "# "*)	# #
 (# #KC  9& 9= 9 999 %   D yy{{"%)%@%@%B%B" 3Ea3HIII	++T)__,=@RSTSUSU@V,VWWW4uY--4j ,9   uww~h
DDmDDDs   B 
BBc                     t                                                      }| j        r
| j        |d<   | j        r
| j        |d<   |S )Nr   r   )r    _get_repr_optionsr   r   )r"   optionsr   s     r%   ri   zAggregate._get_repr_options   sI    ''++--= 	0"&-GJ; 	, $GHr&   )NTNFF)r   
__module____qualname__rX   r?   r8   r]   window_compatibler   r   r!   r0   r.   r5   r9   propertyrS   rU   r\   ri   __classcell__r   s   @r%   r   r      sK       :HD5ON! &+4
0 
0 
0 
0 
0 
0 
0S S S S S2 2 2 2 25 5 5 5 5
 SX, , , , , ,\ @ @ X@  E E E E E>        r&   r   c                       e Zd ZdZd ZdZdS )r   AVGTNr   rk   rl   functionr8   r   r)   r&   r%   r   r              HDNNNr&   r   c                   D     e Zd ZdZd Z e            ZdZdZd fd	Z	 xZ
S )r   COUNTTr   Nc                     |dk    rt                      }t          |t                     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   s       r%   r!   zCount.__init__   sh    Jj$'' 	YF,>WXXX<<F<e<<<<<r&   r2   )r   rk   rl   rt   r8   r
   r:   r   r   r!   ro   rp   s   @r%   r   r      s]        HD<>>LN= = = = = = = = = =r&   r   c                       e Zd ZdZd ZdS )r   MAXNr   rk   rl   rt   r8   r)   r&   r%   r   r              HDDDr&   r   c                       e Zd ZdZd ZdS )r   MINNr   r)   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   Fc                 R    |rdnd| _          t                      j        |fi | d S )NSTDDEV_SAMP
STDDEV_POPrt   r    r!   r"   r|   sampler$   r   s       r%   r!   zStdDev.__init__   s8    )/A\--u-----r&   c                 b    i t                                                      d| j        dk    iS )Nr   r   r    ri   rt   r/   s    r%   ri   zStdDev._get_repr_options   s/    X%''++--Xx-9WXXXr&   Fr   rk   rl   r8   r!   ri   ro   rp   s   @r%   r   r      sd        D. . . . . .Y Y Y Y Y Y Y Y Yr&   r   c                       e Zd ZdZd ZdZdS )r   SUMTNrs   r)   r&   r%   r   r      ru   r&   r   c                   .     e Zd Zd Zd fd	Z fdZ xZS )r   Fc                 R    |rdnd| _          t                      j        |fi | d S )NVAR_SAMPVAR_POPr   r   s       r%   r!   zVariance.__init__   s8    &,;

)--u-----r&   c                 b    i t                                                      d| j        dk    iS )Nr   r   r   r/   s    r%   ri   zVariance._get_repr_options   s/    U%''++--Ux*9TUUUr&   r   r   rp   s   @r%   r   r      sd        D. . . . . .V V V V V V V 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   r)   r&   r%   <module>r      s4    = < < < < < < < F F F F F F F F F F F F F F 0 0 0 0 0 0 : : : : : :       
	 	 	@ @ @ @ @ @ @ @F    
!8)   = = = = =I = = =    )   
    )   
Y Y Y Y Y$i Y Y Y    
   V V V V V&	 V V V V Vr&   