
    $O=d|:                        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                               i ZUe
eVe	eVgejW        f         f         eXd<   edeejY        jZ                 deejY        jZ                 fd            Z[edejY        j\        dejY        j\        fd             Z[deeejY        jZ                 ejY        j\        f         deeejY        jZ                 ejY        j\        f         fd!Z[deeVejY        j\        f         de	e	d"ejW        f         ge	d"ejW        f         f         fd#Z] e]ej^                  d$             Z_ e]ej`                  d%             Za e]ejb                  d&             Zc e]ejd                  d'             Ze e]ejf                  d(             Zg e]ejh                  d)             Zi e]ejj                  d*             Zk elejY        jm                  D ]Zn e[en           e[ejY        _[         ej        ejo        e_           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    ED:\Sites\api_v1\venv\Lib\site-packages\pydantic/_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         	RESOLVERStypc                     d S N r5   s    r   _registeredr:          Dr   c                     d S r7   r8   r9   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addr4   items
issubclassstregister_type_strategyNotImplementedError)r5   	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 r7   )r4   )fr5   s    r   innerzresolves.<locals>.inner   s"    	!!!!	#r   r8   )r5   rK   s   ` r   resolvesrL      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 r7   )rC   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)rX   rC   none	from_typer*   floats	recursiveone_ofbooleansintegersrS   getattrbuildsr
   r   	BaseModeljsondumps)clsrK   finiterX   s       r   resolve_jsonrk      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_whitespacerC   binaryformat
from_regexencode)ri   rn   ro   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)rO   placesc                     | j         k     S r7   )ltdri   s    r   rU   z$resolve_condecimal.<locals>.<lambda>  s    q36z r   c                     j         | k     S r7   )gtr   s    r   rU   z$resolve_condecimal.<locals>.<lambda>  s    svz r   )geler   r   rC   decimalsdecimal_placesfilter)ri   	min_value	max_valuer   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_maxrO   r"   z:Cannot build model with max value smaller than multiple ofc                     | j         z  S r7   multiple_ofrT   ri   s    r   rU   z"resolve_confloat.<locals>.<lambda>1      1s;N r   )r   r   r   r   r   rC   r_   mathceilfloorrc   map)ri   r   r   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 r7   r   r   s    r   rU   z resolve_conint.<locals>.<lambda>H  r   r   )r   r   r   r   r   rC   rc   r   r   r   r   r   ri   r   r   s   `  r   resolve_conintr   4  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"   )daysr   )r   r   datetime	timedeltadateminr   r   maxrC   datesr   s      r   resolve_condater   K  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   rm   c                 2    | |                                  k    S r7   )stripr   s    r   rU   z resolve_constr.<locals>.<lambda>i  s    aggii r   rp   rq   rr   rs   rt   r"   ru   rv   rw   rx   c                 *    t          |           k    S r7   len)r   rn   s    r   rU   z resolve_constr.<locals>.<lambda>z  s    SVV); r   c                 >    t          |           cxk    ok    nc S r7   r   )r   ro   rn   s    r   rU   z resolve_constr.<locals>.<lambda>{  s)    XQ%C%C%C%C8%C%C%C%C r   )	ry   rz   regexr{   rC   rS   r~   r   r}   )ri   strategyr   ro   rn   s      @@r   resolve_constrr   ^  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   )p__doc__r(   r   	ipaddressrg   r   	fractionsr   typingr   r   r   r   r   r	   hypothesis.strategies
strategiesrC   r   pydantic.colorpydantic.typespydantic.utilsr
   r   strboolr   rD   EmailStremailsr   	NameEmailre   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Colorra   COLORS_BY_NAMEtuplesrc   r]   r_   r   r/   card_patternsr+   UUID1uuidsUUID3UUID4UUID5SecretBytesr|   	SecretStrrS   IPvAnyAddressip_addressesIPvAnyInterfacer^   IPv4InterfaceIPv6InterfaceIPvAnyNetworkIPv4NetworkIPv6Network
StrictBoolrb   	StrictStrr4   typeSearchStrategy__annotations__r>   Tr:   ConstrainedNumberMetarL   JsonWrapperrk   ConstrainedBytesr   ConstrainedDecimalr   ConstrainedFloatr   ConstrainedIntr   ConstrainedDater   ConstrainedStrr   listr?   r5   Jsonr8   r   r   <module>r      s    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 >@	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-