
    4Rj73                       d dl mZ d dlZd dlZd dlZd dlZd dlmZmZm	Z	m
Z
mZmZmZmZmZ d dlmZ d dlmZmZ d dlmZmZ d dlZddlmZmZmZmZmZ  e
d	      Z e
d
eedf         Z  e
de	e!ef         Z" e
dee         Z# e
dedef         Z$d;dZ%dd	 	 	 	 	 	 	 d<dZ&d=dZ'	 	 	 	 	 	 	 	 	 	 	 	 d>dZ(d?dZ)d@dZ*dAdZ+dBdZ,dCdZ-dDdZ.dEdZ/dFdZ0dGdZ1dHdZ2d d!d"dId#Z3dJd$Z4dKd%Z5 e
d&      Z6 e
d'      Z7edLd(       Z8edMd)       Z8edNd*       Z8dOd+Z8dPd,Z9dQd-Z:dRd.Z;dSd/Z<dTd0Z=dUd1Z>dVd2Z?dWd3Z@dXd4ZAdYd5ZBdZd6ZCd7d8d[d9ZDd\d:ZEy)]    )annotationsN)	AnyTupleMappingTypeVarCallableIterableSequencecastoverload)Path)datedatetime)	TypeGuardget_args   )OmitNotGiven	FileTypesArrayFormatHeadersLike_T_TupleT.)bound	_MappingT
_SequenceT	CallableTc                @    | D cg c]  }|D ]  }|  c}}S c c}}w N )tsublistitems      _/var/www/html/meridian/meridian-ai/venv/lib/python3.12/site-packages/anthropic/_utils/_utils.pyflattenr%   !   s"     !6Wg6dD6D666s   brackets)array_formatc          
     V    g }|D ]!  }|j                  t        | |dd|             # |S )a  Recursively extract files from the given dictionary based on specified paths.

    A path may look like this ['foo', 'files', '<array>', 'data'].

    ``array_format`` controls how ``<array>`` segments contribute to the emitted
    field name. Supported values: ``"brackets"`` (``foo[]``), ``"repeat"`` and
    ``"comma"`` (``foo``), ``"indices"`` (``foo[0]``, ``foo[1]``).

    Note: this mutates the given dictionary.
    r   Nindexflattened_keyr'   )extend_extract_items)querypathsr'   filespaths        r$   extract_filesr2   %   s9    $ *,E j^E4q[ghijL    c           
         | dk(  ry| dk(  rd| dS | dk(  s| dk(  ryt        d	|  d
dj                  t        t                           )Nr&   z[]indices[]repeatcomma zUnknown array_format value: z, choose from , )NotImplementedErrorjoinr   r   )r'   array_indexs     r$   _array_suffixr?   =   se    z!y ;-q!!x<7#: 

&|nN499XVaMbCcBde r3   c                  	 ||   }|dz  }t        |       rK	 t        d ||d  D              r| j                  |      }n| |   }||}n	|d| dz  }t        |||||      S t	        |       rM|d	k7  rg S t        t        |       D cg c]&  \  }}t        |||||nd
t        ||      z   |      ( c}}      S g S # t         $ r t        |       sg cY S ddlm} |J t	        |       rYg }t        |       D ]E  \  }}	t        ||      }
|r||
z   n|
} ||	|       |j                  |t        t        |	      f       G |cY S  || |       |t        t        |       fgcY S w xY w# t        $ r g cY S w xY wc c}}w )Nr   )assert_is_file_content)key   c              3  &   K   | ]	  }|d k(    yw)<array>Nr    ).0ps     r$   	<genexpr>z!_extract_items.<locals>.<genexpr>q   s     8a1	>8s   r6   r7   r)   rE   r:   )
IndexErroris_given_filesrA   is_list	enumerater?   appendr   r   is_dictallpopKeyErrorr-   r%   )objr1   r*   r+   r'   rB   rA   r0   r>   entrysuffixemitted_keyr#   s                r$   r-   r-   K   s   75k0 
QJEs|	 84<88wws|3x  MqQZ'M'%
 	
 
)I *33 &K *7*C}]ikvOww!-
 	
  II  7}I 	4 (((3<13E&/n D"U&|[A:G}v5V&u+>k4	5+ABC	D
 Ls6Y 4566+7@  	 I		*s5   B< ,E% +E6
<E"A,E"E"!E"%E32E3c                J    t        | t               xr t        | t               S r   )
isinstancer   r   rS   s    r$   rJ   rJ      s!    #x((FC1F-FFr3   c                "    t        | t              S r   rX   tuplerY   s    r$   is_tupler]          c5!!r3   c                "    t        | t              S r   r[   rY   s    r$   
is_tuple_tr`      r^   r3   c                "    t        | t              S r   rX   r
   rY   s    r$   is_sequencerc          c8$$r3   c                "    t        | t              S r   rb   rY   s    r$   is_sequence_trf      rd   r3   c                "    t        | t              S r   rX   r   rY   s    r$   
is_mappingri          c7##r3   c                "    t        | t              S r   rh   rY   s    r$   is_mapping_trl      rj   r3   c                "    t        | t              S r   )rX   dictrY   s    r$   rO   rO          c4  r3   c                "    t        | t              S r   )rX   listrY   s    r$   rL   rL      ro   r3   c                "    t        | t              S r   )rX   r	   rY   s    r$   is_iterablers      rd   r3   r;   or)delimfinalc                   t        |       }|dk(  ry|dk(  r| d   S |dk(  r| d    d| d| d    S |j                  | d d       d| d| d    z   S )Nr   r:   rC   r    )lenr=   )seqru   rv   sizes       r$   
human_joinr}      sv    s8Dqyqy1vqya&5'3q6(++::c#2hAeWAc"gY"777r3   c                    d|  dS )zOAdd single quotation marks around the given string. Does *not* do any escaping.'r    )strings    r$   quoter      s    vha=r3   c                      d fd}|S )a4  Decorator to enforce a given set of arguments or variants of arguments are passed to the decorated function.

    Useful for enforcing runtime validation of overloaded functions.

    Example usage:
    ```py
    @overload
    def foo(*, a: str) -> str: ...


    @overload
    def foo(*, b: bool) -> str: ...


    # This enforces the same constraints that a static type checker would
    # i.e. that either a or b must be passed to the function
    @required_args(["a"], ["b"])
    def foo(*, a: str | None = None, b: bool | None = None) -> str: ...
    ```
    c                $    t        j                         j                  }|j                         D cg c]+  \  }}|j                  |j
                  |j                  hv r|- c}}t        j                         d fd       }|S c c}}w )Nc                 l   t               t        |       D ]  \  }}	 j                  |           |j                         D ]  }j                  |        D ]  }t        fd|D              }|s n t              dkD  rTt        D cg c],  }dt        |D cg c]  }t        |       c}d      z   d	z   . c}}      }d
| d}	t	        |	      t              dkD  sJ t        t        d         z
        }
t        |
      dkD  r0dt        |
D cg c]  }t        |       c}       }	t	        |	      dt        |
d          }	t	        |	       | i |S # t        $ r2 t	        j
                   dt               dt        |        d      d w xY wc c}w c c}}w c c}w )Nz	() takes z argument(s) but z were givenc              3  &   K   | ]  }|v  
 y wr   r    )rF   paramgiven_paramss     r$   rH   z@required_args.<locals>.inner.<locals>.wrapper.<locals>.<genexpr>  s     Ju4Js   rC   (and)rv   )z,Missing required arguments; Expected either z arguments to be givenr   zMissing required arguments: zMissing required argument: )setrM   addrI   	TypeError__name__rz   keysrP   r}   r   rq   )argskwargsi_rB   variantmatchesarg
variationsmsgmissingr   func
positionalvariantss              @r$   wrapperz-required_args.<locals>.inner.<locals>.wrapper  s   %(UL!$  1  $$Z]3  {{} &  %& $ %J'JK%
 x=1$!+muvbiz*I#5:*IQVWWZ]]v"J ITjkC  n$ x=1,,, #3x{#3l#BCG7|a' <Z_fHgX[sHg=h<ij  n$ !<E'!*<M;NOn$(((9 "  #==/3z?2CCTUXY]U^T__jk   +Jv Ihs)   E(F+
!F&3F+
F1
(;F#&F+
)r   objectr   r   returnr   )	inspect	signature
parametersitemskindPOSITIONAL_ONLYPOSITIONAL_OR_KEYWORD	functoolswraps)r   paramsnamer   r   r   r   s   `    @r$   innerzrequired_args.<locals>.inner   s    ""4(33  &||~
ezz%%++ 

 
	!	) 
!	)F ]
s   0B)r   r   r   r   r    )r   r   s   ` r$   required_argsr      s    ,0d Lr3   _K_Vc                     y r   r    rY   s    r$   strip_not_givenr   1  s    (+r3   c                     y r   r    rY   s    r$   r   r   5  s    FIr3   c                     y r   r    rY   s    r$   r   r   9  s    ,/r3   c                    | yt        |       s| S | j                         D ci c]  \  }}t        |t              r|| c}}S c c}}w )zHRemove all top-level keys where their values are instances of `NotGiven`N)ri   r   rX   r   )rS   rB   values      r$   r   r   =  sA    
{c?
),X:3Juh<WCJXXXs
   AAc                    t        | d      S )N
   )base)intvals    r$   coerce_integerr   H  s    sr3   c                    t        |       S r   )floatr   s    r$   coerce_floatr   L  s    :r3   c                (    | dk(  xs | dk(  xs | dk(  S )Ntrue1onr    r   s    r$   coerce_booleanr   P  s    &=5C3J5#+5r3   c                    | y t        |       S r   )r   r   s    r$   maybe_coerce_integerr   T      
{#r3   c                    | y t        |       S r   )r   r   s    r$   maybe_coerce_floatr   Z  s    
{r3   c                    | y t        |       S r   )r   r   s    r$   maybe_coerce_booleanr   `  r   r3   c                D    | j                  |      r| t        |      d S | S )zXRemove a prefix from a string.

    Backport of `str.removeprefix` for Python < 3.9
    N)
startswithrz   )r   prefixs     r$   removeprefixr   f  s(    
  c&km$$Mr3   c                F    | j                  |      r| dt        |        S | S )zXRemove a suffix from a string.

    Backport of `str.removesuffix` for Python < 3.9
    N)endswithrz   )r   rU   s     r$   removesuffixr   p  s(    
 vnV%%Mr3   c                z    t        |       j                         }t        j                  j	                  |       }||fS r   )r   
read_bytesosr1   basename)r1   contents	file_names      r$   file_from_pathr   z  s3    Dz$$&H  &Ix  r3   c                   |j                         }t        |       r@| j                         D ]-  \  }}|j                         |k(  st        |t              s+|c S  t        j                  dd |j                               }|||j                         |fD ]  }| j                  |      }|s|c S  t        d| d      )Nz([^\w])(\w)c                d    | j                  d      | j                  d      j                         z   S )NrC   r   )groupupper)pats    r$   <lambda>z%get_required_header.<locals>.<lambda>  s%    #))A,STI[I[I]:] r3   zCould not find z header)lowerrl   r   rX   strresub
capitalizer   get
ValueError)headersheaderlower_headerkvintercaps_headernormalized_headerr   s           r$   get_required_headerr     s    <<>LGMMO 	DAqwwyL(Z3-?	
 vvn.]_e_p_p_rs$lFLLNDTU -.L
 vhg6
77r3   c                 J    	 t        j                         S # t        $ r Y yw xY w)Nfalse)sniffiocurrent_async_library	Exceptionr    r3   r$   get_async_libraryr     s(    ,,.. s    	""   maxsizec                N    t        j                  |       }t        t        |      S )zmA version of functools.lru_cache that retains the type signature
    for the wrapped function arguments.
    r   )r   	lru_cacher   r   )r   r   s     r$   r   r     s&     !!G Wr3   c                h   t        |       r6| j                         D ci c]  \  }}t        |      t        |       c}}S t        |       r4t	        | t
        t        t        f      s| D cg c]  }t        |       c}S t	        | t        t        f      r| j                         S | S c c}}w c c}w )zvTranslates a mapping / sequence recursively in the same fashion
    as `pydantic` v2's `model_dump(mode="json")`.
    )ri   r   	json_safers   rX   r   bytes	bytearrayr   r   	isoformat)datarB   r   r#   s       r$   r   r     s     $CG::<PZS%	#	% 00PP4D3y2I!J,01D	$11$4()~~K Q 2s   B),B/)r!   zIterable[Iterable[_T]]r   zlist[_T])r.   zMapping[str, object]r/   zSequence[Sequence[str]]r'   r   r   list[tuple[str, FileTypes]])r'   r   r>   r   r   r   )rS   r   r1   Sequence[str]r*   r   r+   
str | Noner'   r   r   r   )rS   z_T | NotGiven | Omitr   zTypeGuard[_T])rS   r   r   zTypeGuard[tuple[object, ...]])rS   z_TupleT | objectr   zTypeGuard[_TupleT])rS   r   r   zTypeGuard[Sequence[object]])rS   z_SequenceT | objectr   zTypeGuard[_SequenceT])rS   r   r   zTypeGuard[Mapping[str, object]])rS   z_MappingT | objectr   zTypeGuard[_MappingT])rS   r   r   zTypeGuard[dict[object, object]])rS   r   r   zTypeGuard[list[object]])rS   r   r   zTypeGuard[Iterable[object]])r{   r   ru   r   rv   r   r   r   )r   r   r   r   )r   r   r    Callable[[CallableT], CallableT])rS   Noner   r  )rS   zMapping[_K, _V | NotGiven]r   zdict[_K, _V])rS   r   r   r   )rS   zobject | Noner   r   )r   r   r   r   )r   r   r   r   )r   r   r   bool)r   r  r   
int | None)r   r  r   zfloat | None)r   r  r   zbool | None)r   r   r   r   r   r   )r   r   rU   r   r   r   )r1   r   r   r   )r   r   r   r   r   r   )r   r   )r   r  r   r  )r   r   r   r   )F
__future__r   r   r   r   r   typingr   r   r   r   r   r	   r
   r   r   pathlibr   r   r   typing_extensionsr   r   r   _typesr   r   r   r   r   r   r   r   r   r   r   r   r%   r2   r?   r-   rJ   r]   r`   rc   rf   ri   rl   rO   rL   rs   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r3   r$   <module>r     s   " 	 	  
 
 
  # 1  H HT]
)5#5
6KwsF{';<	\&)9:
KxS'9:	7 !+  
 #  !0N	N
N 	N
 N N !NbG""%%$$!!%
 48d 8
HV T]T] 
 + 
 + 
 I 
 I 
 / 
 /Y6!8& (+ r3   