
     h                      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 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)CaseFuncStar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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         W/var/www/html/Sam_Eipo/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>0   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                 l    t                                                      }| j        r|| j        gz   S |S N)r   r,   r   )r    source_expressionsr   s     r#   r,   z Aggregate.get_source_expressions2   s8    "WW;;==; 	6%55!!r$   c                     | j         o|                                | _         t                                          |          S r0   )r   popr   set_source_expressions)r    exprsr   s     r#   r4   z Aggregate.set_source_expressions8   s1    k1eiikkww--e444r$   c           
         t                                          ||||          }|j        o|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|                    ||||          }d |_        t          |||j                  }|j        |_        |S )NnamezCannot compute z('z'): 'z' is an aggregateresolve_expression)output_field)r   r8   r   r   r,   	enumeratecontains_aggregatehasattrr7   reprr   r   r	   r(   
is_summary)r    queryallow_joinsreuse	summarizefor_savecr!   indexexprbefore_resolvedr7   r   coalescer   s                 r#   r8   zAggregate.resolve_expression<   s    GG&&uk5)LL8 
 ; ;;y!
 !
  	  	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 	W00UIVVG	AwQ5LMMMlr$   c                     |                                  }t          |          dk    r?t          |d         d          r)|d         j        d| j                                        S t          d          )N   r   r7   __z$Complex expressions require an alias)r,   lenr<   r7   lowerr   )r    r!   s     r#   default_aliaszAggregate.default_alias]   so    1133{q  W[^V%D%D *1~222DIOO4E4E4EFF>???r$   c                     g S r0   r'   )r    aliass     r#   get_group_by_colszAggregate.get_group_by_colsd   s    	r$   c                    | j         rdnd|d<   | j        r|j        j        rk| j                            ||          \  }}| j        |                    d| j                  z  } t                      j        ||f||d|\  }}|g ||R fS | 	                                }	d |	_        |	
                                }
t          | j        |
d                   }|	                    t          |          g|
dd          z               t          t          |	          j        ||fi |S  t                      j        ||fi |S )	Nz	DISTINCT  r   template)rT   r   r   )thenrJ   )r   r   features supports_aggregate_filter_clauseas_sqlfilter_templategetrT   r   copyr,   r   r4   r   r   )r    compiler
connectionextra_context
filter_sqlfilter_paramsrT   sqlparamsr[   r1   	conditionr   s               r#   rX   zAggregate.as_sqlg   s   37=$HKKbj!; 	"C ,0K,>,>x,T,T)
M/-2C2C3 3  -eggn &%	 
 $ V 5f5}5555yy{{"%)%@%@%B%B" 3Ea3HIII	++T)__,=@RSTSUSU@V,VWWW4uY--4j ,9   uww~h
DDmDDDr$   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   sI    ''++--= 	0"&-GJ; 	, $GHr$   )NTNFFr0   )r   
__module____qualname__rT   r;   r7   rY   window_compatibler   r   r   r.   r,   r4   r8   propertyrN   rQ   rX   re   __classcell__r   s   @r#   r   r      sP       :HD5ON! &+4
0 
0 
0 
0 
0 
0 
0S S S S S" " " " "5 5 5 5 5
 SX     B @ @ X@   E E E E E6        r$   r   c                       e Zd ZdZd ZdZdS )r   AVGTNr   rg   rh   functionr7   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$   r0   )r   rg   rh   rp   r7   r   r9   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dS )r   MAXNr   rg   rh   rp   r7   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rp   r   r   r    rx   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   re   rp   r-   s    r#   re   zStdDev._get_repr_options   s/    X%''++--Xx-9WXXXr$   Fr   rg   rh   r7   r   re   rk   rl   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   SUMTNro   r'   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   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#   re   zVariance._get_repr_options   s/    U%''++--Ux*9TUUUr$   r   r   rl   s   @r#   r   r      sd        D. . . . . .V V V V V V V V Vr$   r   N)__doc__django.core.exceptionsr   django.db.models.expressionsr   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      s(    . - - - - - ? ? ? ? ? ? ? ? ? ? ? ? 0 0 0 0 0 0 : : : : : :       
	 	 	o o o o o o o od    
!8)   = = = = =I = = =    )   
    )   
Y Y Y Y Y$i Y Y Y    
   V V V V V&	 V V V V Vr$   