
    h                    f    S r SSKJr  SSKJrJr  SSKJrJr  SSK	J
r
  SSKJrJr   " S S\5      rg	)
a  Module containing validation mechanisms for transform parameters.

This module provides a metaclass that enables parameter validation for transforms using
Pydantic models. It intercepts the initialization of transform classes to validate their
parameters against schema definitions, raising appropriate errors for invalid values and
providing type conversion capabilities. This validation layer helps prevent runtime errors
by catching configuration issues at initialization time.
    )annotations)	Parameter	signature)AnyCallable)warn)	BaseModelValidationErrorc                     ^  \ rS rSrSr\        SS j5       r\          S	S j5       r\S
S j5       rSU 4S jjr	Sr
U =r$ )ValidatedTransformMeta   a  Metaclass that validates transform parameters during instantiation.

This metaclass enables automatic validation of transform parameters using Pydantic models,
ensuring proper typing and constraints are enforced before object creation.

Args:
    original_init (Callable[..., Any]): Original __init__ method of the class.
    args (tuple[Any, ...]): Positional arguments passed to the __init__ method.
    kwargs (dict[str, Any]): Keyword arguments passed to the __init__ method.

c                h   [        U 5      R                  n[        UR                  5       5      SS  n[	        [        XA5      5      U-  nUR                  SS5      nUR                  5        HA  u  pxUS:w  d  M  Xu;  d  M  UR                  [        R                  Ld  M3  UR                  XW'   MC     XTU4$ )N   strictFself)r   
parameterslistkeysdictzippopitemsdefaultr   empty)	original_initargskwargsinit_paramsparam_namesfull_kwargsr   parameter_name	parameters	            X/var/www/fran/franai/venv/lib/python3.13/site-packages/albumentations/core/validation.py_process_init_parameters/ValidatedTransformMeta._process_init_parameters    s      .99;++-.qr2&*3{+A&BV&K 51 *5):):)<%N&("5%%Y__<.7.?.?+ *= //    c                    UR                  5        VVs0 s H  u  pEXB;   d  M  XE_M     nnnX6S'   U " S0 UD6nUR                  5       nUR                  SS 5        U$ s  snnf ! [         a  n	[	        [        U	5      5      U	eS n	A	f[         a;  n	U(       a  [	        [        U	5      5      U	e[        [        U	5      SS9  0 s S n	A	$ S n	A	ff = f)Nr      
stacklevel )r   
model_dumpr   r
   
ValueErrorstr	Exceptionr   )

schema_clsr    r   r   kvschema_kwargsconfigvalidated_kwargses
             r#   _validate_parameters+ValidatedTransformMeta._validate_parameters8   s    	$.9.?.?.AV.AdaQEUTQT.AMV&,(#0-0F%002  40 $# W
  	,SV$!+ 	 Q(a/QA&I		s>   A# AA1A# A# #
C
-BC
0C?C
C
c                    0 nU R                  5        H:  u  p#US;   a  M  UR                  [        R                  Ld  M,  UR                  X'   M<     U$ )N>   r   r   )r   r   r   r   )r   r5   
param_nameparams       r#   _get_default_values*ValidatedTransformMeta._get_default_valuesP   sO    !,!2!2!4J//}}IOO3/4}} ,	 "5
  r&   c                  >^ ^^^ ST;   ak  [        TS   [        5      (       aS  TR                  S5      mTc  Sn[        U5      e[	        T5      nSU UUU4S jjnXVl        TR                  Ul        UTS'   [        TT ]!  T TUT5      $ )zThis is a custom metaclass that validates the parameters of the class during instantiation.
It is used to ensure that the parameters of the class are valid and that they are of the correct type.

InitSchema__init__z&__init__ not found in class definitionc                  > T
R                  TX5      u  p4nT
R                  TS   UUU5      =(       d$    T
R                  [        T5      R                  5      nU Vs/ s H  owU;  d  M
  US:w  d  M  UPM     nnT" U 40 UD6  Xl        U(       a4  SSR                  U5       ST 3n	U(       a  [        U	5      e[        U	SS9  g g s  snf )Nr?   r   zArgument(s) 'z, z' are not valid for transform r(   r)   )	r$   r7   r<   r   r   invalid_argsjoinr-   r   )r   r   r   r    r   r   r5   name_argrB   messageclsdctnamer   s             r#   custom_init3ValidatedTransformMeta.__new__.<locals>.custom_initf   s    363O3OP]_c3l0&#&#;#;%	$ $R
 ,,Y}-E-P-PQ ! :@xXS^C^ckowcwxd7&67$0! -dii.E-FFdeidjkG(11Q/	  	  ys   	C*C2C)r   r   r   r   r   r   returnNone)	
issubclassr	   getr-   r   __signature____doc__super__new__)	rF   rH   basesrG   msgoriginal_sigrI   r   	__class__s	   `` `   @r#   rR   ValidatedTransformMeta.__new__Z   s     3:c,.?#K#K7:wwz7JM$> o%$]3L0 0, )5%"/"7"7K)C
OwsD%55r&   )rB   )r   zCallable[..., Any]r   ztuple[Any, ...]r   dict[str, Any]rK   z&tuple[dict[str, Any], list[str], bool])
r0   ztype[BaseModel]r    rX   r   z	list[str]r   boolrK   rX   )r   zdict[str, Parameter]rK   rX   )
rF   	type[Any]rH   r.   rS   ztuple[type, ...]rG   rX   rK   rZ   )__name__
__module____qualname____firstlineno__rP   staticmethodr$   r7   r<   rR   __static_attributes____classcell__)rV   s   @r#   r   r      s    
 0)00 0 
0	0 0. $#$#$ $ 	$
 
$ $.    '6 '6r&   r   N)rP   
__future__r   inspectr   r   typingr   r   warningsr   pydanticr	   r
   typer   r+   r&   r#   <module>rh      s)    # (    /n6T n6r&   