
    01i)                       S r SSKJr  SSKJr  SSKJrJrJrJ	r	J
r
JrJrJrJrJrJrJrJr  SSKJr  SSKJr  SSKJrJr  SSKJr  SS	KJr  SS
KJrJ r J!r!  SSK"J#r#J$r$J%r%J&r&J'r'   " S S5      r( " S S\(5      r)\S%S j5       r*\    S&S j5       r*S'S jr* " S S\(5      r+ " S S\(5      r, " S S\(5      r-\" S\'\#\&\%5      r. " S S\-5      r/ " S S\-5      r0 " S S\(5      r1 " S  S!\(5      r2 " S" S#5      r3g$)(z
Aggregation functions
    )annotations)Decimal)AnyCallableDictIterableListMappingMutableMappingOptionalSetTupleTypeVarUnionoverload)XSD)type_promotion)_eval_val)numeric)	CompValue)FrozenBindingsNotBoundErrorSPARQLTypeError)BNode
IdentifierLiteralURIRefVariablec                  @    \ rS rSrSrS	S jrS
S jrS
S jrSS jrSr	g)Accumulator!   z7abstract base class for different aggregation functionsc                    U   U   UR                   U l        UR                  U l        UR                  (       d  U R
                  U l        SU l        g UR                  U l        [        5       U l        g NF)	resvarvarsexprdistinct	dont_careuse_rowsetseen)selfaggregations     Z/home/james-whalen/.local/lib/python3.13/site-packages/rdflib/plugins/sparql/aggregates.py__init__Accumulator.__init__$   sQ    ??$$	##>>DL!DM'00DM"%%DI    c                    g)zskips distinct testT r.   rows     r0   r*   Accumulator.dont_care1       r3   c                H    [        U R                  U5      U R                  ;  $ )ztests distinct with set)r   r(   r-   r6   s     r0   r+   Accumulator.use_row5   s    TYY$DII55r3   c                <    U R                  5       XR                  '   g)zsets final value in bindingsN)	get_valuer&   r.   bindingss     r0   	set_valueAccumulator.set_value9   s     "^^-r3   )r)   r(   r-   r+   r&   Nr/   r   r7   r   returnboolr?   z$MutableMapping[Variable, Identifier]rD   None)
__name__
__module____qualname____firstlineno____doc__r1   r*   r+   r@   __static_attributes__r5   r3   r0   r!   r!   !   s    A(6.r3   r!   c                  ^   ^  \ rS rSrS	U 4S jjrS
S jrSS jrSS jrSS jrSS jr	Sr
U =r$ )Counter?   c                ~   > [         [        U ]  U5        SU l        U R                  S:X  a  U R
                  U l        g g )Nr   *)superrO   r1   valuer(   eval_full_roweval_rowr.   r/   	__class__s     r0   r1   Counter.__init__@   s9    gt%k2
99 !..DM r3   c                     U R                  U5      nU =R                  S-  sl        U R                  (       a  U R                  R                  U5        g g ! [         a     g f = fN   )rV   r   rT   r)   r-   add)r.   r7   
aggregatorvals       r0   updateCounter.updateH   sT    	--$C 	

a
==IIMM# 	  		s   A 
A#"A#c                ,    [        U R                  5      $ N)r   rT   r.   s    r0   r=   Counter.get_valueR   s    tzz""r3   c                .    [        U R                  U5      $ rc   )r   r(   r6   s     r0   rV   Counter.eval_rowU   s    TYY$$r3   c                    U$ rc   r5   r6   s     r0   rU   Counter.eval_full_rowX   s    
r3   c                `     U R                  U5      U R                  ;  $ ! [         a     gf = fr$   )rV   r-   r   r6   s     r0   r+   Counter.use_row[   s1    	==%TYY66 		s     
--)rV   rT   rB   r7   r   r^   
AggregatorrD   rG   rD   r   )r7   r   rD   r   )r7   r   rD   r   rC   )rH   rI   rJ   rK   r1   r`   r=   rV   rU   r+   rM   __classcell__rX   s   @r0   rO   rO   ?   s&    /#% r3   rO   c                     g rc   r5   argss    r0   type_safe_numbersrt   c   s    14r3   c                     g rc   r5   rr   s    r0   rt   rt   g   s      #r3   c                     [        S U  5       5      (       a'  [        S U  5       5      (       a  [        [        U 5      $ U $ )Nc              3  B   #    U  H  n[        U[        5      v   M     g 7frc   )
isinstancefloat.0args     r0   	<genexpr>$type_safe_numbers.<locals>.<genexpr>n   s     
2Tc:c5!!T   c              3  B   #    U  H  n[        U[        5      v   M     g 7frc   )rx   r   rz   s     r0   r}   r~   n   s      ;,0S
3  Dr   )anymapry   rr   s    r0   rt   rt   m   sB    

2T
222s ;,0; 8 8 5$ Kr3   c                  @   ^  \ rS rSrSU 4S jjrSS jrSS jrSrU =r$ )	Sumw   c                H   > [         [        U ]  U5        SU l        S U l        g Nr   )rS   r   r1   rT   datatyperW   s     r0   r1   Sum.__init__x   s     c4!+.
'+r3   c                t    [        U R                  U5      nU R                  nUc  UR                  nO[        XCR                  5      nX@l        [	        [        U R                  [        U5      5      5      U l        U R                  (       a  U R                  R                  U5        g g ! [         a     g f = frc   )r   r(   r   r   sumrt   rT   r   r)   r-   r]   r   r.   r7   r^   rT   dts        r0   r`   
Sum.update}   s    	$))S)EBz^^ $B7M.tzz75>JKDJ}}		e$  		s   B&B* *
B76B7c                >    [        U R                  U R                  S9$ )N)r   )r   rT   r   rd   s    r0   r=   Sum.get_value   s    tzzDMM::r3   )r   rT   rB   rl   rn   	rH   rI   rJ   rK   r1   r`   r=   rM   ro   rp   s   @r0   r   r   w   s    ,
"; ;r3   r   c                  @   ^  \ rS rSrSU 4S jjrSS jrSS jrSrU =r$ )	Average   c                V   > [         [        U ]  U5        SU l        SU l        S U l        g r   )rS   r   r1   counterr   r   rW   s     r0   r1   Average.__init__   s'    gt%k2'+r3   c                    [        U R                  U5      nU R                  n[        [	        U R                  [        U5      5      5      U l        Uc  UR                  nO[        XCR                  5      nX@l        U R                  (       a  U R                  R                  U5        U =R                  S-  sl
        g ! [         a     g [         a     g f = fr[   )r   r(   r   r   rt   r   r   r)   r-   r]   r   r   r   r   s        r0   r`   Average.update   s    	$))S)EB,TXXwu~FGDHz^^ $B7M}}		e$LLAL 	 		s   B;B> >
C
	CCc                @   U R                   S:X  a  [        S5      $ U R                  [        R                  [        R
                  4;   a"  [        U R                  U R                   -  5      $ [        [        U R                  5      [        U R                   5      -  5      $ r   )r   r   r   r   ry   doubler   r   rd   s    r0   r=   Average.get_value   sk    <<11:==SYY

33488dll2337488,wt||/DDEEr3   )r   r   r   rB   rl   rn   r   rp   s   @r0   r   r      s    ,(F Fr3   r   c                  D   ^  \ rS rSrSrSU 4S jjrSS jrS	S jrSrU =r	$ )
Extremum   z+abstract base class for Minimum and Maximumc                `   > U   [         [        U ]  U5        S U l        U R                  U l        g rc   )rS   r   r1   rT   r*   r+   rW   s     r0   r1   Extremum.__init__   s)    h&{3
 ~~r3   c                b    U R                   b"  [        U R                   5      XR                  '   g g rc   )rT   r   r&   r>   s     r0   r@   Extremum.set_value   s&    ::!!(!4HXX "r3   c                     U R                   c  [        U R                  U5      U l         g U R                  U R                   [        U R                  U5      5      U l         g ! [         a     g [
         a     g f = frc   )rT   r   r(   comparer   r   r.   r7   r^   s      r0   r`   Extremum.update   sc    
	zz!"499c2
 "\\$**eDIIs6KL
 	 		s   (A! 5A! !
A9-	A98A9)r+   rT   rB   rF   rl   )
rH   rI   rJ   rK   rL   r1   r@   r`   rM   ro   rp   s   @r0   r   r      s    5&5
 r3   r   _ValueTc                      \ rS rSrSS jrSrg)Minimum   c                    [        X[        S9$ N)key)minr   r.   val1val2s      r0   r   Minimum.compare       44((r3   r5   Nr   r   r   r   rD   r   rH   rI   rJ   rK   r   rM   r5   r3   r0   r   r          )r3   r   c                      \ rS rSrSS jrSrg)Maximum   c                    [        X[        S9$ r   )maxr   r   s      r0   r   Maximum.compare   r   r3   r5   Nr   r   r5   r3   r0   r   r      r   r3   r   c                  @   ^  \ rS rSrSrU 4S jrSS jrSS jrSrU =r	$ )	Sample   ztakes the first eligible valuec                N   > [         [        U ]  U5        U R                  U l        g rc   )rS   r   r1   r*   r+   rW   s     r0   r1   Sample.__init__   s    fd$[1 ~~r3   c                     [        U R                  U5      UR                  U R                  '   UR                  U R                  	 g ! [
         a     g f = frc   )r   r(   r?   r&   accumulatorsr   r   s      r0   r`   Sample.update   sJ    	,1$))S,AJ)''1 		s   AA 
AAc                    g rc   r5   rd   s    r0   r=   Sample.get_value   r9   r3   )r+   rl   )rD   rG   )
rH   rI   rJ   rK   rL   r1   r`   r=   rM   ro   rp   s   @r0   r   r      s    (& r3   r   c                  L   ^  \ rS rSr% S\S'   SU 4S jjrS	S jrS
S jrSrU =r	$ )GroupConcat   zList[Literal]rT   c                   > [         [        U ]  U5        / U l        UR                  c  SU l        g UR                  U l        g )N )rS   r   r1   rT   	separatorrW   s     r0   r1   GroupConcat.__init__   s9    k4)+6
  ( DN(22DNr3   c                    [        U R                  U5      n[        U[        5      (       a  g U R                  R                  U5        U R                  (       a  U R                  R                  U5        g g ! [         a     g f = frc   )	r   r(   rx   r   rT   appendr)   r-   r]   )r.   r7   r^   rT   s       r0   r`   GroupConcat.update  si    	$))S)E%//JJe$}}		e$   		s   +A7 AA7 7
BBc                l    [        U R                  R                  S U R                   5       5      5      $ )Nc              3  8   #    U  H  n[        U5      v   M     g 7frc   )str)r{   vs     r0   r}   (GroupConcat.get_value.<locals>.<genexpr>  s     *F:a3q66:s   )r   r   joinrT   rd   s    r0   r=   GroupConcat.get_value  s&    t~~***F4::*FFGGr3   )r   rT   rB   rl   rn   )
rH   rI   rJ   rK   __annotations__r1   r`   r=   rM   ro   rp   s   @r0   r   r      s    3"H Hr3   r   c                  J    \ rS rSrSr\\\\\	\
\S.rS	S jrS
S jrSS jrSrg)rm   i  z&combines different Accumulator objects)Aggregate_CountAggregate_SampleAggregate_SumAggregate_AvgAggregate_MinAggregate_MaxAggregate_GroupConcatc                    0 U l         0 U l        U Hb  nU R                  R                  UR                  5      nUc  [        SUR                  -   5      eU" U5      U R                  UR                  '   Md     g )NzUnknown aggregate function )r?   r   accumulator_classesgetname	Exceptionr%   )r.   aggregationsaaccumulator_classs       r0   r1   Aggregator.__init__&  sj    4646A $ 8 8 < <QVV D ( = FGG'8';Daee$	 r3   c                    [        U R                  R                  5       5       H,  nUR                  U5      (       d  M  UR	                  X5        M.     g)zupdate all own accumulatorsN)listr   valuesr+   r`   )r.   r7   accs      r0   r`   Aggregator.update/  s=    
 ))0023C{{3

3% 4r3   c                    U R                   R                  5        H  nUR                  U R                  5        M      U R                  $ )zcalculate and set last values)r   r   r@   r?   )r.   r   s     r0   get_bindingsAggregator.get_bindings8  s5    $$++-CMM$--( .}}r3   )r   r?   N)r   zList[CompValue])r7   r   rD   rG   )rD   zMapping[Variable, Identifier])rH   rI   rJ   rK   rL   rO   r   r   r   r   r   r   r   r1   r`   r   rM   r5   r3   r0   rm   rm     s3    0 #"   !,<&r3   rm   N)rs   intrD   z
Tuple[int])rs   Union[Decimal, float, int]rD   zTuple[Union[float, int]])rs   r   rD   zIterable[Union[float, int]])4rL   
__future__r   decimalr   typingr   r   r   r   r	   r
   r   r   r   r   r   r   r   rdflib.namespacer   rdflib.plugins.sparql.datatypesr   rdflib.plugins.sparql.evalutilsr   r   rdflib.plugins.sparql.operatorsr   !rdflib.plugins.sparql.parserutilsr   rdflib.plugins.sparql.sparqlr   r   r   rdflib.termr   r   r   r   r   r!   rO   rt   r   r   r   r   r   r   r   r   rm   r5   r3   r0   <module>r      s   #      ! : 7 3 7 W W D D. .<!k !H 
 4 
 4 
#%## 
#
;+ ;6!Fk !FH{ < )Xufg
>)h )
)h )
[ .H+ HB# #r3   