o
    ja+                     @  s`  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 d dlZddlmZmZmZmZmZ ddlmZmZ e
d	Ze
d
eedf dZ e
de	e!ef dZ"e
dee dZ#e
dedef dZ$dddZ%dddZ&dd%d&Z'dd)d*Z(dd,d-Z)dd0d1Z*dd3d4Z+dd7d8Z,dd:d;Z-dd>d?Z.ddAdBZ/ddDdEZ0ddGdHZ1ddJdKZ2dLdMdNddSdTZ3ddVdWZ4ddZd[Z5e
d\Z6e
d]Z7edd_d`Z8eddcd`Z8edddd`Z8ddfd`Z8ddhdiZ9ddkdlZ:ddndoZ;ddqdrZ<ddtduZ=ddwdxZ>ddzd{Z?dd}d~Z@dddZAdddZBdddZCdS )    )annotationsN)	AnyTupleMappingTypeVarCallableIterableSequencecastoverload)Path)	TypeGuard   )HeadersNotGiven	FileTypes
NotGivenOrHeadersLike)
parse_dateparse_datetime_T_TupleT.)bound	_MappingT
_SequenceT	CallableTtIterable[Iterable[_T]]returnlist[_T]c                 C  s   dd | D S )Nc                 S  s   g | ]	}|D ]}|qqS  r    ).0sublistitemr    r    Z/var/www/html/fyndo/pharma/fyndo/venv/lib/python3.10/site-packages/openai/_utils/_utils.py
<listcomp>"       zflatten.<locals>.<listcomp>r    )r   r    r    r$   flatten!   s   r'   queryMapping[str, object]pathsSequence[Sequence[str]]list[tuple[str, FileTypes]]c             	   C  s(   g }|D ]}| t| |ddd q|S )zRecursively extract files from the given dictionary based on specified paths.

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

    Note: this mutates the given dictionary.
    r   Nindexflattened_key)extend_extract_items)r(   r*   filespathr    r    r$   extract_files%   s   r4   objobjectr3   Sequence[str]r.   intr/   
str | Nonec                  s  z }W n, t y2   t| trg  Y S ddlm} ||  d  d us(J  tt| fg Y S w d7 t| rpztkrH| 	|}n| | }W n t
yX   g  Y S w  d u r`| n d| d7  t| dS t| r|dkrzg S t fd	d
| D S g S )Nr   )assert_is_file_content)key   []r-   z<array>c                   s,   g | ]}t | d ur d nddqS )Nz[]r-   )r1   )r!   r#   r/   r.   r3   r    r$   r%   j   s    z"_extract_items.<locals>.<listcomp>)
IndexError
isinstancer   _filesr:   r
   r   is_dictlenpopKeyErrorr1   is_listr'   )r5   r3   r.   r/   r;   r:   r#   r    r?   r$   r1   8   sL   
r1   NotGivenOr[_T]TypeGuard[_T]c                 C  s   t | t S NrA   r   r5   r    r    r$   is_giveny      rM   TypeGuard[tuple[object, ...]]c                 C  
   t | tS rJ   rA   tuplerL   r    r    r$   is_tuple      
rS   _TupleT | objectTypeGuard[_TupleT]c                 C  rP   rJ   rQ   rL   r    r    r$   
is_tuple_t   rT   rW   TypeGuard[Sequence[object]]c                 C  rP   rJ   rA   r	   rL   r    r    r$   is_sequence   rT   rZ   _SequenceT | objectTypeGuard[_SequenceT]c                 C  rP   rJ   rY   rL   r    r    r$   is_sequence_t   rT   r]   TypeGuard[Mapping[str, object]]c                 C  rP   rJ   rA   r   rL   r    r    r$   
is_mapping   rT   r`   _MappingT | objectTypeGuard[_MappingT]c                 C  rP   rJ   r_   rL   r    r    r$   is_mapping_t   rT   rc   TypeGuard[dict[object, object]]c                 C  rP   rJ   )rA   dictrL   r    r    r$   rC      rT   rC   TypeGuard[list[object]]c                 C  rP   rJ   )rA   listrL   r    r    r$   rG      rT   rG   TypeGuard[Iterable[object]]c                 C  rP   rJ   )rA   r   rL   r    r    r$   is_iterable   rT   ri   r#   c                 C  s@   t | rttdd |  D S t| rttdd | D S | S )zMinimal reimplementation of copy.deepcopy() that will only copy certain object types:

    - mappings, e.g. `dict`
    - list

    This is done for performance reasons.
    c                 S  s   i | ]	\}}|t |qS r    deepcopy_minimal)r!   kvr    r    r$   
<dictcomp>   r&   z$deepcopy_minimal.<locals>.<dictcomp>c                 S     g | ]}t |qS r    rj   )r!   entryr    r    r$   r%          z$deepcopy_minimal.<locals>.<listcomp>)r`   r
   r   itemsrG   )r#   r    r    r$   rk      s
   rk   z, or)delimfinalseqrt   strru   c                C  sn   t | }|dkr
dS |dkr| d S |dkr$| d  d| d| d  S || d d d| d| d   S )Nr    r<   r    )rD   join)rv   rt   ru   sizer    r    r$   
human_join   s   &r}   stringc                 C  s   d|  dS )zOAdd single quotation marks around the given string. Does *not* do any escaping.'r    )r~   r    r    r$   quote   s   r   variants Callable[[CallableT], CallableT]c                    s   d fdd}|S )aL  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:
        ...
    ```
    funcr   r   c                   s>   t  j}dd | D t d	 fdd}|S )
Nc                 S  s&   g | ]\}}|j |j|jhv r|qS r    )kindPOSITIONAL_ONLYPOSITIONAL_OR_KEYWORD)r!   nameparamr    r    r$   r%      s    z0required_args.<locals>.inner.<locals>.<listcomp>argsr6   kwargsr   c            
        s8  t   t| D ]'\}}z	 |  W q ty.   tj dt dt|  dd w | D ]} | q3D ]}t fdd|D }|rN nGq=tdkrht	dd D }d	| d
}t|t
t d   }	t|	dkrdt	dd |	D  }t|dt|	d  }t|| i |S )Nz	() takes z argument(s) but z were givenc                 3  s    | ]}| v V  qd S rJ   r    )r!   r   given_paramsr    r$   	<genexpr>  s    z@required_args.<locals>.inner.<locals>.wrapper.<locals>.<genexpr>r<   c                 S  s*   g | ]}d t dd |D dd d qS )(c                 S  ro   r    r   r!   argr    r    r$   r%     rq   zLrequired_args.<locals>.inner.<locals>.wrapper.<locals>.<listcomp>.<listcomp>and)ru   ))r}   )r!   variantr    r    r$   r%     s   * zArequired_args.<locals>.inner.<locals>.wrapper.<locals>.<listcomp>z,Missing required arguments; Expected either z arguments to be givenr   zMissing required arguments: c                 S  ro   r    r   r   r    r    r$   r%     rq   zMissing required argument: )set	enumerateaddr@   	TypeError__name__rD   keysallr}   rg   r   )
r   r   i_r;   r   matches
variationsmsgmissing)r   
positionalr   r   r$   wrapper   s>   z-required_args.<locals>.inner.<locals>.wrapper)r   r6   r   r6   r   r6   )inspect	signature
parametersrr   	functoolswraps)r   paramsr   r   )r   r   r$   inner   s   
!zrequired_args.<locals>.innerN)r   r   r   r   r    )r   r   r    r   r$   required_args   s   0r   _K_VNonec                 C     d S rJ   r    rL   r    r    r$   strip_not_given     r   Mapping[_K, _V | NotGiven]dict[_K, _V]c                 C  r   rJ   r    rL   r    r    r$   r   #  r   c                 C  r   rJ   r    rL   r    r    r$   r   (  r   object | Nonec                 C  s*   | du rdS t | s| S dd |  D S )zHRemove all top-level keys where their values are instances of `NotGiven`Nc                 S  s    i | ]\}}t |ts||qS r    rK   )r!   r;   valuer    r    r$   rn   5  s     z#strip_not_given.<locals>.<dictcomp>)r`   rr   rL   r    r    r$   r   -  s
   valc                 C  s   t | ddS )N
   )base)r8   r   r    r    r$   coerce_integer8  rN   r   floatc                 C  s   t | S rJ   )r   r   r    r    r$   coerce_float<  s   r   boolc                 C  s   | dkp| dkp| dkS )Ntrue1onr    r   r    r    r$   coerce_boolean@  s   r   
int | Nonec                 C     | d u rd S t | S rJ   )r   r   r    r    r$   maybe_coerce_integerD     r   float | Nonec                 C  r   rJ   )r   r   r    r    r$   maybe_coerce_floatJ  r   r   bool | Nonec                 C  r   rJ   )r   r   r    r    r$   maybe_coerce_booleanP  r   r   prefixc                 C  s   |  |r| t|d S | S )zXRemove a prefix from a string.

    Backport of `str.removeprefix` for Python < 3.9
    N)
startswithrD   )r~   r   r    r    r$   removeprefixV  s   
r   suffixc                 C  s    |  |r| dt|  S | S )zXRemove a suffix from a string.

    Backport of `str.removesuffix` for Python < 3.9
    N)endswithrD   )r~   r   r    r    r$   removesuffix`  s   
r   r   c                 C  s    t |  }tj| }||fS rJ   )r   
read_bytesosr3   basename)r3   contents	file_namer    r    r$   file_from_pathj  s   r   headersr   headerc                 C  s   |  }t| tr&tt| } |  D ]\}}|  |kr%t|tr%|  S q	 tddd |	 }|||
 |fD ]}| |}|rG|  S q:td| d)Nz([^\w])(\w)c                 S  s   |  d|  d  S )Nr<   r   )groupupper)patr    r    r$   <lambda>y  s    z%get_required_header.<locals>.<lambda>zCould not find z header)lowerrA   r   r
   r   rr   rw   resub
capitalizer   get
ValueError)r   r   lower_headerrl   rm   intercaps_headernormalized_headerr   r    r    r$   get_required_headerp  s   


r   c                   C  s    zt  W S  ty   Y dS w )Nfalse)sniffiocurrent_async_library	Exceptionr    r    r    r$   get_async_library  s
   
r   )r   r   r   r   )r(   r)   r*   r+   r   r,   )
r5   r6   r3   r7   r.   r8   r/   r9   r   r,   )r5   rH   r   rI   )r5   r6   r   rO   )r5   rU   r   rV   )r5   r6   r   rX   )r5   r[   r   r\   )r5   r6   r   r^   )r5   ra   r   rb   )r5   r6   r   rd   )r5   r6   r   rf   )r5   r6   r   rh   )r#   r   r   r   )rv   r7   rt   rw   ru   rw   r   rw   )r~   rw   r   rw   )r   r7   r   r   )r5   r   r   r   )r5   r   r   r   )r5   r6   r   r6   )r5   r   r   r6   )r   rw   r   r8   )r   rw   r   r   )r   rw   r   r   )r   r9   r   r   )r   r9   r   r   )r   r9   r   r   )r~   rw   r   rw   r   rw   )r~   rw   r   rw   r   rw   )r3   rw   r   r   )r   r   r   rw   r   rw   )r   rw   )D
__future__r   r   r   r   r   typingr   r   r   r   r   r   r	   r
   r   pathlibr   typing_extensionsr   r   _typesr   r   r   r   r   _compatr   r   r   r6   r   rw   r   r   r   r'   r4   r1   rM   rS   rW   rZ   r]   r`   rc   rC   rG   ri   rk   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r    r    r$   <module>   sj    ,



A











L












