
    i6'                       d Z ddlmZ ddl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ZddlZddlZddlZ G d d      Z e       Zeee
fZej.                  j1                         D  ci c]  \  } } e|e      s||  c}} Zd	Zej8                  j:                  ej8                  j<                  ej8                  j>                  fZ d
 Z!d Z"d Z#ddZ$d Z%efdZ&efdZ'efdZ(efdZ)d Z*ddZ+d Z,d Z- G d de.      Z/d Z0yc c}} w )z-Generic utility methods not part of main API.    )annotationsN)HashableIterableMappingSequence)Decimalwrapsc                      e Zd Zy)UnsetN)__name__
__module____qualname__     F/home/Script/Script_env/lib/python3.12/site-packages/pydash/helpers.pyr   r      s    r   r   )__globals____builtins__c                l    t        |      }d|v r|d   nt        | |      }t        ||g      } | |d|  S )zaInspect argspec of `iteratee` function and only pass the supported arguments when calling
    it.argcountN)lengetargcountmin)iterateeargskwargsmaxargsr   argstops         r   callitr   (   sH     $iG%/6%9vj!{8U\?]H7H%&GT(7^$$r   c                    t        | d      r| j                  }||S |S t        | t              st	        j
                  |       rd}|S d}	 t        | |      }|S # t        $ r Y |S w xY w)z+Return argument count of iteratee function.	_argcount   )hasattrr!   
isinstancetypepyd
is_builtin_getargcount	TypeError)r   r   r   s      r   r   r   2   s    x% %%#/x<W<(D!S^^H%= O 	#Hg6H O  	O	s   A 	A&%A&c                .   d }	 t        j                  |       }t        |j                  j	                               }t        d |D              s.|D cg c]  }|j                  t        v s| }}t        |      }	 |tt        | t        j                  t        j                  t        j                   f      rd}n8t        j"                  |       }|r!|j$                  st        |j&                        }||}|S c c}w # t        t        t        f$ r Y w xY w)Nc              3  j   K   | ]+  }|j                   t        j                  j                  k(   - y wN)kindinspect	ParameterVAR_POSITIONAL).0params     r   	<genexpr>z_getargcount.<locals>.<genexpr>Z   s%     Ve5::!2!2!A!AAVs   13r"   )r.   	signaturelist
parametersvaluesanyr-   POSITIONAL_PARAMETERSr   r)   
ValueErrorAttributeErrorr$   operator
itemgetter
attrgettermethodcallergetfullargspecvarargsr   )r   r   r   sigparamsppositional_paramsargspecs           r   r(   r(   K   s    H.
 ) cnn++-.VvVV,2 Vqaff@U6U V V,-H h!4!4h6I6I8K`K` abH,,X6Gww||,O' !W z>2 s   C= C8*C8=DDc              #     K   |t         j                  }d}n"t        j                  |      }t        |d      }t	        |       }|rt        t        |            }|D ]  \  }}t        |||| |      ||| f  yw)z3Return iterative iteratee based on collection type.Nr"      )r   )r   )r&   identityr   r   iteratorreversedtupler   )objr   reversecbkr   itemskeyitems           r   iteriterateerS   q   s     llll8$sA.SMEu& M	TS$S8<dCLLMs   A:A<c                0   t        | t              r| j                         S t        | d      r| j	                         S t        | d      rt        | j                               S t        | t              rt        |       S t        | di       j                         S )z&Return iterative based on object type.	iteritemsrP   __dict__)	r$   r   rP   r#   rU   iterr   	enumerategetattr)rM   s    r   rJ   rJ      su    #wyy{	k	"}}	g	CIIK  	C	"~sJ+1133r   c                (   t        | t              rt        | ||      }nOt        | t        t        f      rt        | t
              rt        | d      rt        | ||      }nt        | ||      }|t        u rt        dt        |        d| d      |S )a  
    Safely get an item by `key` from a sequence or mapping object when `default` provided.

    Args:
        obj: Sequence or mapping to retrieve item from.
        key: Key or index identifying which item to retrieve.
        default: Default value to return if `key` not found in `obj`.

    Returns:
        `obj[key]`, `obj.key`, or `default`.

    Raises:
        KeyError: If `obj` is missing key, index, or attribute and no default value provided.
    default_fieldszObject "z" does not have key "")r$   dict_base_get_dictr   r   rL   r#   _base_get_object_base_get_itemUNSETKeyErrorreprrM   rQ   r\   values       r   base_getrh      s     #tsC9gx01373	#: !c7;sC9~$s),A#aHIILr   c                    | j                  |t              }|t        u r0|}t        |t              s	 | j                  t        |      |      }|S |S # t        $ r Y |S w xY wr,   )getrc   r$   int	Exceptionrf   s       r   r`   r`      se    GGCE~#s#C'2 L5L  Ls   A 	AAc                    	 | |   S # t         $ r Y nw xY wt        |t              s	 | t        |         S # t         $ r Y |S w xY w|S r,   )rl   r$   rk   )rM   rQ   r\   s      r   rb   rb      s_    3x  c3	s3x=  	N	 Ns    	5 	AAc                    t        | |t              }|t        u rt        |       |}	 t        | |      }|S |S # t        $ r Y |S w xY w)Nr[   )rb   rc   _raise_if_restricted_keyrY   rl   rf   s       r   ra   ra      sY    3U3E~ %	C%E L5L  	L	s   9 	AAc                 @    | D ]  }|t         v st        d|d       y )Nzaccess to restricted key z is not allowed)RESTRICTED_KEYSrd   )keysrQ   s     r   ro   ro      s0     O/!6sg_MNNOr   c                T   t        | t              r|s|| vr|| |<   | S t        | t              rRt        |      }|t	        |       k  r	|r5|| |<   | S |t	        |       kD  r| dg|z  z   d| | dd | j                  |       | S |st        | |      s| t        |       t        | ||       | S )a  
    Set an object's `key` to `value`. If `obj` is a ``list`` and the `key` is the next available
    index position, append to list; otherwise, pad the list of ``None`` and then append to the list.

    Args:
        obj: Object to assign value to.
        key: Key or index to assign to.
        value: Value to assign.
        allow_override: Whether to allow overriding a previously set key.
    N)	r$   r_   r5   rk   r   appendr#   ro   setattr)rM   rQ   rg   allow_overrides       r   base_setrw      s     #tS^CH" J! 
C	#hS> C J SX~ ,ds3AJJu
 J	 S 1s %S% Jr   c                .    | |y| y|y| |kD  | |k  z
  S )z
    Replacement for built-in function ``cmp`` that was removed in Python 3.

    Note: Mainly used for comparison during sorting.
    r   r"   r   )abs     r   cmpr|     s3     	yQY	
	
Ea!er   c                    |j                  |       }|d   }|*t        |      st        |t        t        f      s||}|dd }||fS )zvTry to find iteratee function passed in either as a keyword argument or as the last
    positional argument in `args`.ry   N)rj   callabler$   r_   str)iteratee_keywordr   r   r   last_args        r   parse_iterateer     sV     zz*+HBxHjD#;?8CSCRyT>r   c                  ,    e Zd ZdZd Zd Zd Zd ZeZy)iterator_with_defaultz<A wrapper around an iterator object that provides a default.c                2    t        |      | _         || _        y r,   )rW   r\   )self
collectionr\   s      r   __init__ziterator_with_default.__init__#  s    $	r   c                    | S r,   r   )r   s    r   __iter__ziterator_with_default.__iter__'  s    r   c                4    | j                   }t        | _         |S r,   )r\   rc   r   rets     r   next_defaultz"iterator_with_default.next_default*  s    ll
r   c                j    t        | j                  | j                               }|t        u rt        |S r,   )nextrW   r   rc   StopIterationr   s     r   __next__ziterator_with_default.__next__/  s-    499d//12%<
r   N)	r   r   r   __doc__r   r   r   r   r   r   r   r   r   r      s     F
 Dr   r   c                .     t                fd       }|S )z
    This is a decorator which can be used to mark functions as deprecated.

    It will result in a warning being emitted when the function is used.
    c                 h    t        j                  dj                   dt        d        | i |S )NzCall to deprecated function .rH   )category
stacklevel)warningswarnr   DeprecationWarning)r   r   funcs     r   wrapperzdeprecated.<locals>.wrapper?  s7    *4==/;'	

 T$V$$r   r	   )r   r   s   ` r   
deprecatedr   8  s"     4[% % Nr   )NF)T)1r   
__future__r   builtinscollections.abcr   r   r   r   decimalr   	functoolsr
   r.   r<   r   pydashr&   r   rc   rk   floatNUMBER_TYPESrV   rP   r$   BUILTINSrq   r/   r0   POSITIONAL_ONLYPOSITIONAL_OR_KEYWORDr9   r   r   r(   rS   rJ   rh   r`   rb   ra   ro   rw   r|   r   objectr   r   )rQ   rg   s   00r   <module>r      s)   3 "  A A      
   	 UG$ *2):):)@)@)Bb:3jQVX`FaE3Jb 2 $$%%++ %2#LM$4  % B &+ 
 &+  (- 	OBF 0{ cs   (D:D