
    bMh9                     .   U d Z ddlZddlZddlZddlZddlZddlmZ ddlm	Z	m
Z
mZmZmZmZ ddlmZ ddlZddlZddlZddlmZ 	 ddlZdedefdZ ej        ej         ej                                        e                      ej        ej         ej         d	j!         ej"        d
d           ej                                        e                               n# e#$ r Y nw xY w ej        ej$         ej%        d  e& e'e                    D                                  d(                    ej)        j*        ej)        j+        ej)        j,        ej)        j-        ej)        j.        ej)        j/        f          0                    ej)        j1        d          0                    ej)        j2        d          0                    ej)        j3        d          Z4 ej        ej)        j5         ej6         ej%         e&ej)        j7                             ej8         ej9        dd           ej9        dd           ej9        dd           ej:                     ej;        dd          z   ej;        dd          <                    dj!                  z             ej"        e4d                               dedefdZ=dZ> ej        ej?         ej"        d(                    e>          d          <                    e=                      ej        ej@         ejA        d                      ej        ejB         ejA        d                      ej        ejC         ejA        d                      ej        ejD         ejA        d                      ej        ejE         ejF                    <                    ejE                              ej        ejG         ejH                    <                    ejG                              ej        ejI         ejJ                                ej        ejK         ejL        ejM                   ejL        ejN                  z              ej        ejO         ejL        ejP                   ejL        ejQ                  z              ej        ejR         ejS                                ej        ejT         ejH                                ej        ejU         ejV        ejW        X                                 ejY        d          z                         ej        ejZ         ejV        ejW        X                                 ejY        d          z
                       i Z[e
e\e	e\gej]        f         f         e^d <   ed!eej_        j`                 deej_        j`                 fd"            Zaed!ej_        jb        dej_        jb        fd#            Zad!eeej_        j`                 ej_        jb        f         deeej_        j`                 ej_        jb        f         fd$Zad!ee\ej_        jb        f         de	e	d%ej]        f         ge	d%ej]        f         f         fd&Zc ecejd                  d'             Ze ecejf                  d(             Zg ecejh                  d)             Zi ecejj                  d*             Zk ecejl                  d+             Zm ecejn                  d,             Zo ecejp                  d-             Zq erej_        js                  D ]Zt eaet           eaej_        _a         ej        eju        ee           dS ).a  
Register Hypothesis strategies for Pydantic custom types.

This enables fully-automatic generation of test data for most Pydantic classes.

Note that this module has *no* runtime impact on Pydantic itself; instead it
is registered as a setuptools entry point and Hypothesis will import it if
Pydantic is installed.  See also:

https://hypothesis.readthedocs.io/en/latest/strategies.html#registering-strategies-via-setuptools-entry-points
https://hypothesis.readthedocs.io/en/latest/data.html#hypothesis.strategies.register_type_strategy
https://hypothesis.readthedocs.io/en/latest/strategies.html#interaction-with-pytest-cov
https://docs.pydantic.dev/usage/types/#pydantic-types

Note that because our motivation is to *improve user experience*, the strategies
are always sound (never generate invalid data) but sacrifice completeness for
maintainability (ie may be unable to generate some tricky but valid data).

Finally, this module makes liberal use of `# type: ignore[<code>]` pragmas.
This is because Hypothesis annotates `register_type_strategy()` with
`(T, SearchStrategy[T])`, but in most cases we register e.g. `ConstrainedInt`
to generate instances of the builtin `int` type which match the constraints.
    N)Fraction)CallableDictTypeUnioncastoverload)lenient_issubclasssreturnc                 `    	 t          j        | d           dS # t           j        $ r Y dS w xY w)NF)check_deliverabilityT)email_validatorvalidate_emailEmailNotValidErrorr   s    ^/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pydantic/v1/_hypothesis_plugin.pyis_valid_emailr   :   sG    	*15IIII41 	 	 	55	s    --z{} <{}>z"[A-Za-z0-9_]+( [A-Za-z0-9_]+){0,5}T	fullmatchc                 r    g | ]4}|                     d           t          t          j        d|           5S )_zmath.)
startswithr   pydanticPyObject).0names     r   
<listcomp>r   S   s@    lllTW[WfWfgjWkWklh	0	0lll    |z#(?:(\d\d?(?:\.\d+)?|100(?:\.0+)?)%)z+(?:(0(?:\.\d+)?|1(?:\.0+)?|\.\d+|\d{1,2}%))zB(?:((?:\d|\d\d|[01]\d\d|2[0-4]\d|25[0-4])(?:\.\d+)?|255(?:\.0+)?))      d   z{}%card_numberc                     dD ]\}t          j        t                    5  t          j                            | |z              | |z   cd d d            c S # 1 swxY w Y   ]t          d          )N
0123456789Unreachable)
contextlibsuppress	Exceptionr   PaymentCardNumbervalidate_luhn_check_digitAssertionError)r$   digits     r   add_luhn_digitr/   z   s     ' ' ++ 	' 	'&@@uATUUU&	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 	' 
'
''s   'AA	A	)z
4[0-9]{14}z5[12345][0-9]{13}z3[47][0-9]{12}z[0-26-9][0-9]{10,17})version         days)	min_value)	max_value	RESOLVERStypc                     d S N r9   s    r   _registeredr>          Dr   c                     d S r;   r<   r=   s    r   r>   r>      r?   r   c                    t           j        j                            |            t                                          D ]7\  }}t          | |          r"t          j        |  ||                      | c S 8t          d| d          )NzUnknown type z has no resolver to register)
r   types_DEFINED_TYPESaddr8   items
issubclassstregister_type_strategyNotImplementedError)r9   	supertyperesolvers      r   r>   r>      s     N!%%c***(00  	8c9%% 	%c88C==999JJJ	 QcQQQ
R
RRr   .c                       fd}|S )Nc                 2    | t           vsJ | t           <   | S r;   )r8   )fr9   s    r   innerzresolves.<locals>.inner   s"    	!!!!	#r   r<   )r9   rO   s   ` r   resolvesrP      s#        
 Lr   c                    	 | j         t          j                    nt          j        | j                   }n# t          $ r t          j        dd          }t          j        t          j        t          j                    t          j                    t          j	                    |t          j
                              d           }Y nw xY wt          | dd           }t          j        t          |t          j                  r| j         j        nt           j        |t          j                    t          j                    t          j	        dd          z  t          j                              S )	NF)allow_infinity	allow_nanc                 x    t          j        |           t          j        t          j                    |           z  S r;   )rG   listsdictionariestext)xs    r   <lambda>zresolve_json.<locals>.<lambda>   s%    RXa[[2?2799a+H+HH r   )baseextend
inner_typer      )ensure_asciiindent	sort_keys)r\   rG   none	from_typer*   floats	recursiveone_ofbooleansintegersrW   getattrbuildsr
   r   	BaseModeljsondumps)clsrO   finiter\   s       r   resolve_jsonro      s%   
 ^3			cn9U9U 
 
 
%5AAA2799bkmmR[]]FBGIIVVHH
 
 

 lD11J91*h>PQQaW[Wa[]]wyy2;q"---+--   s   36 BC
	C
c                 X   | j         pd}| j        }| j        st          j        ||          S d                    |dk    r|dz
  nd|pddk    r|dz
  nd          }|dk    rd| d}n|dk    rd	| d
}n|dk    sJ d| d}t          j        |                                d          S )Nr   min_sizemax_size	{{{},{}}}    \W.\Wr"   \W(.\W)?(\W(.\W)?)?Tr   )
min_length
max_lengthstrip_whitespacerG   binaryformat
from_regexencode)rm   rr   rs   repeatspatterns        r   resolve_conbytesr      s    ~"H~H ?y(X>>>>   11!!Q!++1 G 1}}$$$$	Q'''''1}}}}*7***=))T::::r   c                 B     j         } j        } j        |
J d             j        } j        |
J d             j        }t	          j        ||d j                  } j        |                     fd          } j        |                     fd          }|S )NSet `gt` or `ge`, but not bothSet `lt` or `le`, but not bothF)rS   placesc                     | j         k     S r;   )ltdrm   s    r   rY   z$resolve_condecimal.<locals>.<lambda>  s    q36z r   c                     j         | k     S r;   )gtr   s    r   rY   z$resolve_condecimal.<locals>.<lambda>  s    svz r   )geler   r   rG   decimalsdecimal_placesfilter)rm   r6   r7   r   s   `   r   resolve_condecimalr     s    II
v  "B   F	
v  "B   F	
IyE#BTUUUA
vHH))))**
vHH))))**Hr   c                      j         } j        }d}d} j        |
J d             j        }d} j        |
J d             j        }d} j        t          j        ||||d          S |#t          j        | j        z            }|r|dz   }|8| j        k    s
J d            t          j	        | j        z            }|r|dz
  }t          j
        ||                               fd          S )	NFr   Tr   )exclude_minexclude_maxrS   r"   z:Cannot build model with max value smaller than multiple ofc                     | j         z  S r;   multiple_ofrX   rm   s    r   rY   z"resolve_confloat.<locals>.<lambda>6      1s;N r   )r   r   r   r   r   rG   rc   mathceilfloorrg   map)rm   r6   r7   r   r   s   `    r   resolve_confloatr     s2   IIKK
v  "B   F	
v  "B   F	
yI;T_kpqqqqIi#/9::	 	&!AICO+++-i+++Jy3?:;;	 	&!AI;y),,001N1N1N1NOOOr   c                      j         } j        } j        |
J d             j        dz   } j        |
J d             j        dz
  } j         j        dk    rt          j        ||          S |6t          j        t          |          t           j                  z            }|6t          j
        t          |          t           j                  z            }t          j        ||                               fd          S )Nr   r"   r   c                     | j         z  S r;   r   r   s    r   rY   z resolve_conint.<locals>.<lambda>M  r   r   )r   r   r   r   r   rG   rg   r   r   r   r   r   rm   r6   r7   s   `  r   resolve_conintr   9  s   II
v  "B   FQJ	
v  "B   FQJ	
#/Q"6"6{9i000 Ihy11HS_4M4MMNN	Jx	22Xco5N5NNOO	;y),,001N1N1N1NOOOr   c                    | j         | j        
J d            | j         }n6| j        | j        t          j        d          z   }nt          j        j        }| j        | j        
J d            | j        }n6| j        | j        t          j        d          z
  }nt          j        j        }t          j
        ||          S )Nr   r"   r4   r   )r   r   datetime	timedeltadateminr   r   maxrG   datesr   s      r   resolve_condater   P  s    
vv~~?~~~F				FX/Q7777		M%	
vv~~?~~~F				FX/Q7777		M%	8Iy)))r   c                    | j         pd| j        | j        | j        st	          j                  S | j        7t	          j        | j                  }| j        r|                    d           }n| j        rd                    dk    rdz
  ndpddk    rdz
  nd          }dk    rt	          j        d| d          }n?d	k    rt	          j        d
| d          }n dk    sJ t	          j        d| d          }dk    r|S |                    fd          S |                    fd          S )Nr   rq   c                 2    | |                                  k    S r;   )stripr   s    r   rY   z resolve_constr.<locals>.<lambda>n  s    aggii r   rt   ru   rv   rw   rx   r"   ry   rz   r{   r|   c                 *    t          |           k    S r;   len)r   rr   s    r   rY   z resolve_constr.<locals>.<lambda>  s    SVV); r   c                 >    t          |           cxk    ok    nc S r;   r   )r   rs   rr   s    r   rY   z resolve_constr.<locals>.<lambda>  s)    XQ%C%C%C%C8%C%C%C%C r   )	r}   r~   regexr   rG   rW   r   r   r   )rm   strategyr   rs   rr   s      @@r   resolve_constrr   c  s   ~"H~H
y!5w8<<<<
y=++ 	A'?'?@@H		 ?$$$qLLHqLLa%]a//HqLLR
 
 q==}%7G%7%7%788HH]]}%:W%:%:%:;;HHq====}%=g%=%=%=>>H1}})		;;;;<<<??CCCCCDDDr   )v__doc__r(   r   	ipaddressrk   r   	fractionsr   typingr   r   r   r   r   r	   hypothesis.strategies
strategiesrG   r   pydantic.colorpydantic.typespydantic.v1.utilsr
   r   strboolr   rH   EmailStremailsr   	NameEmailri   r   r   ImportErrorr   sampled_fromsortedvarsjoincolorr_hex_short
r_hex_longr_rgbr_rgbar_hslr_hslareplace_r_sl_r_alpha_r_255_color_regexesColorre   COLORS_BY_NAMEtuplesrg   ra   rc   r   r/   card_patternsr+   UUID1uuidsUUID3UUID4UUID5SecretBytesr   	SecretStrrW   IPvAnyAddressip_addressesIPvAnyInterfacerb   IPv4InterfaceIPv6InterfaceIPvAnyNetworkIPv4NetworkIPv6Network
StrictBoolrf   	StrictStr
FutureDater   r   todayr   PastDater8   typeSearchStrategy__annotations__rB   Tr>   ConstrainedNumberMetarP   JsonWrapperro   ConstrainedBytesr   ConstrainedDecimalr   ConstrainedFloatr   ConstrainedIntr   ConstrainedDater   ConstrainedStrr   listrC   r9   Jsonr<   r   r   <module>r      s_	    0                  > > > > > > > > > > > > > > > > " " " " " "          0 0 0 0 0 0
# $     Bh/1C1CN1S1STTTB	BM>$OOOBIKK~..	
 	
   !  	 	 	D	4  BOllVVDDJJ=O=Olll    HHN&N%N N!N N!	
	 	 WX^!#IJJWX^$&TUUWX^"$ijj    NBIx~<==>>	BK3BK3BK3BGII		!Q')")As*;*;*?*?*M*MM		
 	
 	n555	 	  $( ( ( ( ( (  BM#((=))T:::>>~NN    (.("(1*=*=*= > > >  (.("(1*=*=*= > > >  (.("(1*=*=*= > > >  (.("(1*=*=*= > > >  (.		@T0U0U V V V  (,gbgiimmH<N.O.O P P P  (0/"/2C2C D D D  BL())LBL9P,Q,QQ    BL&'',",y7L*M*MM    (-{r{}} = = =  (,gbgii 8 8 8  (-xrx(-BUBUBWBWZlZbZlrsZtZtZtBt/u/u/u v v v  (+XRX@S@S@U@UXjX`XjpqXrXrXr@r-s-s-s t t t >@	4hvr'8899: ? ? ? 
	T(.*+ 	X^5E0F 	 	 	 
	 
	X^9 	hn>b 	 	 	 
	S	tHN$%x~'KK	LS
4 !8>#GGHS S S S	tX^99	:xR../0(3@Q;Q2RRS    
(
   & 
(
#$$; ; %$;( 
(
%&&  '&" 
(
#$$P P %$P> 
(
!""P P #"P, 
(
"##* * $#*$ 
(
!""E E #"E@ 4-..  CK(   (- 6 6 6 6 6s   C% %C-,C-