
    ih                     T   d Z ddlmZmZ ddlmZ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ColPairs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         R/var/www/histauto/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 r3   )r   r!   set_source_expressions)r#   exprsr   s     r&   r6   z Aggregate.set_source_expressions7   s'    #ww--e444r'   c           
      @   t                                          ||||          }|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!   r:   get_refsannotations
is_summaryr   r9   r   r/   	enumeratecontains_aggregatehasattrreprr   r+   r;   r	   r   )r#   queryallow_joinsreuse	summarizefor_savecrefr$   indexexprbefore_resolvedr9   r   coalescer   s                  r&   r:   zAggregate.resolve_expression;   s    GG&&uk5)LL 	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 r3   r*   )r,   rK   s     r&   r.   z+Aggregate.default_alias.<locals>.<listcomp>f   s$     
 
 
d>ND>N>N>Nr'      r   r9   __z$Complex expressions require an alias)r/   lenrA   r9   lowerr   )r#   r$   s     r&   default_aliaszAggregate.default_aliasd   s    
 
!88::
 
 
 {q  W[^V%D%D *1~222DIOO4E4E4EFF>???r'   c                     g S r3   r*   )r#   s    r&   get_group_by_colszAggregate.get_group_by_colsm   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)rY   r   r   )thenrP   )r   r   features supports_aggregate_filter_clauseas_sqlfilter_templategetrY   r!   r   copyr/   r
   r6   r   r   )r#   compiler
connectionextra_context
filter_sqlfilter_paramsrY   sqlparamsr`   r4   	conditionr   s               r&   r]   zAggregate.as_sqlp   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&   rj   zAggregate._get_repr_options   sI    ''++--= 	0"&-GJ; 	, $GHr'   )NTNFF)r   
__module____qualname__rY   r@   r9   r^   window_compatibler   r    r"   r1   r/   r6   r:   propertyrT   rV   r]   rj   __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' ' ' ' ' 'R @ @ X@  E E E E E>        r'   r   c                       e Zd ZdZd ZdZdZdS )r   AVGTrP   Nr   rl   rm   functionr9   r   arityr*   r'   r&   r   r      "        HDNEEEr'   r   c                   V     e Zd ZdZd Z e            ZdZdZdZ	dZ
d fd	Z fdZ xZS )	r   COUNTTr   rP   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'   c                 
    t                      j        |i |}|j        d         }t          |t                    rF| j        rt          d          |                                }t          |d         |j	                  S |S )Nr   z6COUNT(DISTINCT) doesn't support composite primary keys)r   )
r!   r:   r4   r|   r   r   r}   get_colsr   r   )r#   argskwargsresultrK   colsr   s         r&   r:   zCount.resolve_expression   s    ++T<V<<(+ dH%% 	8}  L   ==??Da7777r'   r3   )r   rl   rm   ru   r9   r   r;   r   r    rv   allows_composite_expressionsr"   r:   rp   rq   s   @r&   r   r      s        HD<>>LNE#' = = = = = =        r'   r   c                       e Zd ZdZd ZdZdS )r   MAXrP   Nr   rl   rm   ru   r9   rv   r*   r'   r&   r   r              HDEEEr'   r   c                       e Zd ZdZd ZdZdS )r   MINrP   Nr   r*   r'   r&   r   r      r   r'   r   c                   2     e Zd Zd ZdZd fd	Z fdZ xZS )r   rP   Fc                 R    |rdnd| _          t                      j        |fi | d S )NSTDDEV_SAMP
STDDEV_POPru   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!   rj   ru   r0   s    r&   rj   zStdDev._get_repr_options   s/    X%''++--Xx-9WXXXr'   Fr   rl   rm   r9   rv   r"   rj   rp   rq   s   @r&   r   r      si        DE. . . . . .Y Y Y Y Y Y Y Y Yr'   r   c                       e Zd ZdZd ZdZdZdS )r   SUMTrP   Nrt   r*   r'   r&   r   r      rw   r'   r   c                   2     e Zd Zd ZdZd fd	Z fdZ xZS )r   rP   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   r0   s    r&   rj   zVariance._get_repr_options   s/    U%''++--Ux*9TUUUr'   r   r   rq   s   @r&   r   r      si        DE. . . . . .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	   r
   django.db.models.fieldsr   django.db.models.functionsr   !django.db.models.functions.mixinsr   r   __all__r   r   r   r   r   r   r   r   r*   r'   r&   <module>r      s;    = < < < < < < < P P P P P P P P P P P P P P P P 0 0 0 0 0 0 / / / / / /       
	 	 	{ { { { { { { {|    
!8)       I   B    )       )   	Y 	Y 	Y 	Y 	Y$i 	Y 	Y 	Y    
   	V 	V 	V 	V 	V&	 	V 	V 	V 	V 	Vr'   