
    /Jf1                         d dl Z d dlZd dlmZ d dlmZ d dlmZ ddddd	d	d
d
d
ddddZddddddddZ	d Z
 G d de          Z G d de          ZdS )    N)
exceptions)string_type)get_methodsbooleanarrayobjectnullstringnumberexpref)boollistdictNoneTypeunicodestrfloatintlongOrderedDict_Projection_Expression)r   )r   r   )r   r   )r   )r   r   )r   r   r   )r   )r   r   r   r	   r
   r   r   c                        fd}|S )Nc                     | _         | S N)	signature)func	argumentss    U/home/alex/cs2snipeproduction/venv/lib/python3.11/site-packages/jmespath/functions.py_record_signaturez$signature.<locals>._record_signature'   s    "     )r   r    s   ` r   r   r   &   s$         r!   c                   $     e Zd Z fdZd Z xZS )FunctionRegistryc                     |                                   t          t          |                               |||           d S r   )_populate_function_tablesuperr$   __init__)clsnamebasesattrs	__class__s       r   r(   zFunctionRegistry.__init__.   s>    $$&&&$$--dE5AAAAAr!   c                     i }t          |           D ]>\  }}|                    d          st          |dd           }|||d||dd          <   ?|| _        d S )N_func_r   )functionr      )r   
startswithgetattrFUNCTION_TABLE)r)   function_tabler*   methodr   s        r   r&   z)FunctionRegistry._populate_function_table2   s     (,, 	 	LD&??8,, T::I$ &!*, ,tABBx( ,r!   )__name__
__module____qualname__r(   r&   __classcell__)r-   s   @r   r$   r$   -   sL        B B B B B, , , , , , ,r!   r$   c                   2   e Zd Zi Zd Zd Zd Zd Zd Zd Z	 e
ddgi          d	             Z e
dd
gi          d             Z e
g dd          d             Z e
dg i          d             Z e
dg i          d             Z e
dg i          d             Z e
dddgidg i          d             Z e
dg di          d             Z e
ddgiddgi          d             Z e
ddgiddgi          d             Z e
dddgi          d             Z e
ddgi          d             Z e
ddgi          d             Z e
ddgiddgi          d             Z e
ddgiddgi          d             Z e
dd
dgi          d              Z e
d!gdd          d"             Z e
dd
dgi          d#             Z e
ddd
gi          d$             Z e
dd
gi          d%             Z e
dd!gi          d&             Z e
dd!gi          d'             Z  e
dg i          d(             Z! e
ddgiddgi          d)             Z" e
ddgiddgi          d*             Z# e
ddgiddgi          d+             Z$d, Z%d- Z&d.S )/	Functionsc                     	 | j         |         }n%# t          $ r t          j        d|z            w xY w|d         }|d         }|                     |||            || g|R  S )NzUnknown function: %s()r0   r   )r4   KeyErrorr   UnknownFunctionError_validate_arguments)selffunction_nameresolved_argsspecr0   r   s         r   call_functionzFunctions.call_functionH   s    	:&}5DD 	: 	: 	:1(=8: : :	: 
#%	  	=IIIx-}----s    "2c                    |rl|d                              d          rQt          |          t          |          k     r0t          j        t          |          t          |          |          nPt          |          t          |          k    r0t          j        t          |          t          |          |          |                     |||          S )Nvariadic)getlenr   VariadictArityError
ArityError_type_check)rA   argsr   rB   s       r   r@   zFunctions._validate_argumentsS   s     	:2**:66 	:4yy3y>>)) 4	NNCII}> > > * YY#i..(('ID		=: : :i???r!   c                     t          t          |                    D ]/}||         d         }|r|                     ||         ||           0d S )Ntypes)rangerJ   _type_check_single)rA   actualr   rB   iallowed_typess         r   rM   zFunctions._type_check]   sc    s9~~&& 	7 	7A%aL1M 7''q	=(57 7 7	7 	7r!   c                     |                      |          \  }}t          |          j        }||vr*t          j        |||                     |          |          |r|                     ||||           d S d S r   )_get_allowed_pytypestyper7   r   JMESPathTypeError_convert_to_jmespath_type_subtype_check)rA   currentrP   rB   rU   allowed_subtypesactual_typenames          r   rR   zFunctions._type_check_singled   s     +/*C*CE*J*J''
 w--0-//.w..??H H H  	6)9 %}6 6 6 6 6	6 	6r!   c                 
   g }g }|D ]y}|                     dd          }t          |          dk    r&|\  }}|                    t          |                    n|d         }|                    t          |                    z||fS )N-      r   )splitrJ   appendREVERSE_TYPES_MAPextend)rA   rP   rU   r]   ttype_subtypes          r   rW   zFunctions._get_allowed_pytypes{   s     	; 	;AGGCOOE5zzQ!&w ''(9'(BCCCCa  !25!9::::...r!   c                    t          |          dk    r>|d         }|D ]1}t          |          j        }||vrt          j        ||||          2d S t          |          dk    rz|rzt          |d                   j        }|D ]
}||v r|}	 nt          j        ||d         ||          |D ]5}t          |          j        }||	vrt          j        ||||          2d S d S d S )Nra   r   )rJ   rX   r7   r   rY   )
rA   r\   r]   rP   rB   elementr^   firstsubtypesalloweds
             r   r[   zFunctions._subtype_check   sh     A%%  02" H H"&w--"8"*:::$6%wH H H ;H H
 !""Q&&7& $$-E, = =H$$&GE % !2!71:ue= = =" H H"&w--"8"'11$6%wH H H 2 '&&&H Hr!   rP   r   c                      t          |          S r   )absrA   args     r   	_func_abszFunctions._func_abs       3xxr!   zarray-numberc                 b    |r,t          |          t          t          |                    z  S d S r   )sumr   rJ   rq   s     r   	_func_avgzFunctions._func_avg   s,     	s88eCHHoo--4r!   T)rP   rH   c                     |D ]}||c S 	d S r   r"   )rA   r   arguments      r   _func_not_nullzFunctions._func_not_null   s/    ! 	  	 H# $	  	 r!   c                 6    t          |t                    r|S |gS r   )
isinstancer   rq   s     r   _func_to_arrayzFunctions._func_to_array   s     c4   	J5Lr!   c                 h    t          |t                    r|S t          j        |dt                    S )N),:)
separatorsdefault)r|   STRING_TYPEjsondumpsr   rq   s     r   _func_to_stringzFunctions._func_to_string   s9    c;'' 	+J:cj&)+ + + +r!   c                    t          |t          t          t          f          rd S |d S t          |t          t
          f          r|S 	 t	          |          S # t          $ r% 	 t          |          cY S # t          $ r Y Y d S w xY ww xY wr   )r|   r   r   r   r   r   
ValueErrorrq   s     r   _func_to_numberzFunctions._func_to_number   s    cD$-.. 	 4[4c5\** 		 J 3xx        ::%%%!      444  s0   A 
B"A30B3
B=BBBr   r
   c                 
    ||v S r   r"   )rA   subjectsearchs      r   _func_containszFunctions._func_contains   s      r!   )r
   r   r   c                      t          |          S r   )rJ   rq   s     r   _func_lengthzFunctions._func_length   rt   r!   c                 ,    |                     |          S r   )endswithrA   r   suffixs      r   _func_ends_withzFunctions._func_ends_with   s    v&&&r!   c                 ,    |                     |          S r   )r2   r   s      r   _func_starts_withzFunctions._func_starts_with   s      (((r!   c                 z    t          |t                    r|d d d         S t          t          |                    S )NrG   )r|   r   r   reversedrq   s     r   _func_reversezFunctions._func_reverse   s8    c;'' 	'ttt9&&&r!   c                 *    t          j        |          S r   )mathceilrq   s     r   
_func_ceilzFunctions._func_ceil   s    y~~r!   c                 *    t          j        |          S r   )r   floorrq   s     r   _func_floorzFunctions._func_floor   s    z#r!   zarray-stringc                 ,    |                     |          S r   )join)rA   	separatorr   s      r   
_func_joinzFunctions._func_join   s    ~~e$$$r!   r   c                 p    g }|D ]0}|                     |                    |j        |                     1|S r   )rd   visit
expression)rA   r   rr   resultrk   s        r   	_func_mapzFunctions._func_map   sC     	D 	DGMM&,,v'8'BBCCCCr!   c                 (    |rt          |          S d S r   )maxrq   s     r   	_func_maxzFunctions._func_max        	s88O4r!   r   c                 >    i }|D ]}|                     |           |S r   )update)rA   r   mergedrr   s       r   _func_mergezFunctions._func_merge  s0     	 	CMM#r!   c                 (    |rt          |          S d S r   )minrq   s     r   	_func_minzFunctions._func_min  r   r!   c                 :    t          t          |                    S r   )r   sortedrq   s     r   
_func_sortzFunctions._func_sort  s    F3KK   r!   c                      t          |          S r   )rv   rq   s     r   	_func_sumzFunctions._func_sum  rt   r!   c                 D    t          |                                          S r   )r   keysrq   s     r   
_func_keyszFunctions._func_keys  s     CHHJJr!   c                 D    t          |                                          S r   )r   valuesrq   s     r   _func_valueszFunctions._func_values"  s    CJJLL!!!r!   c                    t          |t                    rdS t          |t                    rdS t          |t                    rdS t          |t                    rdS t          |t
          t          f          rdS |dS d S )Nr
   r   r   r   r   r	   )r|   r   r   r   r   r   r   rq   s     r   
_func_typezFunctions._func_type&  s    c;'' 	8T"" 		9T"" 	7T"" 	8eS\** 	8[6 [r!   c           	      H   |s|S |                      t          |                    |j        |d                             j                  }|dvrt          j        d|d         |ddg          |                     ||gd          }t          t          ||                    S )Nr   )r   r
   sort_byr
   r   key)
rZ   rX   r   r   r7   r   rY   _create_key_funcr   r   )rA   r   r   required_typekeyfuncs        r   _func_sort_byzFunctions._func_sort_by5  s     	L 66f/q::;;DF F 444.58]Xx4HJ J J'')6(13 3 F5g...///r!   c                 ^    |                      |ddgd          }|rt          ||          S d S )Nr   r
   min_byr   )r   r   rA   r   r   r   s       r   _func_min_byzFunctions._func_min_byI  F    '')18(<(02 2  	u'****4r!   c                 ^    |                      |ddgd          }|rt          ||          S d S )Nr   r
   max_byr   )r   r   r   s       r   _func_max_byzFunctions._func_max_byS  r   r!   c                       fd}|S )Nc                                          j        |           }t          |          j        }                    |          }|vrt          j        ||          |S r   )r   r   rX   r7   rZ   r   rY   )xr   r^   jmespath_typerU   r   rB   rA   s       r   r   z+Functions._create_key_func.<locals>.keyfunc^  sk    \\&"3Q77F"6ll3O ::?KKMM11 2!6=-I I IMr!   r"   )rA   r   rU   rB   r   s   ```` r   r   zFunctions._create_key_func]  s5    	 	 	 	 	 	 	 	 r!   c                 8    t                               |d          S )Nunknown)	TYPES_MAPrI   )rA   pyobjects     r   rZ   z#Functions._convert_to_jmespath_typei  s    }}Xy111r!   N)'r7   r8   r9   r4   rE   r@   rM   rR   rW   r[   r   rs   rw   rz   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rZ   r"   r!   r   r<   r<   C   s       N	. 	. 	.@ @ @7 7 76 6 6./ / /H H H8 Y($%%  &% Y.)*++  ,+ Y..//    0/ 
 Y}   Y}+ + + Y}       Y'8,-}==! ! >=! Y666788  98 Y($w
&;<<' ' =<' Y($w
&;<<) ) =<) Y'8,-..' ' /.' Y($%%  &% Y($%%  &% Y($w0@&ABB% % CB% Y($w	&:;;  <; Y..9:;;  <; Y(6677  87 Y..9:;;  <; Y..9:;;! ! <;! Y.)*++  ,+ Y($%%    &% 
 Y($%%" " &%" Y}   Y'#gz%:;;0 0 <;0& Y'#gz%:;;  <; Y'#gz%:;;  <;
 
 
2 2 2 2 2r!   r<   )	metaclass)r   r   jmespathr   jmespath.compatr   r   r   r   re   r   rX   r$   r<   r"   r!   r   <module>r      s!           6 6 6 6 6 6 ' ' ' ' ' '
  	$ $& &    , , , , ,t , , ,,g2 g2 g2 g2 g2* g2 g2 g2 g2 g2 g2r!   