a c@sUddlZddlZddlmZmZmZddlmZm Z m Z ddl mZmZmZmZmZmZmZmZmZm Z mZmZmZmZmZmZmZmZmZmZm Z ddl!m"Z"m#Z#ddl$m%Z&ddl'm(Z(m)Z)m*Z*dd l+m,Z,dd l%m-Z-m.Z.m/Z/m0Z0dd l1m2Z2m3Z3dd l m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;mZ>m?Z?m@Z@dd lAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJddlKmLZLmMZMmNZNmOZOePZQeeRd<edZSGdddZTeTZUer(ddl'mVZVddlWmXZXddl+mYZYddl1mZZZddl m[Z[m\Z\m]Z]eeeeeYfZ^e ee e_e`fdfe`fZae ebeTfZcGdddeCZdeUfdddddddddddddddddddddddddeee4e`e`e`e ddefe ddefebeeeeeeeeeeebe_e_e_e_ebe_e_ebe`e`ebeedd d!ZfdZgd"Zhd#Zid$Zjd%Zkd&Zld'Zmd(Znd)Zod*Zpd+Zqd,Zrd-Zsd.Ztehd/eid0eld1emd2end3eod4eqd5erd6esd7etd8i ZueserejethZvee_eRd9<Gd:d;d;eCZwGdeee4ed?d@dAZyGdBdCdCZzeeeebdDdEdFZ{dS)GN)Counter defaultdictdeque)CallableHashableIterable) TYPE_CHECKINGAnyr DefaultDictDequeDict ForwardRef FrozenSet GeneratorrIteratorListMappingOptionalPatternSequenceSetTupleTypeTypeVarUnion) AnnotatedFinal)errors) Validatormake_generic_validatorprep_validators) ErrorWrapper) ConfigErrorInvalidDiscriminatorMissingDiscriminatorNoneIsNotAllowedError)Json JsonWrapper) NoArgAnyCallableconvert_genericsdisplay_as_typeget_args get_origin is_finalvaris_literal_type is_new_type is_none_type is_typeddictis_typeddict_specialis_unionnew_type_supertype) PyObjectStrRepresentation ValueItems"get_discriminator_alias_and_valuesget_unique_discriminator_aliaslenient_isinstancelenient_issubclass sequence_likesmart_deepcopy)constant_validatordict_validatorfind_validators validate_jsonRequiredTc@sJeZdZedddZeedddZedddZeeed d d Z d S) UndefinedTypereturncCsdS)NZPydanticUndefinedselfrHrH\/workspaces/shunt/resources/test-fastapi/venv/lib/python3.9/site-packages/pydantic/fields.py__repr__FszUndefinedType.__repr__)rJrGcCs|SNrHrIrHrHrK__copy__IszUndefinedType.__copy__cCsdS)N UndefinedrHrIrHrHrK __reduce__LszUndefinedType.__reduce__)rJ_rGcCs|SrMrH)rJrQrHrHrK __deepcopy__OszUndefinedType.__deepcopy__N) __name__ __module__ __qualname__strrLrDrNrPr rRrHrHrHrKrEEsrE)ValidatorsList) BaseConfig) ErrorList) ModelOrDc)AbstractSetIntStrMappingIntStrAnyReprArgs.c@seZdZdZdZddddddddddddddddZefeeddddZd d d d Z e e d d dZ e e efddddZdd ddZdS) FieldInfoz3 Captures extra information about a field. )defaultdefault_factoryaliasalias_prioritytitle descriptionexcludeincludeconstgtgeltle multiple_of allow_inf_nan max_digitsdecimal_places min_items max_items unique_items min_length max_lengthallow_mutationreprregex discriminatorextraNT)rsrtrwrhrjrirkrlrmrnrorprqrrru)r_kwargsrGcKs|||_|dd|_|dd|_|d|jdur6dnd|_|dd|_|dd|_|dd|_|dd|_|d d|_ |d d|_ |d d|_ |d d|_ |d d|_ |dd|_|dd|_|dd|_|dd|_|dd|_|dd|_|dd|_|dd|_|dd|_|dd|_|dd|_|dd|_|dd|_||_dS)Nr`rarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtruTrwrxrv)r_popr`rarbrcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurwrxrvry)rJr_rzrHrHrK__init__s6zFieldInfo.__init__r]rFcs4ddijfddjD}fdd|DS)NrvTc3s|]}|t|fVqdSrMgetattr).0srIrHrK z*FieldInfo.__repr_args__..cs(g|] \}}||dkr||fqSrM)get)rav)field_defaults_to_hiderHrK rz+FieldInfo.__repr_args__..)__field_constraints__ __slots__)rJattrsrH)rrJrK __repr_args__s zFieldInfo.__repr_args__csfddjDS)z Gets the constraints set on the field by comparing the constraint value with its default value :return: the constraints set on field_info cs"h|]\}}t||kr|qSrHr~)rattrr_rIrHrK rz,FieldInfo.get_constraints..)ritemsrIrHrIrKget_constraintsszFieldInfo.get_constraints) from_configrGc Cs|D]\}}zt||}Wn ty>|j||Yq0||j|dur`t|||q|dkrxt |||_ q|dkrtj ||dd|_ qdS)z{ Update this FieldInfo based on a dict from get_field_info, only fields which have not been set are dated. NrerfTZ intersect) rrAttributeErrorry setdefaultrrsetattrr8mergererf)rJr attr_namevalueZ current_valuerHrHrKupdate_from_configs zFieldInfo.update_from_configcCs |jtur|jdurtddS)N/cannot specify both default and default_factory)r_rOr` ValueErrorrIrHrHrK _validateszFieldInfo._validate)rSrTrU__doc__rrrOr r}rrrVrr rrrHrHrHrKr^as.  r^Tr`rarcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurwrxrvr[r\)r_r`rarcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurwrxrvryrGcKsNt|f||||||||| | | | | |||||||||||d|}||S)u Used to provide extra information about a field, either for the model schema or complex validation. Some arguments apply only to number fields (``int``, ``float``, ``Decimal``) and some apply only to ``str``. :param default: since this is replacing the field’s default, its first argument is used to set the default, use ellipsis (``...``) to indicate the field is required :param default_factory: callable that will be called when a default value is needed for this field If both `default` and `default_factory` are set, an error is raised. :param alias: the public name of the field :param title: can be any string, used in the schema :param description: can be any string, used in the schema :param exclude: exclude this field while dumping. Takes same values as the ``include`` and ``exclude`` arguments on the ``.dict`` method. :param include: include this field while dumping. Takes same values as the ``include`` and ``exclude`` arguments on the ``.dict`` method. :param const: this field is required and *must* take it's default value :param gt: only applies to numbers, requires the field to be "greater than". The schema will have an ``exclusiveMinimum`` validation keyword :param ge: only applies to numbers, requires the field to be "greater than or equal to". The schema will have a ``minimum`` validation keyword :param lt: only applies to numbers, requires the field to be "less than". The schema will have an ``exclusiveMaximum`` validation keyword :param le: only applies to numbers, requires the field to be "less than or equal to". The schema will have a ``maximum`` validation keyword :param multiple_of: only applies to numbers, requires the field to be "a multiple of". The schema will have a ``multipleOf`` validation keyword :param allow_inf_nan: only applies to numbers, allows the field to be NaN or infinity (+inf or -inf), which is a valid Python float. Default True, set to False for compatibility with JSON. :param max_digits: only applies to Decimals, requires the field to have a maximum number of digits within the decimal. It does not include a zero before the decimal point or trailing decimal zeroes. :param decimal_places: only applies to Decimals, requires the field to have at most a number of decimal places allowed. It does not include trailing decimal zeroes. :param min_items: only applies to lists, requires the field to have a minimum number of elements. The schema will have a ``minItems`` validation keyword :param max_items: only applies to lists, requires the field to have a maximum number of elements. The schema will have a ``maxItems`` validation keyword :param unique_items: only applies to lists, requires the field not to have duplicated elements. The schema will have a ``uniqueItems`` validation keyword :param min_length: only applies to strings, requires the field to have a minimum length. The schema will have a ``minLength`` validation keyword :param max_length: only applies to strings, requires the field to have a maximum length. The schema will have a ``maxLength`` validation keyword :param allow_mutation: a boolean which defaults to True. When False, the field raises a TypeError if the field is assigned on an instance. The BaseModel Config must set validate_assignment to True :param regex: only applies to strings, requires the field match against a regular expression pattern string. The schema will have a ``pattern`` validation keyword :param discriminator: only useful with a (discriminated a.k.a. tagged) `Union` of sub models with a common field. The `discriminator` is the name of this common field to shorten validation and improve generated schema :param repr: show this field in the representation :param **extra: any additional keyword arguments will be added as is to the schema r)r^r)r_r`rarcrdrerfrgrhrirjrkrlrmrnrorprqrrrsrtrurwrxrvry field_inforHrHrKFields@Prr{ zList[{}]zSet[{}]zTuple[{}, ...]z Sequence[{}]z FrozenSet[{}]z Iterable[{}]z Deque[{}]zDict[{}]zDefaultDict[{}]z Counter[{}]MAPPING_LIKE_SHAPESc @seZdZdZddeddddeeeee ee fedeee de eee dd dd Zed d d Zeeeeedee efd ddZeeeeee ee fedddddZedddddZee d ddZdd ddZdd ddZdd ddZdd ddZdd eeee dd!d"d#Zdd d$d%Zdd&ee eefd'ed(d)d*d+d,Zee eefd'ed(d)d*d-d.Zee eefd'ed(d)d*d/d0Z ee eefd'ed(d)d*d1d2Z!ee eefd'ed(d)d*d3d4Z"e#e eefe$e#e eeffd5d6d7Z%ee eefd'ed(d)d*d8d9Z&ee eefd'ed(d)d*d:d;Z'ee eefd'ed(dd?Z(e d d@dAZ)e*d dBdCZ+dDd dEdFZ,dS)G ModelField)type_ outer_type_ annotation sub_fieldssub_fields_mapping key_field validatorspre_validatorspost_validatorsr_r`requiredfinal model_confignamera has_aliasrdiscriminator_keydiscriminator_aliasvalidate_always allow_noneshapeclass_validators parse_jsonNF)r_r`rrrarrX BoolUndefined) rrrrr_r`rrrarrGc Cs||_| du|_| dur| n||_||_t||_||_|p>i|_||_||_ ||_ ||_ ||_ | pjt ||_|jj|_|j|_d|_d|_d|_d|_d|_g|_d|_d|_d|_t|_|j ||dS)NF)rrrarr*rrrr_r`rrrr^rrxrrrrrrrrrrrSHAPE_SINGLETONr prepare_fieldprepare) rJrrrrr_r`rrrarrHrHrKr}s6     zModelField.__init__rFcCs|jdurt|jS|SrMr`r>r_rIrHrHrK get_defaultszModelField.get_default) field_namerrconfigrGcCs||}d}t|turddt|ddD}t|dkrNtd|tt|d}|durt|}| ||j t t fvrtd||t ur|t ur||_ t |tr|durtd||}| |n|durt|fi|}|jdurdn|j }|||fS)a~ Get a FieldInfo from a root typing.Annotated annotation, value, or config default. The FieldInfo may be set in typing.Annotated or the value, but not both. If neither contain a FieldInfo, a new one will be created using the config. :param field_name: name of the field for use in error messages :param annotation: a type hint such as `str` or `Annotated[str, Field(..., min_length=5)]` :param value: the field's assigned value :param config: the model's config object :return: the FieldInfo contained in the `annotation`, the value, or a new one from the config. NcSsg|]}t|tr|qSrH) isinstancer^)rargrHrHrKrrz.ModelField._get_field_info..rz1cannot specify multiple `Annotated` `Field`s for z1`Field` default cannot be set in `Annotated` for z;cannot specify `Annotated` and value `Field`s together for )get_field_infor-rr,lenrnextitercopyrr_rOrCrr^r`r)rrrrZfield_info_from_configrZ field_infosrHrHrK_get_field_infos0       zModelField._get_field_info)rrrrrrGc Cspddlm}|||||\}}t}|tur6d}d}n |turBd}|||||j}||||j|||j|||d S)Nr)get_annotation_from_field_infoTF) rrrarr_r`rrr)ZschemarrrOrCZvalidate_assignmentrar`) clsrrrrrrrrrHrHrKinfers( zModelField.infer)rrGcCs||_||j}|||d}|dp2d}|r^||jjpDdkr^||j_||j_||_|d}|durt |jj ||j_ |d}|durtj |jj |dd|j_ dS)NrarbrrerfTr) rrrrrrrbrar8rrerf)rJrZinfo_from_configZ new_aliasZnew_alias_priorityZ new_excludeZ new_includerHrHrK set_configs     zModelField.set_configcCs |j|jkSrM)rrarIrHrHrK alt_aliasszModelField.alt_aliascCsb||jjtus |jjtur$dS||jturrtjd_t?_-n|t@us|tAurj/tjddj0dd_Btjd_tC_-nnt*|tDr2j/tjddj0dd_Btjd_tE_-n&t*|tFrnj/tjddj0dd_BtG_tH_-nt*|tIrj/tjddj0dd_Btjd_tJ_-n|tKtLhvrtjd_tM_-/jj0dg_(ndt*|tNrdStO|d sjPjQrHtR_-fddt2tjD_(|_dSt d|d/jdj0g_(dS)NTFrzM`discriminator` can only be used with `Union` type with more than one variantrc s(g|] }|jdt|qSrQ)_create_sub_typerr+)rtrIrHrKrrz-ModelField._type_analysis..r{Z_0)rHcs(g|] \}}|jd|qSrrrrirrIrHrKrr__get_validators__cSs$i|]\}}d|t|ddqS)list_Tprerrr validatorrHrHrK rz-ModelField._type_analysis..cSs$i|]\}}d|t|ddqS)set_TrrrrHrHrKrrcSs$i|]\}}d|t|ddqS)Z frozenset_TrrrrHrHrKrrkey_for_keys_typecs(g|] \}}|jd|qSrrrrIrHrKrrzFields of type "z" are not supported.rQ)Sr<rr(Z inner_typerr'r rr __bound____constraints__rr0r5objectrrOrrrer/r2r.rrr,rr-rr3rr4 TypeErrorCollectionsHashabletyperr1appendrrr&prepare_discriminated_union_sub_fields issubclassrSHAPE_TUPLE_ELLIPSISrEllipsisrr SHAPE_TUPLE enumeraterrrupdate SHAPE_LISTr SHAPE_SETrSHAPE_FROZENSETr SHAPE_DEQUErSHAPE_SEQUENCEdictr r SHAPE_DICTr SHAPE_DEFAULTDICTrint SHAPE_COUNTERr SHAPE_MAPPINGrCollectionsIterableSHAPE_ITERABLErhasattrrZarbitrary_types_allowed SHAPE_GENERIC)rJoriginZtypes_rargsget_validatorsrHrIrKrGs                                  "  "  " " zModelField._type_analysiscCs|jdusJ|jjturdS|jdus,Ji}t}|jD]F}|j}|jturVdSt||j\}}|||D] }|||<qtq<||_ t ||j|_ dS)z Prepare the mapping -> and update `sub_fields` Note that this process can be aborted if a `ForwardRef` is encountered N) rrrrrsetr r9addrr:r)rJrZ all_aliases sub_fieldrraZdiscriminator_valuesdiscriminator_valuerHrHrKrs      z1ModelField.prepare_discriminated_union_sub_fieldsr)rrrrGcCsJ|r d}ndd|jD}|||d|j\}}|j||||j|dS)Nc Ss6i|].\}}|jr|t|j|jd|j|j|jdqS)F)funcr each_itemalways check_fieldsskip_on_failure)rrrrrrr)rkrrHrHrKrs z/ModelField._create_sub_type..)rrrrr)rrrrr)rJrrrrrrQrHrHrKrs  zModelField._create_sub_typecCs6t|jddp$tdd|jD|_|j}|jrB|jtkrt|jdd}gdd|D|rj|nt t |j|j d d|DR}t ||_ g|_g|_|jr|jjr|jtt|r|jt d d|D7_|jt d d|D7_|jr|jtt|jp d|_|jp.d|_dS) a Prepare self.pre_validators, self.validators, and self.post_validators based on self.type_'s __get_validators__ and class validators. This method should be idempotent, e.g. it should be safe to call multiple times without mis-configuring the field. rFcss|] }|jVqdSrM)rrrrHrHrKr6sz1ModelField.populate_validators..rNcSsg|]}|jr|jr|jqSrHrrrrrHrHrKr>rz2ModelField.populate_validators..cSsg|]}|jr|js|jqSrHr rrHrHrKr@rcss |]}|js|jr|jVqdSrMr rrHrHrKrKrcss |]}|js|js|jVqdSrMr rrHrHrKrLr)rranyrvaluesrrrrlistrArr!rrrrrgrr r?rrB)rJZclass_validators_rZv_funcsrHrHrKr0s2     zModelField.populate_validators)rLocStrrZValidateReturn)rr"locrrGcCs|jjtusJ|jjturB|dus(Jtd|jd|jd|jrl||||||j\}}|rl||fS|durt |jrn6|j r|j r||||||j SdSn|t t |fS|jtkr|||||\}}n|jtvr|||||\}}n~|jtkr|||||\}}n\|jtkr:|||||\}}n:|jtkr`||||||j\}}n|||||\}}|s|j r||||||j \}}||fS)Nfield "I" not yet prepared so type is still a ForwardRef, you might need to call .update_forward_refs().)NN)rrrr r#rrSr_apply_validatorsr1rrr"r&rr_validate_singletonr_validate_mapping_liker_validate_tupler_validate_iterablerr_validate_sequence_like)rJrr"r&rrrHrHrKvalidateTsD         zModelField.validatecCst|sr|jtkrt}nH|jttfvr4t}n0|jtkrHt }n|jt kr\t }nt }|t ||fSt|tr|n|f}g}g}t|D]D\}} g||R} || || |\} } | r|| q|| q|r||fS|} |jtkrt|} n|jt krt|} n|jtkr.t|} nx|jtkrDt|} nb|jtkrt|trft|} n@t|tr|t|} n*t|trt|} nt|trt|} | dfS)z Validate sequence-like containers: lists, tuples, sets and generators Note that large if-else blocks are necessary to enable Cython optimization, which is why we disable the complexity check above. N)r=rrrZ ListErrorrr TupleErrorrZSetErrorrZFrozenSetErrorZ SequenceErrorr"rtuplerr+rr frozensetrrrrr)rJrr"r&reresultrrv_v_locree convertedrHrHrKr/sR                         z"ModelField._validate_sequence_likecCs:z t|}Wn$ty0|tt|fYS0|dfS)zw Validate Iterables. This intentionally doesn't validate values to allow infinite generators. N)rrr"rZ IterableError)rJrr"r&riterablerHrHrKr.s   zModelField._validate_iterablecCsd}t|st}n*t|t|j}}||kr@tj||d}|rR|t||fSt|tr`|n|f}g}g} t t ||jD]J\} \} } g|| R} | j | || |d\}}|r| |q~| |q~| r|| fSt|dfSdS)N) actual_lengthexpected_lengthr&r) r=rr1rrZTupleLengthErrorr"rr2rzipr0r)rJrr"r&rr4r<r=r5rrr6fieldr7r8r9rHrHrKr-s(   zModelField._validate_tuplec CsHz t|}Wn2ty>}z|t||fWYd}~Sd}~00t|trN|n|f}ig}}|D]x\} } g|dR} |jj| || |d\} } | r|| qfg|| R} | | || |\}}|r||qf||| <qf|r||fS|j t kr|dfS|j t krt |j|dfS|j tkr4t|dfS|||dfSdS)NZ__key__r>)r@rr"rr2rrr0rr+rr r rrr CollectionCounter_get_mapping_value)rJrr"r&rZv_iterexcr5rrr6r7Z key_resultZ key_errorsZ value_resultZ value_errorsrHrHrKr,s6 $        z!ModelField._validate_mapping_like)originalr:rGcCsf|j}|tks|tkr|S|tthvr2t|j|Sz ||WSty`td|jdYn0dS)z When type is `Mapping[KT, KV]` (or another unsupported mapping), we try to avoid coercing to `dict` unwillingly. z Could not convert dictionary to N) rrr rr rr RuntimeErrorrS)rJrDr:Z original_clsrHrHrKrBs    zModelField._get_mapping_valuec Cs8|jr |jdur"|||||Sg}|jjrtt|jr|jD]}|j|j urB|dfSqB|jD]p}zt ||j r|dfWSWqft yt |t|j r|j ||||d\}}|s|dfYSYqf0qf|jD]8}|j ||||d\}}|r ||q|dfSq||fS||||||jSdS)Nr>)rr_validate_discriminated_unionrZ smart_unionr4r-rrrrrr;r0rr*r) rJrr"r&rrr@rerrorrHrHrKr+ s0        zModelField._validate_singletonc Csh|jdusJ|jdusJz||j}WnztyR|tt|jd|fYStyzt||j}Wn0ttfy|tt|jd|fYYS0Yn0z|j|}Wnzty|dusJt d|j d|j dYnxty.|jdus J|tt |j|t |jd|fYS0t|tsB|f}|j||g|t|jR|dSdS)N)rr'r(r))rrZallowed_valuesr>)rrKeyErrorr"r%rrrrr#rrSr$r#rr2r0r+r)rJrr"r&rrrrHrHrKrFOsB  &    z(ModelField._validate_discriminated_unionrW)rr"r&rrrGc Csf|D]X}z||||||j}WqtttfyZ}z|t||fWYd}~Sd}~00q|dfSrM)rrrAssertionErrorr")rJrr"r&rrrrCrHrHrKr*ws *zModelField._apply_validatorscCs8ddlm}|jtkp6t|jdp6t|j|ttt t fS)z\ Whether the field is "complex" eg. env variables should be parsed as JSON. r) BaseModelZ__pydantic_model__) mainrJrrrrr<r#rr3r)rJrJrHrHrK is_complexs    zModelField.is_complexcCst|j}|jtvr0dt|jjd|d}n||jtkrXdddd|jD}nT|jt kr|jslJdt|jddd|jD}n|jt krt |j|}|j r|jt ks|jsd |d}t |S) NzMapping[z, ]z Tuple[{}]css|]}t|jVqdSrMr+rrfrHrHrKrrz+ModelField._type_display..z{}[{}]css|]}t|jVqdSrMrNrOrHrHrKrrz Optional[)r+rrrrrformatjoinrrrSHAPE_NAME_LOOKUPrr6)rJrrHrHrK _type_displays       zModelField._type_displayr]cCstd|jfd|fd|jfg}|jsZ|jdurJ|dd|jjdfn|d|jf|jrp|d|jf|S) Nrrrr`z r_ra) rrTrr`rrSr_rra)rJrrHrHrKrs zModelField.__repr_args__)-rSrTrUrrOrVrr rr rr)boolr^r}r staticmethodrr classmethodrrpropertyrrrrrrrr0r/r.r-r,rDrrBr+rFr*rLr6rTrrHrHrHrKrms# ,  + 2% 2 :   #* 0 )  rc@sNeZdZdZefddeeeddddZeddd Z ee d d d Z dS) ModelPrivateAttrr_r`Nr`r_r`rGcCs||_||_dSrMr[)rJr_r`rHrHrKr}szModelPrivateAttr.__init__rFcCs|jdurt|jS|SrMrrIrHrHrKrszModelPrivateAttr.get_default)otherrGcCs$t||jo"|j|jf|j|jfkSrM)rrr_r`)rJr^rHrHrK__eq__szModelPrivateAttr.__eq__) rSrTrUrrOr rr)r}rrVr_rHrHrHrKrZs rZr\r]cCs$|tur|durtdt||dS)u Indicates that attribute is only used internally and never mixed with regular fields. Types or values of private attrs are not checked by pydantic and it's up to you to keep them relevant. Private attrs are stored in model __slots__. :param default: the attribute’s default value :param default_factory: callable that will be called when a default value is needed for this attribute If both `default` and `default_factory` are set, an error is raised. Nrr\)rOrrZr[rHrHrK PrivateAttrs r`c@seZdZdZdS)rzV Used to postpone field preparation, while creating recursive generic models. N)rSrTrUrrHrHrHrKrsr)rvalrGcCst|o|tuot|t SrM)r.rOrr^)rrarHrHrKis_finalvar_with_default_valsrb)|rr collectionsrrArrcollections.abcrrrrrtypingrr r r r r rrrrrrrrrrrrrZtyping_extensionsrrrrrrr r!Zerror_wrappersr"r#r$r%r&typesr'r(r)r*r+r,r-r.r/r0r1r2r3r4r5utilsr6r7r8r9r:r;r<r=r>rr?r@rArBrrC__annotations__rDrErOrWrrXrYrZr[r\r]r%r rVr$rVrr^floatrrrrr rrrrrrrr r r rSrrrZr`rrbrHrHrHrKs \  <,       ~   q G