function.py 56 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815
  1. """Immutable function vars."""
  2. from __future__ import annotations
  3. import dataclasses
  4. import inspect
  5. import sys
  6. from typing import (
  7. TYPE_CHECKING,
  8. Any,
  9. Callable,
  10. Mapping,
  11. NoReturn,
  12. Optional,
  13. Sequence,
  14. Tuple,
  15. Type,
  16. Union,
  17. overload,
  18. )
  19. from typing_extensions import Concatenate, Generic, ParamSpec, TypeVar
  20. from reflex.utils import format
  21. from reflex.utils.exceptions import VarTypeError
  22. from reflex.utils.types import GenericType, Unset, get_origin
  23. from .base import (
  24. CachedVarOperation,
  25. LiteralVar,
  26. ReflexCallable,
  27. TypeComputer,
  28. Var,
  29. VarData,
  30. VarWithDefault,
  31. cached_property_no_lock,
  32. unwrap_reflex_callalbe,
  33. )
  34. if TYPE_CHECKING:
  35. from .number import BooleanVar, NumberVar
  36. from .object import ObjectVar
  37. from .sequence import ArrayVar, StringVar
  38. P = ParamSpec("P")
  39. R = TypeVar("R")
  40. R2 = TypeVar("R2")
  41. V1 = TypeVar("V1")
  42. V2 = TypeVar("V2")
  43. V3 = TypeVar("V3")
  44. V4 = TypeVar("V4")
  45. V5 = TypeVar("V5")
  46. V6 = TypeVar("V6")
  47. CALLABLE_TYPE = TypeVar("CALLABLE_TYPE", bound=ReflexCallable, infer_variance=True)
  48. OTHER_CALLABLE_TYPE = TypeVar(
  49. "OTHER_CALLABLE_TYPE", bound=ReflexCallable, infer_variance=True
  50. )
  51. MAPPING_TYPE = TypeVar("MAPPING_TYPE", bound=Mapping, covariant=True)
  52. SEQUENCE_TYPE = TypeVar("SEQUENCE_TYPE", bound=Sequence, covariant=True)
  53. def type_is_reflex_callable(type_: Any) -> bool:
  54. """Check if a type is a ReflexCallable.
  55. Args:
  56. type_: The type to check.
  57. Returns:
  58. True if the type is a ReflexCallable.
  59. """
  60. return type_ is ReflexCallable or get_origin(type_) is ReflexCallable
  61. K = TypeVar("K", covariant=True)
  62. V = TypeVar("V", covariant=True)
  63. T = TypeVar("T", covariant=True)
  64. class FunctionVar(
  65. Var[CALLABLE_TYPE],
  66. default_type=ReflexCallable[Any, Any],
  67. is_subclass=type_is_reflex_callable,
  68. ):
  69. """Base class for immutable function vars."""
  70. @overload
  71. def partial(self) -> FunctionVar[CALLABLE_TYPE]: ...
  72. @overload
  73. def partial(
  74. self: FunctionVar[ReflexCallable[Concatenate[VarWithDefault[V1], P], R]]
  75. | FunctionVar[ReflexCallable[Concatenate[V1, P], R]],
  76. arg1: Union[V1, Var[V1]],
  77. ) -> FunctionVar[ReflexCallable[P, R]]: ...
  78. @overload
  79. def partial(
  80. self: FunctionVar[
  81. ReflexCallable[Concatenate[VarWithDefault[V1], VarWithDefault[V2], P], R]
  82. ]
  83. | FunctionVar[ReflexCallable[Concatenate[V1, VarWithDefault[V2], P], R]]
  84. | FunctionVar[ReflexCallable[Concatenate[V1, V2, P], R]],
  85. arg1: Union[V1, Var[V1]],
  86. arg2: Union[V2, Var[V2]],
  87. ) -> FunctionVar[ReflexCallable[P, R]]: ...
  88. @overload
  89. def partial(
  90. self: FunctionVar[
  91. ReflexCallable[
  92. Concatenate[
  93. VarWithDefault[V1], VarWithDefault[V2], VarWithDefault[V3], P
  94. ],
  95. R,
  96. ]
  97. ]
  98. | FunctionVar[
  99. ReflexCallable[
  100. Concatenate[V1, VarWithDefault[V2], VarWithDefault[V3], P], R
  101. ]
  102. ]
  103. | FunctionVar[ReflexCallable[Concatenate[V1, V2, VarWithDefault[V3], P], R]]
  104. | FunctionVar[ReflexCallable[Concatenate[V1, V2, V3, P], R]],
  105. arg1: Union[V1, Var[V1]],
  106. arg2: Union[V2, Var[V2]],
  107. arg3: Union[V3, Var[V3]],
  108. ) -> FunctionVar[ReflexCallable[P, R]]: ...
  109. @overload
  110. def partial(
  111. self: FunctionVar[ReflexCallable[Concatenate[V1, V2, V3, V4, P], R]],
  112. arg1: Union[V1, Var[V1]],
  113. arg2: Union[V2, Var[V2]],
  114. arg3: Union[V3, Var[V3]],
  115. arg4: Union[V4, Var[V4]],
  116. ) -> FunctionVar[ReflexCallable[P, R]]: ...
  117. @overload
  118. def partial(
  119. self: FunctionVar[ReflexCallable[Concatenate[V1, V2, V3, V4, V5, P], R]],
  120. arg1: Union[V1, Var[V1]],
  121. arg2: Union[V2, Var[V2]],
  122. arg3: Union[V3, Var[V3]],
  123. arg4: Union[V4, Var[V4]],
  124. arg5: Union[V5, Var[V5]],
  125. ) -> FunctionVar[ReflexCallable[P, R]]: ...
  126. @overload
  127. def partial(
  128. self: FunctionVar[ReflexCallable[Concatenate[V1, V2, V3, V4, V5, V6, P], R]],
  129. arg1: Union[V1, Var[V1]],
  130. arg2: Union[V2, Var[V2]],
  131. arg3: Union[V3, Var[V3]],
  132. arg4: Union[V4, Var[V4]],
  133. arg5: Union[V5, Var[V5]],
  134. arg6: Union[V6, Var[V6]],
  135. ) -> FunctionVar[ReflexCallable[P, R]]: ...
  136. @overload
  137. def partial(
  138. self: FunctionVar[ReflexCallable[P, R]], *args: Var | Any
  139. ) -> FunctionVar[ReflexCallable[P, R]]: ...
  140. @overload
  141. def partial(self, *args: Var | Any) -> FunctionVar: ...
  142. def partial(self, *args: Var | Any) -> FunctionVar: # type: ignore
  143. """Partially apply the function with the given arguments.
  144. Args:
  145. *args: The arguments to partially apply the function with.
  146. Returns:
  147. The partially applied function.
  148. """
  149. if not args:
  150. return self
  151. args = tuple(map(LiteralVar.create, args))
  152. remaining_validators = self._pre_check(*args)
  153. partial_types, type_computer = self._partial_type(*args)
  154. if self.__call__ is self.partial:
  155. # if the default behavior is partial, we should return a new partial function
  156. return ArgsFunctionOperationBuilder.create(
  157. (),
  158. VarOperationCall.create(
  159. self,
  160. *args,
  161. Var(_js_expr="...args"),
  162. _var_type=self._return_type(*args),
  163. ),
  164. rest="args",
  165. validators=remaining_validators,
  166. type_computer=type_computer,
  167. _var_type=partial_types,
  168. )
  169. return ArgsFunctionOperation.create(
  170. (),
  171. VarOperationCall.create(
  172. self, *args, Var(_js_expr="...args"), _var_type=self._return_type(*args)
  173. ),
  174. rest="args",
  175. validators=remaining_validators,
  176. type_computer=type_computer,
  177. _var_type=partial_types,
  178. )
  179. # THIS CODE IS GENERATED BY `_generate_overloads_for_function_var_call` function below.
  180. @overload
  181. def call(
  182. self: FunctionVar[ReflexCallable[[], bool]],
  183. ) -> BooleanVar: ...
  184. @overload
  185. def call(
  186. self: FunctionVar[ReflexCallable[[], int]],
  187. ) -> NumberVar[int]: ...
  188. @overload
  189. def call(
  190. self: FunctionVar[ReflexCallable[[], float]],
  191. ) -> NumberVar[float]: ...
  192. @overload
  193. def call( # pyright: ignore[reportOverlappingOverload]
  194. self: FunctionVar[ReflexCallable[[], str]],
  195. ) -> StringVar[str]: ...
  196. @overload
  197. def call(
  198. self: FunctionVar[ReflexCallable[[], SEQUENCE_TYPE]],
  199. ) -> ArrayVar[SEQUENCE_TYPE]: ...
  200. @overload
  201. def call(
  202. self: FunctionVar[ReflexCallable[[], MAPPING_TYPE]],
  203. ) -> ObjectVar[MAPPING_TYPE]: ...
  204. @overload
  205. def call(
  206. self: FunctionVar[ReflexCallable[[], R]],
  207. ) -> Var[R]: ...
  208. @overload
  209. def call(
  210. self: FunctionVar[ReflexCallable[[VarWithDefault[V1]], bool]],
  211. arg1: Union[V1, Var[V1], Unset] = Unset(),
  212. ) -> BooleanVar: ...
  213. @overload
  214. def call(
  215. self: FunctionVar[ReflexCallable[[VarWithDefault[V1]], int]],
  216. arg1: Union[V1, Var[V1], Unset] = Unset(),
  217. ) -> NumberVar[int]: ...
  218. @overload
  219. def call(
  220. self: FunctionVar[ReflexCallable[[VarWithDefault[V1]], float]],
  221. arg1: Union[V1, Var[V1], Unset] = Unset(),
  222. ) -> NumberVar[float]: ...
  223. @overload
  224. def call(
  225. self: FunctionVar[ReflexCallable[[VarWithDefault[V1]], str]],
  226. arg1: Union[V1, Var[V1], Unset] = Unset(),
  227. ) -> StringVar[str]: ...
  228. @overload
  229. def call(
  230. self: FunctionVar[ReflexCallable[[VarWithDefault[V1]], SEQUENCE_TYPE]],
  231. arg1: Union[V1, Var[V1], Unset] = Unset(),
  232. ) -> ArrayVar[SEQUENCE_TYPE]: ...
  233. @overload
  234. def call(
  235. self: FunctionVar[ReflexCallable[[VarWithDefault[V1]], MAPPING_TYPE]],
  236. arg1: Union[V1, Var[V1], Unset] = Unset(),
  237. ) -> ObjectVar[MAPPING_TYPE]: ...
  238. @overload
  239. def call(
  240. self: FunctionVar[ReflexCallable[[VarWithDefault[V1]], R]],
  241. arg1: Union[V1, Var[V1], Unset] = Unset(),
  242. ) -> Var[R]: ...
  243. @overload
  244. def call(
  245. self: FunctionVar[
  246. ReflexCallable[[VarWithDefault[V1], VarWithDefault[V2]], bool]
  247. ],
  248. arg1: Union[V1, Var[V1], Unset] = Unset(),
  249. arg2: Union[V2, Var[V2], Unset] = Unset(),
  250. ) -> BooleanVar: ...
  251. @overload
  252. def call(
  253. self: FunctionVar[
  254. ReflexCallable[[VarWithDefault[V1], VarWithDefault[V2]], int]
  255. ],
  256. arg1: Union[V1, Var[V1], Unset] = Unset(),
  257. arg2: Union[V2, Var[V2], Unset] = Unset(),
  258. ) -> NumberVar[int]: ...
  259. @overload
  260. def call(
  261. self: FunctionVar[
  262. ReflexCallable[[VarWithDefault[V1], VarWithDefault[V2]], float]
  263. ],
  264. arg1: Union[V1, Var[V1], Unset] = Unset(),
  265. arg2: Union[V2, Var[V2], Unset] = Unset(),
  266. ) -> NumberVar[float]: ...
  267. @overload
  268. def call(
  269. self: FunctionVar[
  270. ReflexCallable[[VarWithDefault[V1], VarWithDefault[V2]], str]
  271. ],
  272. arg1: Union[V1, Var[V1], Unset] = Unset(),
  273. arg2: Union[V2, Var[V2], Unset] = Unset(),
  274. ) -> StringVar[str]: ...
  275. @overload
  276. def call(
  277. self: FunctionVar[
  278. ReflexCallable[[VarWithDefault[V1], VarWithDefault[V2]], SEQUENCE_TYPE]
  279. ],
  280. arg1: Union[V1, Var[V1], Unset] = Unset(),
  281. arg2: Union[V2, Var[V2], Unset] = Unset(),
  282. ) -> ArrayVar[SEQUENCE_TYPE]: ...
  283. @overload
  284. def call(
  285. self: FunctionVar[
  286. ReflexCallable[[VarWithDefault[V1], VarWithDefault[V2]], MAPPING_TYPE]
  287. ],
  288. arg1: Union[V1, Var[V1], Unset] = Unset(),
  289. arg2: Union[V2, Var[V2], Unset] = Unset(),
  290. ) -> ObjectVar[MAPPING_TYPE]: ...
  291. @overload
  292. def call(
  293. self: FunctionVar[ReflexCallable[[VarWithDefault[V1], VarWithDefault[V2]], R]],
  294. arg1: Union[V1, Var[V1], Unset] = Unset(),
  295. arg2: Union[V2, Var[V2], Unset] = Unset(),
  296. ) -> Var[R]: ...
  297. @overload
  298. def call(
  299. self: FunctionVar[
  300. ReflexCallable[
  301. [VarWithDefault[V1], VarWithDefault[V2], VarWithDefault[V3]], bool
  302. ]
  303. ],
  304. arg1: Union[V1, Var[V1], Unset] = Unset(),
  305. arg2: Union[V2, Var[V2], Unset] = Unset(),
  306. arg3: Union[V3, Var[V3], Unset] = Unset(),
  307. ) -> BooleanVar: ...
  308. @overload
  309. def call(
  310. self: FunctionVar[
  311. ReflexCallable[
  312. [VarWithDefault[V1], VarWithDefault[V2], VarWithDefault[V3]], int
  313. ]
  314. ],
  315. arg1: Union[V1, Var[V1], Unset] = Unset(),
  316. arg2: Union[V2, Var[V2], Unset] = Unset(),
  317. arg3: Union[V3, Var[V3], Unset] = Unset(),
  318. ) -> NumberVar[int]: ...
  319. @overload
  320. def call(
  321. self: FunctionVar[
  322. ReflexCallable[
  323. [VarWithDefault[V1], VarWithDefault[V2], VarWithDefault[V3]], float
  324. ]
  325. ],
  326. arg1: Union[V1, Var[V1], Unset] = Unset(),
  327. arg2: Union[V2, Var[V2], Unset] = Unset(),
  328. arg3: Union[V3, Var[V3], Unset] = Unset(),
  329. ) -> NumberVar[float]: ...
  330. @overload
  331. def call(
  332. self: FunctionVar[
  333. ReflexCallable[
  334. [VarWithDefault[V1], VarWithDefault[V2], VarWithDefault[V3]], str
  335. ]
  336. ],
  337. arg1: Union[V1, Var[V1], Unset] = Unset(),
  338. arg2: Union[V2, Var[V2], Unset] = Unset(),
  339. arg3: Union[V3, Var[V3], Unset] = Unset(),
  340. ) -> StringVar[str]: ...
  341. @overload
  342. def call(
  343. self: FunctionVar[
  344. ReflexCallable[
  345. [VarWithDefault[V1], VarWithDefault[V2], VarWithDefault[V3]],
  346. SEQUENCE_TYPE,
  347. ]
  348. ],
  349. arg1: Union[V1, Var[V1], Unset] = Unset(),
  350. arg2: Union[V2, Var[V2], Unset] = Unset(),
  351. arg3: Union[V3, Var[V3], Unset] = Unset(),
  352. ) -> ArrayVar[SEQUENCE_TYPE]: ...
  353. @overload
  354. def call(
  355. self: FunctionVar[
  356. ReflexCallable[
  357. [VarWithDefault[V1], VarWithDefault[V2], VarWithDefault[V3]],
  358. MAPPING_TYPE,
  359. ]
  360. ],
  361. arg1: Union[V1, Var[V1], Unset] = Unset(),
  362. arg2: Union[V2, Var[V2], Unset] = Unset(),
  363. arg3: Union[V3, Var[V3], Unset] = Unset(),
  364. ) -> ObjectVar[MAPPING_TYPE]: ...
  365. @overload
  366. def call(
  367. self: FunctionVar[
  368. ReflexCallable[
  369. [VarWithDefault[V1], VarWithDefault[V2], VarWithDefault[V3]], R
  370. ]
  371. ],
  372. arg1: Union[V1, Var[V1], Unset] = Unset(),
  373. arg2: Union[V2, Var[V2], Unset] = Unset(),
  374. arg3: Union[V3, Var[V3], Unset] = Unset(),
  375. ) -> Var[R]: ...
  376. @overload
  377. def call(
  378. self: FunctionVar[
  379. ReflexCallable[
  380. [
  381. VarWithDefault[V1],
  382. VarWithDefault[V2],
  383. VarWithDefault[V3],
  384. VarWithDefault[V4],
  385. ],
  386. bool,
  387. ]
  388. ],
  389. arg1: Union[V1, Var[V1], Unset] = Unset(),
  390. arg2: Union[V2, Var[V2], Unset] = Unset(),
  391. arg3: Union[V3, Var[V3], Unset] = Unset(),
  392. arg4: Union[V4, Var[V4], Unset] = Unset(),
  393. ) -> BooleanVar: ...
  394. @overload
  395. def call(
  396. self: FunctionVar[
  397. ReflexCallable[
  398. [
  399. VarWithDefault[V1],
  400. VarWithDefault[V2],
  401. VarWithDefault[V3],
  402. VarWithDefault[V4],
  403. ],
  404. int,
  405. ]
  406. ],
  407. arg1: Union[V1, Var[V1], Unset] = Unset(),
  408. arg2: Union[V2, Var[V2], Unset] = Unset(),
  409. arg3: Union[V3, Var[V3], Unset] = Unset(),
  410. arg4: Union[V4, Var[V4], Unset] = Unset(),
  411. ) -> NumberVar[int]: ...
  412. @overload
  413. def call(
  414. self: FunctionVar[
  415. ReflexCallable[
  416. [
  417. VarWithDefault[V1],
  418. VarWithDefault[V2],
  419. VarWithDefault[V3],
  420. VarWithDefault[V4],
  421. ],
  422. float,
  423. ]
  424. ],
  425. arg1: Union[V1, Var[V1], Unset] = Unset(),
  426. arg2: Union[V2, Var[V2], Unset] = Unset(),
  427. arg3: Union[V3, Var[V3], Unset] = Unset(),
  428. arg4: Union[V4, Var[V4], Unset] = Unset(),
  429. ) -> NumberVar[float]: ...
  430. @overload
  431. def call(
  432. self: FunctionVar[
  433. ReflexCallable[
  434. [
  435. VarWithDefault[V1],
  436. VarWithDefault[V2],
  437. VarWithDefault[V3],
  438. VarWithDefault[V4],
  439. ],
  440. str,
  441. ]
  442. ],
  443. arg1: Union[V1, Var[V1], Unset] = Unset(),
  444. arg2: Union[V2, Var[V2], Unset] = Unset(),
  445. arg3: Union[V3, Var[V3], Unset] = Unset(),
  446. arg4: Union[V4, Var[V4], Unset] = Unset(),
  447. ) -> StringVar[str]: ...
  448. @overload
  449. def call(
  450. self: FunctionVar[
  451. ReflexCallable[
  452. [
  453. VarWithDefault[V1],
  454. VarWithDefault[V2],
  455. VarWithDefault[V3],
  456. VarWithDefault[V4],
  457. ],
  458. SEQUENCE_TYPE,
  459. ]
  460. ],
  461. arg1: Union[V1, Var[V1], Unset] = Unset(),
  462. arg2: Union[V2, Var[V2], Unset] = Unset(),
  463. arg3: Union[V3, Var[V3], Unset] = Unset(),
  464. arg4: Union[V4, Var[V4], Unset] = Unset(),
  465. ) -> ArrayVar[SEQUENCE_TYPE]: ...
  466. @overload
  467. def call(
  468. self: FunctionVar[
  469. ReflexCallable[
  470. [
  471. VarWithDefault[V1],
  472. VarWithDefault[V2],
  473. VarWithDefault[V3],
  474. VarWithDefault[V4],
  475. ],
  476. MAPPING_TYPE,
  477. ]
  478. ],
  479. arg1: Union[V1, Var[V1], Unset] = Unset(),
  480. arg2: Union[V2, Var[V2], Unset] = Unset(),
  481. arg3: Union[V3, Var[V3], Unset] = Unset(),
  482. arg4: Union[V4, Var[V4], Unset] = Unset(),
  483. ) -> ObjectVar[MAPPING_TYPE]: ...
  484. @overload
  485. def call(
  486. self: FunctionVar[
  487. ReflexCallable[
  488. [
  489. VarWithDefault[V1],
  490. VarWithDefault[V2],
  491. VarWithDefault[V3],
  492. VarWithDefault[V4],
  493. ],
  494. R,
  495. ]
  496. ],
  497. arg1: Union[V1, Var[V1], Unset] = Unset(),
  498. arg2: Union[V2, Var[V2], Unset] = Unset(),
  499. arg3: Union[V3, Var[V3], Unset] = Unset(),
  500. arg4: Union[V4, Var[V4], Unset] = Unset(),
  501. ) -> Var[R]: ...
  502. @overload
  503. def call(
  504. self: FunctionVar[ReflexCallable[[V1], bool]], arg1: Union[V1, Var[V1]]
  505. ) -> BooleanVar: ...
  506. @overload
  507. def call(
  508. self: FunctionVar[ReflexCallable[[V1], int]], arg1: Union[V1, Var[V1]]
  509. ) -> NumberVar[int]: ...
  510. @overload
  511. def call(
  512. self: FunctionVar[ReflexCallable[[V1], float]], arg1: Union[V1, Var[V1]]
  513. ) -> NumberVar[float]: ...
  514. @overload
  515. def call(
  516. self: FunctionVar[ReflexCallable[[V1], str]], arg1: Union[V1, Var[V1]]
  517. ) -> StringVar[str]: ...
  518. @overload
  519. def call(
  520. self: FunctionVar[ReflexCallable[[V1], SEQUENCE_TYPE]], arg1: Union[V1, Var[V1]]
  521. ) -> ArrayVar[SEQUENCE_TYPE]: ...
  522. @overload
  523. def call(
  524. self: FunctionVar[ReflexCallable[[V1], MAPPING_TYPE]], arg1: Union[V1, Var[V1]]
  525. ) -> ObjectVar[MAPPING_TYPE]: ...
  526. @overload
  527. def call(
  528. self: FunctionVar[ReflexCallable[[V1], R]], arg1: Union[V1, Var[V1]]
  529. ) -> Var[R]: ...
  530. @overload
  531. def call(
  532. self: FunctionVar[ReflexCallable[[V1, VarWithDefault[V2]], bool]],
  533. arg1: Union[V1, Var[V1]],
  534. arg2: Union[V2, Var[V2], Unset] = Unset(),
  535. ) -> BooleanVar: ...
  536. @overload
  537. def call(
  538. self: FunctionVar[ReflexCallable[[V1, VarWithDefault[V2]], int]],
  539. arg1: Union[V1, Var[V1]],
  540. arg2: Union[V2, Var[V2], Unset] = Unset(),
  541. ) -> NumberVar[int]: ...
  542. @overload
  543. def call(
  544. self: FunctionVar[ReflexCallable[[V1, VarWithDefault[V2]], float]],
  545. arg1: Union[V1, Var[V1]],
  546. arg2: Union[V2, Var[V2], Unset] = Unset(),
  547. ) -> NumberVar[float]: ...
  548. @overload
  549. def call(
  550. self: FunctionVar[ReflexCallable[[V1, VarWithDefault[V2]], str]],
  551. arg1: Union[V1, Var[V1]],
  552. arg2: Union[V2, Var[V2], Unset] = Unset(),
  553. ) -> StringVar[str]: ...
  554. @overload
  555. def call(
  556. self: FunctionVar[ReflexCallable[[V1, VarWithDefault[V2]], SEQUENCE_TYPE]],
  557. arg1: Union[V1, Var[V1]],
  558. arg2: Union[V2, Var[V2], Unset] = Unset(),
  559. ) -> ArrayVar[SEQUENCE_TYPE]: ...
  560. @overload
  561. def call(
  562. self: FunctionVar[ReflexCallable[[V1, VarWithDefault[V2]], MAPPING_TYPE]],
  563. arg1: Union[V1, Var[V1]],
  564. arg2: Union[V2, Var[V2], Unset] = Unset(),
  565. ) -> ObjectVar[MAPPING_TYPE]: ...
  566. @overload
  567. def call(
  568. self: FunctionVar[ReflexCallable[[V1, VarWithDefault[V2]], R]],
  569. arg1: Union[V1, Var[V1]],
  570. arg2: Union[V2, Var[V2], Unset] = Unset(),
  571. ) -> Var[R]: ...
  572. @overload
  573. def call(
  574. self: FunctionVar[
  575. ReflexCallable[[V1, VarWithDefault[V2], VarWithDefault[V3]], bool]
  576. ],
  577. arg1: Union[V1, Var[V1]],
  578. arg2: Union[V2, Var[V2], Unset] = Unset(),
  579. arg3: Union[V3, Var[V3], Unset] = Unset(),
  580. ) -> BooleanVar: ...
  581. @overload
  582. def call(
  583. self: FunctionVar[
  584. ReflexCallable[[V1, VarWithDefault[V2], VarWithDefault[V3]], int]
  585. ],
  586. arg1: Union[V1, Var[V1]],
  587. arg2: Union[V2, Var[V2], Unset] = Unset(),
  588. arg3: Union[V3, Var[V3], Unset] = Unset(),
  589. ) -> NumberVar[int]: ...
  590. @overload
  591. def call(
  592. self: FunctionVar[
  593. ReflexCallable[[V1, VarWithDefault[V2], VarWithDefault[V3]], float]
  594. ],
  595. arg1: Union[V1, Var[V1]],
  596. arg2: Union[V2, Var[V2], Unset] = Unset(),
  597. arg3: Union[V3, Var[V3], Unset] = Unset(),
  598. ) -> NumberVar[float]: ...
  599. @overload
  600. def call(
  601. self: FunctionVar[
  602. ReflexCallable[[V1, VarWithDefault[V2], VarWithDefault[V3]], str]
  603. ],
  604. arg1: Union[V1, Var[V1]],
  605. arg2: Union[V2, Var[V2], Unset] = Unset(),
  606. arg3: Union[V3, Var[V3], Unset] = Unset(),
  607. ) -> StringVar[str]: ...
  608. @overload
  609. def call(
  610. self: FunctionVar[
  611. ReflexCallable[[V1, VarWithDefault[V2], VarWithDefault[V3]], SEQUENCE_TYPE]
  612. ],
  613. arg1: Union[V1, Var[V1]],
  614. arg2: Union[V2, Var[V2], Unset] = Unset(),
  615. arg3: Union[V3, Var[V3], Unset] = Unset(),
  616. ) -> ArrayVar[SEQUENCE_TYPE]: ...
  617. @overload
  618. def call(
  619. self: FunctionVar[
  620. ReflexCallable[[V1, VarWithDefault[V2], VarWithDefault[V3]], MAPPING_TYPE]
  621. ],
  622. arg1: Union[V1, Var[V1]],
  623. arg2: Union[V2, Var[V2], Unset] = Unset(),
  624. arg3: Union[V3, Var[V3], Unset] = Unset(),
  625. ) -> ObjectVar[MAPPING_TYPE]: ...
  626. @overload
  627. def call(
  628. self: FunctionVar[
  629. ReflexCallable[[V1, VarWithDefault[V2], VarWithDefault[V3]], R]
  630. ],
  631. arg1: Union[V1, Var[V1]],
  632. arg2: Union[V2, Var[V2], Unset] = Unset(),
  633. arg3: Union[V3, Var[V3], Unset] = Unset(),
  634. ) -> Var[R]: ...
  635. @overload
  636. def call(
  637. self: FunctionVar[
  638. ReflexCallable[
  639. [V1, VarWithDefault[V2], VarWithDefault[V3], VarWithDefault[V4]], bool
  640. ]
  641. ],
  642. arg1: Union[V1, Var[V1]],
  643. arg2: Union[V2, Var[V2], Unset] = Unset(),
  644. arg3: Union[V3, Var[V3], Unset] = Unset(),
  645. arg4: Union[V4, Var[V4], Unset] = Unset(),
  646. ) -> BooleanVar: ...
  647. @overload
  648. def call(
  649. self: FunctionVar[
  650. ReflexCallable[
  651. [V1, VarWithDefault[V2], VarWithDefault[V3], VarWithDefault[V4]], int
  652. ]
  653. ],
  654. arg1: Union[V1, Var[V1]],
  655. arg2: Union[V2, Var[V2], Unset] = Unset(),
  656. arg3: Union[V3, Var[V3], Unset] = Unset(),
  657. arg4: Union[V4, Var[V4], Unset] = Unset(),
  658. ) -> NumberVar[int]: ...
  659. @overload
  660. def call(
  661. self: FunctionVar[
  662. ReflexCallable[
  663. [V1, VarWithDefault[V2], VarWithDefault[V3], VarWithDefault[V4]], float
  664. ]
  665. ],
  666. arg1: Union[V1, Var[V1]],
  667. arg2: Union[V2, Var[V2], Unset] = Unset(),
  668. arg3: Union[V3, Var[V3], Unset] = Unset(),
  669. arg4: Union[V4, Var[V4], Unset] = Unset(),
  670. ) -> NumberVar[float]: ...
  671. @overload
  672. def call(
  673. self: FunctionVar[
  674. ReflexCallable[
  675. [V1, VarWithDefault[V2], VarWithDefault[V3], VarWithDefault[V4]], str
  676. ]
  677. ],
  678. arg1: Union[V1, Var[V1]],
  679. arg2: Union[V2, Var[V2], Unset] = Unset(),
  680. arg3: Union[V3, Var[V3], Unset] = Unset(),
  681. arg4: Union[V4, Var[V4], Unset] = Unset(),
  682. ) -> StringVar[str]: ...
  683. @overload
  684. def call(
  685. self: FunctionVar[
  686. ReflexCallable[
  687. [V1, VarWithDefault[V2], VarWithDefault[V3], VarWithDefault[V4]],
  688. SEQUENCE_TYPE,
  689. ]
  690. ],
  691. arg1: Union[V1, Var[V1]],
  692. arg2: Union[V2, Var[V2], Unset] = Unset(),
  693. arg3: Union[V3, Var[V3], Unset] = Unset(),
  694. arg4: Union[V4, Var[V4], Unset] = Unset(),
  695. ) -> ArrayVar[SEQUENCE_TYPE]: ...
  696. @overload
  697. def call(
  698. self: FunctionVar[
  699. ReflexCallable[
  700. [V1, VarWithDefault[V2], VarWithDefault[V3], VarWithDefault[V4]],
  701. MAPPING_TYPE,
  702. ]
  703. ],
  704. arg1: Union[V1, Var[V1]],
  705. arg2: Union[V2, Var[V2], Unset] = Unset(),
  706. arg3: Union[V3, Var[V3], Unset] = Unset(),
  707. arg4: Union[V4, Var[V4], Unset] = Unset(),
  708. ) -> ObjectVar[MAPPING_TYPE]: ...
  709. @overload
  710. def call(
  711. self: FunctionVar[
  712. ReflexCallable[
  713. [V1, VarWithDefault[V2], VarWithDefault[V3], VarWithDefault[V4]], R
  714. ]
  715. ],
  716. arg1: Union[V1, Var[V1]],
  717. arg2: Union[V2, Var[V2], Unset] = Unset(),
  718. arg3: Union[V3, Var[V3], Unset] = Unset(),
  719. arg4: Union[V4, Var[V4], Unset] = Unset(),
  720. ) -> Var[R]: ...
  721. @overload
  722. def call(
  723. self: FunctionVar[ReflexCallable[[V1, V2], bool]],
  724. arg1: Union[V1, Var[V1]],
  725. arg2: Union[V2, Var[V2]],
  726. ) -> BooleanVar: ...
  727. @overload
  728. def call(
  729. self: FunctionVar[ReflexCallable[[V1, V2], int]],
  730. arg1: Union[V1, Var[V1]],
  731. arg2: Union[V2, Var[V2]],
  732. ) -> NumberVar[int]: ...
  733. @overload
  734. def call(
  735. self: FunctionVar[ReflexCallable[[V1, V2], float]],
  736. arg1: Union[V1, Var[V1]],
  737. arg2: Union[V2, Var[V2]],
  738. ) -> NumberVar[float]: ...
  739. @overload
  740. def call(
  741. self: FunctionVar[ReflexCallable[[V1, V2], str]],
  742. arg1: Union[V1, Var[V1]],
  743. arg2: Union[V2, Var[V2]],
  744. ) -> StringVar[str]: ...
  745. @overload
  746. def call(
  747. self: FunctionVar[ReflexCallable[[V1, V2], SEQUENCE_TYPE]],
  748. arg1: Union[V1, Var[V1]],
  749. arg2: Union[V2, Var[V2]],
  750. ) -> ArrayVar[SEQUENCE_TYPE]: ...
  751. @overload
  752. def call(
  753. self: FunctionVar[ReflexCallable[[V1, V2], MAPPING_TYPE]],
  754. arg1: Union[V1, Var[V1]],
  755. arg2: Union[V2, Var[V2]],
  756. ) -> ObjectVar[MAPPING_TYPE]: ...
  757. @overload
  758. def call(
  759. self: FunctionVar[ReflexCallable[[V1, V2], R]],
  760. arg1: Union[V1, Var[V1]],
  761. arg2: Union[V2, Var[V2]],
  762. ) -> Var[R]: ...
  763. @overload
  764. def call(
  765. self: FunctionVar[ReflexCallable[[V1, V2, VarWithDefault[V3]], bool]],
  766. arg1: Union[V1, Var[V1]],
  767. arg2: Union[V2, Var[V2]],
  768. arg3: Union[V3, Var[V3], Unset] = Unset(),
  769. ) -> BooleanVar: ...
  770. @overload
  771. def call(
  772. self: FunctionVar[ReflexCallable[[V1, V2, VarWithDefault[V3]], int]],
  773. arg1: Union[V1, Var[V1]],
  774. arg2: Union[V2, Var[V2]],
  775. arg3: Union[V3, Var[V3], Unset] = Unset(),
  776. ) -> NumberVar[int]: ...
  777. @overload
  778. def call(
  779. self: FunctionVar[ReflexCallable[[V1, V2, VarWithDefault[V3]], float]],
  780. arg1: Union[V1, Var[V1]],
  781. arg2: Union[V2, Var[V2]],
  782. arg3: Union[V3, Var[V3], Unset] = Unset(),
  783. ) -> NumberVar[float]: ...
  784. @overload
  785. def call(
  786. self: FunctionVar[ReflexCallable[[V1, V2, VarWithDefault[V3]], str]],
  787. arg1: Union[V1, Var[V1]],
  788. arg2: Union[V2, Var[V2]],
  789. arg3: Union[V3, Var[V3], Unset] = Unset(),
  790. ) -> StringVar[str]: ...
  791. @overload
  792. def call(
  793. self: FunctionVar[ReflexCallable[[V1, V2, VarWithDefault[V3]], SEQUENCE_TYPE]],
  794. arg1: Union[V1, Var[V1]],
  795. arg2: Union[V2, Var[V2]],
  796. arg3: Union[V3, Var[V3], Unset] = Unset(),
  797. ) -> ArrayVar[SEQUENCE_TYPE]: ...
  798. @overload
  799. def call(
  800. self: FunctionVar[ReflexCallable[[V1, V2, VarWithDefault[V3]], MAPPING_TYPE]],
  801. arg1: Union[V1, Var[V1]],
  802. arg2: Union[V2, Var[V2]],
  803. arg3: Union[V3, Var[V3], Unset] = Unset(),
  804. ) -> ObjectVar[MAPPING_TYPE]: ...
  805. @overload
  806. def call(
  807. self: FunctionVar[ReflexCallable[[V1, V2, VarWithDefault[V3]], R]],
  808. arg1: Union[V1, Var[V1]],
  809. arg2: Union[V2, Var[V2]],
  810. arg3: Union[V3, Var[V3], Unset] = Unset(),
  811. ) -> Var[R]: ...
  812. @overload
  813. def call(
  814. self: FunctionVar[
  815. ReflexCallable[[V1, V2, VarWithDefault[V3], VarWithDefault[V4]], bool]
  816. ],
  817. arg1: Union[V1, Var[V1]],
  818. arg2: Union[V2, Var[V2]],
  819. arg3: Union[V3, Var[V3], Unset] = Unset(),
  820. arg4: Union[V4, Var[V4], Unset] = Unset(),
  821. ) -> BooleanVar: ...
  822. @overload
  823. def call(
  824. self: FunctionVar[
  825. ReflexCallable[[V1, V2, VarWithDefault[V3], VarWithDefault[V4]], int]
  826. ],
  827. arg1: Union[V1, Var[V1]],
  828. arg2: Union[V2, Var[V2]],
  829. arg3: Union[V3, Var[V3], Unset] = Unset(),
  830. arg4: Union[V4, Var[V4], Unset] = Unset(),
  831. ) -> NumberVar[int]: ...
  832. @overload
  833. def call(
  834. self: FunctionVar[
  835. ReflexCallable[[V1, V2, VarWithDefault[V3], VarWithDefault[V4]], float]
  836. ],
  837. arg1: Union[V1, Var[V1]],
  838. arg2: Union[V2, Var[V2]],
  839. arg3: Union[V3, Var[V3], Unset] = Unset(),
  840. arg4: Union[V4, Var[V4], Unset] = Unset(),
  841. ) -> NumberVar[float]: ...
  842. @overload
  843. def call(
  844. self: FunctionVar[
  845. ReflexCallable[[V1, V2, VarWithDefault[V3], VarWithDefault[V4]], str]
  846. ],
  847. arg1: Union[V1, Var[V1]],
  848. arg2: Union[V2, Var[V2]],
  849. arg3: Union[V3, Var[V3], Unset] = Unset(),
  850. arg4: Union[V4, Var[V4], Unset] = Unset(),
  851. ) -> StringVar[str]: ...
  852. @overload
  853. def call(
  854. self: FunctionVar[
  855. ReflexCallable[
  856. [V1, V2, VarWithDefault[V3], VarWithDefault[V4]], SEQUENCE_TYPE
  857. ]
  858. ],
  859. arg1: Union[V1, Var[V1]],
  860. arg2: Union[V2, Var[V2]],
  861. arg3: Union[V3, Var[V3], Unset] = Unset(),
  862. arg4: Union[V4, Var[V4], Unset] = Unset(),
  863. ) -> ArrayVar[SEQUENCE_TYPE]: ...
  864. @overload
  865. def call(
  866. self: FunctionVar[
  867. ReflexCallable[
  868. [V1, V2, VarWithDefault[V3], VarWithDefault[V4]], MAPPING_TYPE
  869. ]
  870. ],
  871. arg1: Union[V1, Var[V1]],
  872. arg2: Union[V2, Var[V2]],
  873. arg3: Union[V3, Var[V3], Unset] = Unset(),
  874. arg4: Union[V4, Var[V4], Unset] = Unset(),
  875. ) -> ObjectVar[MAPPING_TYPE]: ...
  876. @overload
  877. def call(
  878. self: FunctionVar[
  879. ReflexCallable[[V1, V2, VarWithDefault[V3], VarWithDefault[V4]], R]
  880. ],
  881. arg1: Union[V1, Var[V1]],
  882. arg2: Union[V2, Var[V2]],
  883. arg3: Union[V3, Var[V3], Unset] = Unset(),
  884. arg4: Union[V4, Var[V4], Unset] = Unset(),
  885. ) -> Var[R]: ...
  886. @overload
  887. def call(
  888. self: FunctionVar[ReflexCallable[[V1, V2, V3], bool]],
  889. arg1: Union[V1, Var[V1]],
  890. arg2: Union[V2, Var[V2]],
  891. arg3: Union[V3, Var[V3]],
  892. ) -> BooleanVar: ...
  893. @overload
  894. def call(
  895. self: FunctionVar[ReflexCallable[[V1, V2, V3], int]],
  896. arg1: Union[V1, Var[V1]],
  897. arg2: Union[V2, Var[V2]],
  898. arg3: Union[V3, Var[V3]],
  899. ) -> NumberVar[int]: ...
  900. @overload
  901. def call(
  902. self: FunctionVar[ReflexCallable[[V1, V2, V3], float]],
  903. arg1: Union[V1, Var[V1]],
  904. arg2: Union[V2, Var[V2]],
  905. arg3: Union[V3, Var[V3]],
  906. ) -> NumberVar[float]: ...
  907. @overload
  908. def call(
  909. self: FunctionVar[ReflexCallable[[V1, V2, V3], str]],
  910. arg1: Union[V1, Var[V1]],
  911. arg2: Union[V2, Var[V2]],
  912. arg3: Union[V3, Var[V3]],
  913. ) -> StringVar[str]: ...
  914. @overload
  915. def call(
  916. self: FunctionVar[ReflexCallable[[V1, V2, V3], SEQUENCE_TYPE]],
  917. arg1: Union[V1, Var[V1]],
  918. arg2: Union[V2, Var[V2]],
  919. arg3: Union[V3, Var[V3]],
  920. ) -> ArrayVar[SEQUENCE_TYPE]: ...
  921. @overload
  922. def call(
  923. self: FunctionVar[ReflexCallable[[V1, V2, V3], MAPPING_TYPE]],
  924. arg1: Union[V1, Var[V1]],
  925. arg2: Union[V2, Var[V2]],
  926. arg3: Union[V3, Var[V3]],
  927. ) -> ObjectVar[MAPPING_TYPE]: ...
  928. @overload
  929. def call(
  930. self: FunctionVar[ReflexCallable[[V1, V2, V3], R]],
  931. arg1: Union[V1, Var[V1]],
  932. arg2: Union[V2, Var[V2]],
  933. arg3: Union[V3, Var[V3]],
  934. ) -> Var[R]: ...
  935. @overload
  936. def call(
  937. self: FunctionVar[ReflexCallable[[V1, V2, V3, VarWithDefault[V4]], bool]],
  938. arg1: Union[V1, Var[V1]],
  939. arg2: Union[V2, Var[V2]],
  940. arg3: Union[V3, Var[V3]],
  941. arg4: Union[V4, Var[V4], Unset] = Unset(),
  942. ) -> BooleanVar: ...
  943. @overload
  944. def call(
  945. self: FunctionVar[ReflexCallable[[V1, V2, V3, VarWithDefault[V4]], int]],
  946. arg1: Union[V1, Var[V1]],
  947. arg2: Union[V2, Var[V2]],
  948. arg3: Union[V3, Var[V3]],
  949. arg4: Union[V4, Var[V4], Unset] = Unset(),
  950. ) -> NumberVar[int]: ...
  951. @overload
  952. def call(
  953. self: FunctionVar[ReflexCallable[[V1, V2, V3, VarWithDefault[V4]], float]],
  954. arg1: Union[V1, Var[V1]],
  955. arg2: Union[V2, Var[V2]],
  956. arg3: Union[V3, Var[V3]],
  957. arg4: Union[V4, Var[V4], Unset] = Unset(),
  958. ) -> NumberVar[float]: ...
  959. @overload
  960. def call(
  961. self: FunctionVar[ReflexCallable[[V1, V2, V3, VarWithDefault[V4]], str]],
  962. arg1: Union[V1, Var[V1]],
  963. arg2: Union[V2, Var[V2]],
  964. arg3: Union[V3, Var[V3]],
  965. arg4: Union[V4, Var[V4], Unset] = Unset(),
  966. ) -> StringVar[str]: ...
  967. @overload
  968. def call(
  969. self: FunctionVar[
  970. ReflexCallable[[V1, V2, V3, VarWithDefault[V4]], SEQUENCE_TYPE]
  971. ],
  972. arg1: Union[V1, Var[V1]],
  973. arg2: Union[V2, Var[V2]],
  974. arg3: Union[V3, Var[V3]],
  975. arg4: Union[V4, Var[V4], Unset] = Unset(),
  976. ) -> ArrayVar[SEQUENCE_TYPE]: ...
  977. @overload
  978. def call(
  979. self: FunctionVar[
  980. ReflexCallable[[V1, V2, V3, VarWithDefault[V4]], MAPPING_TYPE]
  981. ],
  982. arg1: Union[V1, Var[V1]],
  983. arg2: Union[V2, Var[V2]],
  984. arg3: Union[V3, Var[V3]],
  985. arg4: Union[V4, Var[V4], Unset] = Unset(),
  986. ) -> ObjectVar[MAPPING_TYPE]: ...
  987. @overload
  988. def call(
  989. self: FunctionVar[ReflexCallable[[V1, V2, V3, VarWithDefault[V4]], R]],
  990. arg1: Union[V1, Var[V1]],
  991. arg2: Union[V2, Var[V2]],
  992. arg3: Union[V3, Var[V3]],
  993. arg4: Union[V4, Var[V4], Unset] = Unset(),
  994. ) -> Var[R]: ...
  995. @overload
  996. def call(
  997. self: FunctionVar[ReflexCallable[[V1, V2, V3, V4], bool]],
  998. arg1: Union[V1, Var[V1]],
  999. arg2: Union[V2, Var[V2]],
  1000. arg3: Union[V3, Var[V3]],
  1001. arg4: Union[V4, Var[V4]],
  1002. ) -> BooleanVar: ...
  1003. @overload
  1004. def call(
  1005. self: FunctionVar[ReflexCallable[[V1, V2, V3, V4], int]],
  1006. arg1: Union[V1, Var[V1]],
  1007. arg2: Union[V2, Var[V2]],
  1008. arg3: Union[V3, Var[V3]],
  1009. arg4: Union[V4, Var[V4]],
  1010. ) -> NumberVar[int]: ...
  1011. @overload
  1012. def call(
  1013. self: FunctionVar[ReflexCallable[[V1, V2, V3, V4], float]],
  1014. arg1: Union[V1, Var[V1]],
  1015. arg2: Union[V2, Var[V2]],
  1016. arg3: Union[V3, Var[V3]],
  1017. arg4: Union[V4, Var[V4]],
  1018. ) -> NumberVar[float]: ...
  1019. @overload
  1020. def call(
  1021. self: FunctionVar[ReflexCallable[[V1, V2, V3, V4], str]],
  1022. arg1: Union[V1, Var[V1]],
  1023. arg2: Union[V2, Var[V2]],
  1024. arg3: Union[V3, Var[V3]],
  1025. arg4: Union[V4, Var[V4]],
  1026. ) -> StringVar[str]: ...
  1027. @overload
  1028. def call(
  1029. self: FunctionVar[ReflexCallable[[V1, V2, V3, V4], SEQUENCE_TYPE]],
  1030. arg1: Union[V1, Var[V1]],
  1031. arg2: Union[V2, Var[V2]],
  1032. arg3: Union[V3, Var[V3]],
  1033. arg4: Union[V4, Var[V4]],
  1034. ) -> ArrayVar[SEQUENCE_TYPE]: ...
  1035. @overload
  1036. def call(
  1037. self: FunctionVar[ReflexCallable[[V1, V2, V3, V4], MAPPING_TYPE]],
  1038. arg1: Union[V1, Var[V1]],
  1039. arg2: Union[V2, Var[V2]],
  1040. arg3: Union[V3, Var[V3]],
  1041. arg4: Union[V4, Var[V4]],
  1042. ) -> ObjectVar[MAPPING_TYPE]: ...
  1043. @overload
  1044. def call(
  1045. self: FunctionVar[ReflexCallable[[V1, V2, V3, V4], R]],
  1046. arg1: Union[V1, Var[V1]],
  1047. arg2: Union[V2, Var[V2]],
  1048. arg3: Union[V3, Var[V3]],
  1049. arg4: Union[V4, Var[V4]],
  1050. ) -> Var[R]: ...
  1051. # Capture Any to allow for arbitrary number of arguments
  1052. @overload
  1053. def call(self: FunctionVar[NoReturn], *args: Var | Any) -> Var: ...
  1054. def call(self, *args: Var | Any) -> Var: # pyright: ignore [reportInconsistentOverload]
  1055. """Call the function with the given arguments.
  1056. Args:
  1057. *args: The arguments to call the function with.
  1058. Returns:
  1059. The function call operation.
  1060. Raises:
  1061. VarTypeError: If the number of arguments is invalid
  1062. """
  1063. required_arg_len = self._required_arg_len()
  1064. arg_len = self._arg_len()
  1065. if arg_len is not None:
  1066. if len(args) < required_arg_len:
  1067. raise VarTypeError(
  1068. f"Passed {len(args)} arguments, expected at least {required_arg_len} for {self!s}"
  1069. )
  1070. if len(args) > arg_len:
  1071. raise VarTypeError(
  1072. f"Passed {len(args)} arguments, expected at most {arg_len} for {self!s}"
  1073. )
  1074. args = tuple(map(LiteralVar.create, args))
  1075. self._pre_check(*args)
  1076. return_type = self._return_type(*args)
  1077. if (
  1078. isinstance(self, (ArgsFunctionOperation, ArgsFunctionOperationBuilder))
  1079. and self._raw_js_function
  1080. ):
  1081. return VarOperationCall.create(
  1082. FunctionStringVar.create(
  1083. self._raw_js_function,
  1084. _var_type=self._var_type,
  1085. _var_data=self._get_all_var_data(),
  1086. ),
  1087. *args,
  1088. _var_type=return_type,
  1089. ).guess_type()
  1090. return VarOperationCall.create(self, *args, _var_type=return_type).guess_type()
  1091. def chain(
  1092. self: FunctionVar[ReflexCallable[P, R]],
  1093. other: FunctionVar[ReflexCallable[[R], R2]]
  1094. | FunctionVar[ReflexCallable[[R, VarWithDefault[Any]], R2]]
  1095. | FunctionVar[
  1096. ReflexCallable[[R, VarWithDefault[Any], VarWithDefault[Any]], R2]
  1097. ],
  1098. ) -> FunctionVar[ReflexCallable[P, R2]]:
  1099. """Chain two functions together.
  1100. Args:
  1101. other: The other function to chain.
  1102. Returns:
  1103. The chained function.
  1104. """
  1105. self_arg_type, self_return_type = unwrap_reflex_callalbe(self._var_type)
  1106. _, other_return_type = unwrap_reflex_callalbe(other._var_type)
  1107. return ArgsFunctionOperationBuilder.create(
  1108. (),
  1109. VarOperationCall.create(
  1110. other,
  1111. VarOperationCall.create(
  1112. self, Var(_js_expr="...args"), _var_type=self_return_type
  1113. ),
  1114. _var_type=other_return_type,
  1115. ),
  1116. rest="arg",
  1117. _var_type=ReflexCallable[self_arg_type, other_return_type], # pyright: ignore [reportInvalidTypeArguments]
  1118. )
  1119. def _partial_type(
  1120. self, *args: Var | Any
  1121. ) -> Tuple[GenericType, Optional[TypeComputer]]:
  1122. """Override the type of the function call with the given arguments.
  1123. Args:
  1124. *args: The arguments to call the function with.
  1125. Returns:
  1126. The overridden type of the function call.
  1127. """
  1128. args_types, return_type = unwrap_reflex_callalbe(self._var_type)
  1129. if isinstance(args_types, tuple):
  1130. return ReflexCallable[[*args_types[len(args) :]], return_type], None # type: ignore
  1131. return ReflexCallable[..., return_type], None
  1132. def _arg_len(self) -> int | None:
  1133. """Get the number of arguments the function takes.
  1134. Returns:
  1135. The number of arguments the function takes.
  1136. """
  1137. args_types, _ = unwrap_reflex_callalbe(self._var_type)
  1138. if isinstance(args_types, tuple):
  1139. return len(args_types)
  1140. return None
  1141. def _required_arg_len(self) -> int:
  1142. """Get the number of required arguments the function takes.
  1143. Returns:
  1144. The number of required arguments the function takes.
  1145. """
  1146. args_types, _ = unwrap_reflex_callalbe(self._var_type)
  1147. if isinstance(args_types, tuple):
  1148. return sum(
  1149. 1
  1150. for arg_type in args_types
  1151. if get_origin(arg_type) is not VarWithDefault
  1152. )
  1153. return 0
  1154. def _return_type(self, *args: Var | Any) -> GenericType:
  1155. """Override the type of the function call with the given arguments.
  1156. Args:
  1157. *args: The arguments to call the function with.
  1158. Returns:
  1159. The overridden type of the function call.
  1160. """
  1161. partial_types, _ = self._partial_type(*args)
  1162. return unwrap_reflex_callalbe(partial_types)[1]
  1163. def _pre_check(
  1164. self, *args: Var | Any
  1165. ) -> Tuple[Callable[[Any], Optional[str]], ...]:
  1166. """Check if the function can be called with the given arguments.
  1167. Args:
  1168. *args: The arguments to call the function with.
  1169. Returns:
  1170. True if the function can be called with the given arguments.
  1171. """
  1172. return ()
  1173. @overload
  1174. def __get__(self, instance: None, owner: Any) -> FunctionVar[CALLABLE_TYPE]: ...
  1175. @overload
  1176. def __get__(
  1177. self: FunctionVar[ReflexCallable[Concatenate[V1, P], R]],
  1178. instance: Var[V1],
  1179. owner: Any,
  1180. ) -> FunctionVar[ReflexCallable[P, R]]: ...
  1181. def __get__(self, instance: Any, owner: Any):
  1182. """Get the function var.
  1183. Args:
  1184. instance: The instance of the class.
  1185. owner: The owner of the class.
  1186. Returns:
  1187. The function var.
  1188. """
  1189. if instance is None:
  1190. return self
  1191. return self.partial(instance)
  1192. __call__ = call
  1193. class BuilderFunctionVar(
  1194. FunctionVar[CALLABLE_TYPE], default_type=ReflexCallable[Any, Any]
  1195. ):
  1196. """Base class for immutable function vars with the builder pattern."""
  1197. __call__ = FunctionVar.partial
  1198. class FunctionStringVar(FunctionVar[CALLABLE_TYPE]):
  1199. """Base class for immutable function vars from a string."""
  1200. @classmethod
  1201. def create(
  1202. cls,
  1203. func: str,
  1204. _var_type: Type[OTHER_CALLABLE_TYPE] = ReflexCallable[Any, Any],
  1205. _var_data: VarData | None = None,
  1206. ) -> FunctionStringVar[OTHER_CALLABLE_TYPE]:
  1207. """Create a new function var from a string.
  1208. Args:
  1209. func: The function to call.
  1210. _var_data: Additional hooks and imports associated with the Var.
  1211. Returns:
  1212. The function var.
  1213. """
  1214. return FunctionStringVar(
  1215. _js_expr=func,
  1216. _var_type=_var_type,
  1217. _var_data=_var_data,
  1218. )
  1219. @dataclasses.dataclass(
  1220. eq=False,
  1221. frozen=True,
  1222. **{"slots": True} if sys.version_info >= (3, 10) else {},
  1223. )
  1224. class VarOperationCall(Generic[P, R], CachedVarOperation, Var[R]):
  1225. """Base class for immutable vars that are the result of a function call."""
  1226. _func: Optional[FunctionVar[ReflexCallable[..., R]]] = dataclasses.field(
  1227. default=None
  1228. )
  1229. _args: Tuple[Union[Var, Any], ...] = dataclasses.field(default_factory=tuple)
  1230. @cached_property_no_lock
  1231. def _cached_var_name(self) -> str:
  1232. """The name of the var.
  1233. Returns:
  1234. The name of the var.
  1235. """
  1236. return f"({self._func!s}({', '.join([str(LiteralVar.create(arg)) for arg in self._args])}))"
  1237. @cached_property_no_lock
  1238. def _cached_get_all_var_data(self) -> VarData | None:
  1239. """Get all the var data associated with the var.
  1240. Returns:
  1241. All the var data associated with the var.
  1242. """
  1243. return VarData.merge(
  1244. self._func._get_all_var_data() if self._func is not None else None,
  1245. *[LiteralVar.create(arg)._get_all_var_data() for arg in self._args],
  1246. self._var_data,
  1247. )
  1248. @classmethod
  1249. def create(
  1250. cls,
  1251. func: FunctionVar[ReflexCallable[P, R]],
  1252. *args: Var | Any,
  1253. _var_type: GenericType = Any,
  1254. _var_data: VarData | None = None,
  1255. ) -> VarOperationCall:
  1256. """Create a new function call var.
  1257. Args:
  1258. func: The function to call.
  1259. *args: The arguments to call the function with.
  1260. _var_data: Additional hooks and imports associated with the Var.
  1261. Returns:
  1262. The function call var.
  1263. """
  1264. function_return_type = (
  1265. func._var_type.__args__[1]
  1266. if getattr(func._var_type, "__args__", None)
  1267. else Any
  1268. )
  1269. var_type = _var_type if _var_type is not Any else function_return_type
  1270. return cls(
  1271. _js_expr="",
  1272. _var_type=var_type,
  1273. _var_data=_var_data,
  1274. _func=func,
  1275. _args=args,
  1276. )
  1277. @dataclasses.dataclass(frozen=True)
  1278. class DestructuredArg:
  1279. """Class for destructured arguments."""
  1280. fields: Tuple[str, ...] = ()
  1281. rest: Optional[str] = None
  1282. def to_javascript(self) -> str:
  1283. """Convert the destructured argument to JavaScript.
  1284. Returns:
  1285. The destructured argument in JavaScript.
  1286. """
  1287. return format.wrap(
  1288. ", ".join(self.fields) + (f", ...{self.rest}" if self.rest else ""),
  1289. "{",
  1290. "}",
  1291. )
  1292. @dataclasses.dataclass(
  1293. frozen=True,
  1294. )
  1295. class FunctionArgs:
  1296. """Class for function arguments."""
  1297. args: Tuple[Union[str, DestructuredArg], ...] = ()
  1298. rest: Optional[str] = None
  1299. def format_args_function_operation(
  1300. self: ArgsFunctionOperation | ArgsFunctionOperationBuilder,
  1301. ) -> str:
  1302. """Format an args function operation.
  1303. Args:
  1304. self: The function operation.
  1305. Returns:
  1306. The formatted args function operation.
  1307. """
  1308. arg_names_str = ", ".join(
  1309. [
  1310. (arg if isinstance(arg, str) else arg.to_javascript())
  1311. + (
  1312. f" = {default_value.default!s}"
  1313. if i < len(self._default_values)
  1314. and not isinstance(
  1315. (default_value := self._default_values[i]), inspect.Parameter.empty
  1316. )
  1317. else ""
  1318. )
  1319. for i, arg in enumerate(self._args.args)
  1320. ]
  1321. + ([f"...{self._args.rest}"] if self._args.rest else [])
  1322. )
  1323. return_expr_str = str(LiteralVar.create(self._return_expr))
  1324. # Wrap return expression in curly braces if explicit return syntax is used.
  1325. return_expr_str_wrapped = (
  1326. format.wrap(return_expr_str, "{", "}")
  1327. if self._explicit_return
  1328. else return_expr_str
  1329. )
  1330. return f"(({arg_names_str}) => {return_expr_str_wrapped})"
  1331. def pre_check_args(
  1332. self: ArgsFunctionOperation | ArgsFunctionOperationBuilder, *args: Var | Any
  1333. ) -> Tuple[Callable[[Any], Optional[str]], ...]:
  1334. """Check if the function can be called with the given arguments.
  1335. Args:
  1336. self: The function operation.
  1337. *args: The arguments to call the function with.
  1338. Returns:
  1339. True if the function can be called with the given arguments.
  1340. Raises:
  1341. VarTypeError: If the arguments are invalid.
  1342. """
  1343. for i, (validator, arg) in enumerate(zip(self._validators, args)):
  1344. if (validation_message := validator(arg)) is not None:
  1345. arg_name = self._args.args[i] if i < len(self._args.args) else None
  1346. if arg_name is not None:
  1347. raise VarTypeError(
  1348. f"Invalid argument {arg!s} provided to {arg_name} in {self._function_name or 'var operation'}. {validation_message}"
  1349. )
  1350. raise VarTypeError(
  1351. f"Invalid argument {arg!s} provided to argument {i} in {self._function_name or 'var operation'}. {validation_message}"
  1352. )
  1353. return self._validators[len(args) :]
  1354. def figure_partial_type(
  1355. self: ArgsFunctionOperation | ArgsFunctionOperationBuilder,
  1356. *args: Var | Any,
  1357. ) -> Tuple[GenericType, Optional[TypeComputer]]:
  1358. """Figure out the return type of the function.
  1359. Args:
  1360. self: The function operation.
  1361. *args: The arguments to call the function with.
  1362. Returns:
  1363. The return type of the function.
  1364. """
  1365. return (
  1366. self._type_computer(*args)
  1367. if self._type_computer is not None
  1368. else FunctionVar._partial_type(self, *args)
  1369. )
  1370. @dataclasses.dataclass(
  1371. eq=False,
  1372. frozen=True,
  1373. **{"slots": True} if sys.version_info >= (3, 10) else {},
  1374. )
  1375. class ArgsFunctionOperation(CachedVarOperation, FunctionVar[CALLABLE_TYPE]):
  1376. """Base class for immutable function defined via arguments and return expression."""
  1377. _args: FunctionArgs = dataclasses.field(default_factory=FunctionArgs)
  1378. _default_values: Tuple[VarWithDefault | inspect.Parameter.empty, ...] = (
  1379. dataclasses.field(default_factory=tuple)
  1380. )
  1381. _validators: Tuple[Callable[[Any], Optional[str]], ...] = dataclasses.field(
  1382. default_factory=tuple
  1383. )
  1384. _return_expr: Union[Var, Any] = dataclasses.field(default=None)
  1385. _function_name: str = dataclasses.field(default="")
  1386. _type_computer: Optional[TypeComputer] = dataclasses.field(default=None)
  1387. _explicit_return: bool = dataclasses.field(default=False)
  1388. _raw_js_function: str | None = dataclasses.field(default=None)
  1389. _cached_var_name = cached_property_no_lock(format_args_function_operation)
  1390. _pre_check = pre_check_args # type: ignore
  1391. _partial_type = figure_partial_type # type: ignore
  1392. @classmethod
  1393. def create(
  1394. cls,
  1395. args_names: Sequence[Union[str, DestructuredArg]],
  1396. return_expr: Var | Any,
  1397. default_values: Sequence[VarWithDefault | inspect.Parameter.empty] = (),
  1398. rest: str | None = None,
  1399. validators: Sequence[Callable[[Any], Optional[str]]] = (),
  1400. function_name: str = "",
  1401. explicit_return: bool = False,
  1402. type_computer: Optional[TypeComputer] = None,
  1403. _raw_js_function: str | None = None,
  1404. _var_type: GenericType = Callable,
  1405. _var_data: VarData | None = None,
  1406. ):
  1407. """Create a new function var.
  1408. Args:
  1409. args_names: The names of the arguments.
  1410. return_expr: The return expression of the function.
  1411. default_values: The default values of the arguments.
  1412. rest: The name of the rest argument.
  1413. validators: The validators for the arguments.
  1414. function_name: The name of the function.
  1415. explicit_return: Whether to use explicit return syntax.
  1416. type_computer: A function to compute the return type.
  1417. _raw_js_function: If provided, it will be used when the operation is being called with all of its arguments at once.
  1418. _var_type: The type of the var.
  1419. _var_data: Additional hooks and imports associated with the Var.
  1420. Returns:
  1421. The function var.
  1422. """
  1423. return_expr = Var.create(return_expr)
  1424. return cls(
  1425. _js_expr="",
  1426. _var_type=_var_type,
  1427. _var_data=_var_data,
  1428. _args=FunctionArgs(args=tuple(args_names), rest=rest),
  1429. _raw_js_function=_raw_js_function,
  1430. _default_values=tuple(default_values),
  1431. _function_name=function_name,
  1432. _validators=tuple(validators),
  1433. _return_expr=return_expr,
  1434. _explicit_return=explicit_return,
  1435. _type_computer=type_computer,
  1436. )
  1437. @dataclasses.dataclass(
  1438. eq=False,
  1439. frozen=True,
  1440. **{"slots": True} if sys.version_info >= (3, 10) else {},
  1441. )
  1442. class ArgsFunctionOperationBuilder(
  1443. CachedVarOperation, BuilderFunctionVar[CALLABLE_TYPE]
  1444. ):
  1445. """Base class for immutable function defined via arguments and return expression with the builder pattern."""
  1446. _args: FunctionArgs = dataclasses.field(default_factory=FunctionArgs)
  1447. _default_values: Tuple[VarWithDefault | inspect.Parameter.empty, ...] = (
  1448. dataclasses.field(default_factory=tuple)
  1449. )
  1450. _validators: Tuple[Callable[[Any], Optional[str]], ...] = dataclasses.field(
  1451. default_factory=tuple
  1452. )
  1453. _return_expr: Union[Var, Any] = dataclasses.field(default=None)
  1454. _function_name: str = dataclasses.field(default="")
  1455. _type_computer: Optional[TypeComputer] = dataclasses.field(default=None)
  1456. _explicit_return: bool = dataclasses.field(default=False)
  1457. _raw_js_function: str | None = dataclasses.field(default=None)
  1458. _cached_var_name = cached_property_no_lock(format_args_function_operation)
  1459. _pre_check = pre_check_args # type: ignore
  1460. _partial_type = figure_partial_type # type: ignore
  1461. @classmethod
  1462. def create(
  1463. cls,
  1464. args_names: Sequence[Union[str, DestructuredArg]],
  1465. return_expr: Var | Any,
  1466. default_values: Sequence[VarWithDefault | inspect.Parameter.empty] = (),
  1467. rest: str | None = None,
  1468. validators: Sequence[Callable[[Any], Optional[str]]] = (),
  1469. function_name: str = "",
  1470. explicit_return: bool = False,
  1471. type_computer: Optional[TypeComputer] = None,
  1472. _raw_js_function: str | None = None,
  1473. _var_type: GenericType = Callable,
  1474. _var_data: VarData | None = None,
  1475. ):
  1476. """Create a new function var.
  1477. Args:
  1478. args_names: The names of the arguments.
  1479. return_expr: The return expression of the function.
  1480. default_values: The default values of the arguments.
  1481. rest: The name of the rest argument.
  1482. validators: The validators for the arguments.
  1483. function_name: The name of the function.
  1484. explicit_return: Whether to use explicit return syntax.
  1485. type_computer: A function to compute the return type.
  1486. _var_type: The type of the var.
  1487. _var_data: Additional hooks and imports associated with the Var.
  1488. _raw_js_function: If provided, it will be used when the operation is being called with all of its arguments at once.
  1489. Returns:
  1490. The function var.
  1491. """
  1492. return_expr = Var.create(return_expr)
  1493. return cls(
  1494. _js_expr="",
  1495. _var_type=_var_type,
  1496. _var_data=_var_data,
  1497. _args=FunctionArgs(args=tuple(args_names), rest=rest),
  1498. _raw_js_function=_raw_js_function,
  1499. _default_values=tuple(default_values),
  1500. _function_name=function_name,
  1501. _validators=tuple(validators),
  1502. _return_expr=return_expr,
  1503. _explicit_return=explicit_return,
  1504. _type_computer=type_computer,
  1505. )
  1506. if python_version := sys.version_info[:2] >= (3, 10):
  1507. JSON_STRINGIFY = FunctionStringVar.create(
  1508. "JSON.stringify", _var_type=ReflexCallable[[Any], str]
  1509. )
  1510. ARRAY_ISARRAY = FunctionStringVar.create(
  1511. "Array.isArray", _var_type=ReflexCallable[[Any], bool]
  1512. )
  1513. PROTOTYPE_TO_STRING = FunctionStringVar.create(
  1514. "((__to_string) => __to_string.toString())",
  1515. _var_type=ReflexCallable[[Any], str],
  1516. )
  1517. else:
  1518. JSON_STRINGIFY = FunctionStringVar.create(
  1519. "JSON.stringify", _var_type=ReflexCallable[Any, str]
  1520. )
  1521. ARRAY_ISARRAY = FunctionStringVar.create(
  1522. "Array.isArray", _var_type=ReflexCallable[Any, bool]
  1523. )
  1524. PROTOTYPE_TO_STRING = FunctionStringVar.create(
  1525. "((__to_string) => __to_string.toString())",
  1526. _var_type=ReflexCallable[Any, str],
  1527. )
  1528. def _generate_overloads_for_function_var_call(maximum_args: int = 4) -> str:
  1529. """Generate overloads for the function var call method.
  1530. Args:
  1531. maximum_args: The maximum number of arguments to generate overloads for.
  1532. Returns:
  1533. The generated overloads.
  1534. """
  1535. overloads = []
  1536. return_type_mapping = {
  1537. "bool": "BooleanVar",
  1538. "int": "NumberVar[int]",
  1539. "float": "NumberVar[float]",
  1540. "str": "StringVar[str]",
  1541. "SEQUENCE_TYPE": "ArrayVar[SEQUENCE_TYPE]",
  1542. "MAPPING_TYPE": "ObjectVar[MAPPING_TYPE]",
  1543. "R": "Var[R]",
  1544. }
  1545. for number_of_required_args in range(maximum_args + 1):
  1546. for number_of_optional_args in range(
  1547. maximum_args + 1 - number_of_required_args
  1548. ):
  1549. for return_type, return_type_var in return_type_mapping.items():
  1550. required_args = [
  1551. f"arg{j + 1}: Union[V" f"{j + 1}, Var[V{j + 1}]]"
  1552. for j in range(number_of_required_args)
  1553. ]
  1554. optional_args = [
  1555. f"arg{j + 1}: Union[V" f"{j + 1}, Var[V{j + 1}], Unset] = Unset()"
  1556. for j in range(
  1557. number_of_required_args,
  1558. number_of_required_args + number_of_optional_args,
  1559. )
  1560. ]
  1561. required_params = [f"V{j + 1}" for j in range(number_of_required_args)]
  1562. optional_params = [
  1563. f"VarWithDefault[V{j + 1}]"
  1564. for j in range(
  1565. number_of_required_args,
  1566. number_of_required_args + number_of_optional_args,
  1567. )
  1568. ]
  1569. function_type_hint = f"""FunctionVar[ReflexCallable[[{", ".join(required_params + optional_params)}], {return_type}]]"""
  1570. new_line = "\n"
  1571. overloads.append(
  1572. f"""
  1573. @overload
  1574. def call(
  1575. self: {function_type_hint},
  1576. {"," + new_line + " ".join(required_args + optional_args)}
  1577. ) -> {return_type_var}: ...
  1578. """
  1579. )
  1580. return "\n".join(overloads)