nodepyx 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +399 -0
  3. package/binding.gyp +73 -0
  4. package/dist/core/PyCallable.d.ts +65 -0
  5. package/dist/core/PyCallable.d.ts.map +1 -0
  6. package/dist/core/PyCallable.js +109 -0
  7. package/dist/core/PyCallable.js.map +1 -0
  8. package/dist/core/PyContext.d.ts +76 -0
  9. package/dist/core/PyContext.d.ts.map +1 -0
  10. package/dist/core/PyContext.js +228 -0
  11. package/dist/core/PyContext.js.map +1 -0
  12. package/dist/core/PyIterator.d.ts +84 -0
  13. package/dist/core/PyIterator.d.ts.map +1 -0
  14. package/dist/core/PyIterator.js +243 -0
  15. package/dist/core/PyIterator.js.map +1 -0
  16. package/dist/core/PyModule.d.ts +55 -0
  17. package/dist/core/PyModule.d.ts.map +1 -0
  18. package/dist/core/PyModule.js +172 -0
  19. package/dist/core/PyModule.js.map +1 -0
  20. package/dist/core/PyProxy.d.ts +65 -0
  21. package/dist/core/PyProxy.d.ts.map +1 -0
  22. package/dist/core/PyProxy.js +483 -0
  23. package/dist/core/PyProxy.js.map +1 -0
  24. package/dist/core/PyRuntime.d.ts +105 -0
  25. package/dist/core/PyRuntime.d.ts.map +1 -0
  26. package/dist/core/PyRuntime.js +438 -0
  27. package/dist/core/PyRuntime.js.map +1 -0
  28. package/dist/env/CondaManager.d.ts +118 -0
  29. package/dist/env/CondaManager.d.ts.map +1 -0
  30. package/dist/env/CondaManager.js +401 -0
  31. package/dist/env/CondaManager.js.map +1 -0
  32. package/dist/env/PackageInstaller.d.ts +233 -0
  33. package/dist/env/PackageInstaller.d.ts.map +1 -0
  34. package/dist/env/PackageInstaller.js +609 -0
  35. package/dist/env/PackageInstaller.js.map +1 -0
  36. package/dist/env/PythonDetector.d.ts +103 -0
  37. package/dist/env/PythonDetector.d.ts.map +1 -0
  38. package/dist/env/PythonDetector.js +381 -0
  39. package/dist/env/PythonDetector.js.map +1 -0
  40. package/dist/env/VenvManager.d.ts +117 -0
  41. package/dist/env/VenvManager.d.ts.map +1 -0
  42. package/dist/env/VenvManager.js +331 -0
  43. package/dist/env/VenvManager.js.map +1 -0
  44. package/dist/index.d.ts +169 -0
  45. package/dist/index.d.ts.map +1 -0
  46. package/dist/index.js +393 -0
  47. package/dist/index.js.map +1 -0
  48. package/dist/plugins/Plugin.interface.d.ts +41 -0
  49. package/dist/plugins/Plugin.interface.d.ts.map +1 -0
  50. package/dist/plugins/Plugin.interface.js +12 -0
  51. package/dist/plugins/Plugin.interface.js.map +1 -0
  52. package/dist/plugins/PluginManager.d.ts +26 -0
  53. package/dist/plugins/PluginManager.d.ts.map +1 -0
  54. package/dist/plugins/PluginManager.js +174 -0
  55. package/dist/plugins/PluginManager.js.map +1 -0
  56. package/dist/plugins/builtin/NumpyPlugin.d.ts +17 -0
  57. package/dist/plugins/builtin/NumpyPlugin.d.ts.map +1 -0
  58. package/dist/plugins/builtin/NumpyPlugin.js +41 -0
  59. package/dist/plugins/builtin/NumpyPlugin.js.map +1 -0
  60. package/dist/plugins/builtin/PandasPlugin.d.ts +19 -0
  61. package/dist/plugins/builtin/PandasPlugin.d.ts.map +1 -0
  62. package/dist/plugins/builtin/PandasPlugin.js +57 -0
  63. package/dist/plugins/builtin/PandasPlugin.js.map +1 -0
  64. package/dist/plugins/builtin/TorchPlugin.d.ts +23 -0
  65. package/dist/plugins/builtin/TorchPlugin.d.ts.map +1 -0
  66. package/dist/plugins/builtin/TorchPlugin.js +50 -0
  67. package/dist/plugins/builtin/TorchPlugin.js.map +1 -0
  68. package/dist/plugins/index.d.ts +7 -0
  69. package/dist/plugins/index.d.ts.map +1 -0
  70. package/dist/plugins/index.js +12 -0
  71. package/dist/plugins/index.js.map +1 -0
  72. package/dist/serialization/DataFrameBridge.d.ts +141 -0
  73. package/dist/serialization/DataFrameBridge.d.ts.map +1 -0
  74. package/dist/serialization/DataFrameBridge.js +355 -0
  75. package/dist/serialization/DataFrameBridge.js.map +1 -0
  76. package/dist/serialization/MsgPackSerializer.d.ts +45 -0
  77. package/dist/serialization/MsgPackSerializer.d.ts.map +1 -0
  78. package/dist/serialization/MsgPackSerializer.js +242 -0
  79. package/dist/serialization/MsgPackSerializer.js.map +1 -0
  80. package/dist/serialization/NumpyBridge.d.ts +96 -0
  81. package/dist/serialization/NumpyBridge.d.ts.map +1 -0
  82. package/dist/serialization/NumpyBridge.js +323 -0
  83. package/dist/serialization/NumpyBridge.js.map +1 -0
  84. package/dist/serialization/Serializer.d.ts +78 -0
  85. package/dist/serialization/Serializer.d.ts.map +1 -0
  86. package/dist/serialization/Serializer.js +281 -0
  87. package/dist/serialization/Serializer.js.map +1 -0
  88. package/dist/types/PythonTypeMapper.d.ts +87 -0
  89. package/dist/types/PythonTypeMapper.d.ts.map +1 -0
  90. package/dist/types/PythonTypeMapper.js +449 -0
  91. package/dist/types/PythonTypeMapper.js.map +1 -0
  92. package/dist/types/StubCache.d.ts +109 -0
  93. package/dist/types/StubCache.d.ts.map +1 -0
  94. package/dist/types/StubCache.js +333 -0
  95. package/dist/types/StubCache.js.map +1 -0
  96. package/dist/types/TypeGenerator.d.ts +139 -0
  97. package/dist/types/TypeGenerator.d.ts.map +1 -0
  98. package/dist/types/TypeGenerator.js +372 -0
  99. package/dist/types/TypeGenerator.js.map +1 -0
  100. package/dist/types/addon.d.ts +114 -0
  101. package/dist/types/addon.d.ts.map +1 -0
  102. package/dist/types/addon.js +32 -0
  103. package/dist/types/addon.js.map +1 -0
  104. package/dist/types/config.d.ts +175 -0
  105. package/dist/types/config.d.ts.map +1 -0
  106. package/dist/types/config.js +35 -0
  107. package/dist/types/config.js.map +1 -0
  108. package/dist/types/index.d.ts +10 -0
  109. package/dist/types/index.d.ts.map +1 -0
  110. package/dist/types/index.js +12 -0
  111. package/dist/types/index.js.map +1 -0
  112. package/dist/types/python.d.ts +235 -0
  113. package/dist/types/python.d.ts.map +1 -0
  114. package/dist/types/python.js +7 -0
  115. package/dist/types/python.js.map +1 -0
  116. package/dist/utils/ErrorTranslator.d.ts +83 -0
  117. package/dist/utils/ErrorTranslator.d.ts.map +1 -0
  118. package/dist/utils/ErrorTranslator.js +210 -0
  119. package/dist/utils/ErrorTranslator.js.map +1 -0
  120. package/dist/utils/Logger.d.ts +27 -0
  121. package/dist/utils/Logger.d.ts.map +1 -0
  122. package/dist/utils/Logger.js +115 -0
  123. package/dist/utils/Logger.js.map +1 -0
  124. package/dist/utils/MemoryMonitor.d.ts +44 -0
  125. package/dist/utils/MemoryMonitor.d.ts.map +1 -0
  126. package/dist/utils/MemoryMonitor.js +143 -0
  127. package/dist/utils/MemoryMonitor.js.map +1 -0
  128. package/package.json +177 -0
  129. package/python/error_handler.py +433 -0
  130. package/python/nodepyx_runtime.py +575 -0
  131. package/python/serializer.py +379 -0
  132. package/python/type_inspector.py +288 -0
  133. package/scripts/build-native.js +68 -0
  134. package/scripts/download-prebuilds.js +99 -0
  135. package/scripts/generate-stubs.js +405 -0
  136. package/scripts/install.js +260 -0
  137. package/src/core/PyCallable.ts +137 -0
  138. package/src/core/PyContext.ts +296 -0
  139. package/src/core/PyIterator.ts +294 -0
  140. package/src/core/PyModule.ts +194 -0
  141. package/src/core/PyProxy.ts +605 -0
  142. package/src/core/PyRuntime.ts +504 -0
  143. package/src/env/CondaManager.ts +451 -0
  144. package/src/env/PackageInstaller.ts +738 -0
  145. package/src/env/PythonDetector.ts +414 -0
  146. package/src/env/VenvManager.ts +396 -0
  147. package/src/index.ts +425 -0
  148. package/src/native/gil_guard.cpp +26 -0
  149. package/src/native/gil_guard.h +175 -0
  150. package/src/native/nodepyx_addon.cpp +886 -0
  151. package/src/native/python_bridge.cpp +790 -0
  152. package/src/native/python_bridge.h +257 -0
  153. package/src/native/thread_pool.cpp +336 -0
  154. package/src/native/thread_pool.h +175 -0
  155. package/src/native/type_converter.cpp +901 -0
  156. package/src/native/type_converter.h +272 -0
  157. package/src/nextjs/PyProvider.tsx +123 -0
  158. package/src/nextjs/index.ts +21 -0
  159. package/src/nextjs/usePython.ts +106 -0
  160. package/src/nextjs/withnodepyx.ts +88 -0
  161. package/src/plugins/Plugin.interface.ts +51 -0
  162. package/src/plugins/PluginManager.ts +155 -0
  163. package/src/plugins/builtin/NumpyPlugin.ts +36 -0
  164. package/src/plugins/builtin/PandasPlugin.ts +49 -0
  165. package/src/plugins/builtin/TorchPlugin.ts +56 -0
  166. package/src/plugins/index.ts +7 -0
  167. package/src/serialization/DataFrameBridge.ts +398 -0
  168. package/src/serialization/MsgPackSerializer.ts +220 -0
  169. package/src/serialization/NumpyBridge.ts +332 -0
  170. package/src/serialization/Serializer.ts +320 -0
  171. package/src/types/PythonTypeMapper.ts +495 -0
  172. package/src/types/StubCache.ts +340 -0
  173. package/src/types/TypeGenerator.ts +491 -0
  174. package/src/types/addon.ts +170 -0
  175. package/src/types/config.ts +226 -0
  176. package/src/types/index.ts +55 -0
  177. package/src/types/python.ts +309 -0
  178. package/src/types/stubs/numpy.d.ts +441 -0
  179. package/src/types/stubs/pandas.d.ts +575 -0
  180. package/src/types/stubs/sklearn.d.ts +728 -0
  181. package/src/types/stubs/torch.d.ts +694 -0
  182. package/src/utils/ErrorTranslator.ts +220 -0
  183. package/src/utils/Logger.ts +119 -0
  184. package/src/utils/MemoryMonitor.ts +175 -0
@@ -0,0 +1,694 @@
1
+ // =============================================================
2
+ // nodepyx — Pre-built TypeScript stub for PyTorch (torch)
3
+ // Version: 2.x
4
+ // Source: https://pytorch.org
5
+ // =============================================================
6
+
7
+ import type { PyProxy } from 'nodepyx';
8
+
9
+ declare module 'nodepyx/torch' {
10
+
11
+ export type Tensor = Float32Array | Float64Array | Int32Array | BigInt64Array | Uint8Array;
12
+ export type Device = 'cpu' | 'cuda' | 'mps' | string;
13
+ export type DType = 'float32' | 'float64' | 'int32' | 'int64' | 'bool' | 'uint8' | string;
14
+
15
+ // ── torch.Tensor class ────────────────────────────────────────────────────
16
+
17
+ export class PyTorchTensor {
18
+ // Shape
19
+ readonly shape: Promise<number[]>;
20
+ readonly size: Promise<number[]>;
21
+ readonly ndim: Promise<number>;
22
+ readonly numel: Promise<number>;
23
+ readonly dtype: Promise<string>;
24
+ readonly device: Promise<string>;
25
+ readonly requires_grad: Promise<boolean>;
26
+ readonly grad: Promise<PyTorchTensor | null>;
27
+ readonly data: Promise<PyTorchTensor>;
28
+ readonly T: Promise<PyTorchTensor>;
29
+ readonly is_leaf: Promise<boolean>;
30
+
31
+ // Conversion
32
+ numpy(): Promise<Tensor>;
33
+ tolist(): Promise<number | number[] | boolean[]>;
34
+ item(): Promise<number | boolean>;
35
+ cpu(): Promise<PyTorchTensor>;
36
+ cuda(device?: string | number): Promise<PyTorchTensor>;
37
+ to(device: Device | Record<string, unknown>, dtype?: string): Promise<PyTorchTensor>;
38
+ float(): Promise<PyTorchTensor>;
39
+ double(): Promise<PyTorchTensor>;
40
+ int(): Promise<PyTorchTensor>;
41
+ long(): Promise<PyTorchTensor>;
42
+ bool(): Promise<PyTorchTensor>;
43
+ half(): Promise<PyTorchTensor>;
44
+ clone(): Promise<PyTorchTensor>;
45
+ detach(): Promise<PyTorchTensor>;
46
+ contiguous(memory_format?: PyProxy): Promise<PyTorchTensor>;
47
+
48
+ // Shape operations
49
+ view(...shape: number[]): Promise<PyTorchTensor>;
50
+ reshape(shape: number[]): Promise<PyTorchTensor>;
51
+ squeeze(dim?: number): Promise<PyTorchTensor>;
52
+ unsqueeze(dim: number): Promise<PyTorchTensor>;
53
+ expand(sizes: number[]): Promise<PyTorchTensor>;
54
+ expand_as(other: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
55
+ transpose(dim0: number, dim1: number): Promise<PyTorchTensor>;
56
+ permute(...dims: number[]): Promise<PyTorchTensor>;
57
+ flatten(start_dim?: number, end_dim?: number): Promise<PyTorchTensor>;
58
+ repeat(repeats: number[]): Promise<PyTorchTensor>;
59
+ t(): Promise<PyTorchTensor>;
60
+ unbind(dim?: number): Promise<PyTorchTensor[]>;
61
+ chunk(chunks: number, dim?: number): Promise<PyTorchTensor[]>;
62
+ split(split_size: number | number[], dim?: number): Promise<PyTorchTensor[]>;
63
+ select(dim: number, index: number): Promise<PyTorchTensor>;
64
+ narrow(dim: number, start: number, length: number): Promise<PyTorchTensor>;
65
+ index_select(dim: number, index: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
66
+ gather(dim: number, index: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
67
+ scatter_(dim: number, index: PyTorchTensor | PyProxy, src: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
68
+ masked_select(mask: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
69
+ masked_fill_(mask: PyTorchTensor | PyProxy, value: number): Promise<PyTorchTensor>;
70
+ roll(shifts: number | number[], dims?: number | number[]): Promise<PyTorchTensor>;
71
+ flip(dims: number | number[]): Promise<PyTorchTensor>;
72
+
73
+ // Arithmetic
74
+ add(other: PyTorchTensor | PyProxy | number, alpha?: number): Promise<PyTorchTensor>;
75
+ sub(other: PyTorchTensor | PyProxy | number, alpha?: number): Promise<PyTorchTensor>;
76
+ mul(other: PyTorchTensor | PyProxy | number): Promise<PyTorchTensor>;
77
+ div(other: PyTorchTensor | PyProxy | number, rounding_mode?: string | null): Promise<PyTorchTensor>;
78
+ pow(exponent: PyTorchTensor | PyProxy | number): Promise<PyTorchTensor>;
79
+ matmul(other: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
80
+ mm(other: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
81
+ bmm(other: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
82
+ dot(other: PyTorchTensor | PyProxy): Promise<number | PyTorchTensor>;
83
+ neg(): Promise<PyTorchTensor>;
84
+ abs(): Promise<PyTorchTensor>;
85
+ sign(): Promise<PyTorchTensor>;
86
+ sqrt(): Promise<PyTorchTensor>;
87
+ rsqrt(): Promise<PyTorchTensor>;
88
+ exp(): Promise<PyTorchTensor>;
89
+ log(): Promise<PyTorchTensor>;
90
+ log2(): Promise<PyTorchTensor>;
91
+ log10(): Promise<PyTorchTensor>;
92
+ log1p(): Promise<PyTorchTensor>;
93
+ floor(): Promise<PyTorchTensor>;
94
+ ceil(): Promise<PyTorchTensor>;
95
+ round(): Promise<PyTorchTensor>;
96
+ trunc(): Promise<PyTorchTensor>;
97
+ frac(): Promise<PyTorchTensor>;
98
+ sigmoid(): Promise<PyTorchTensor>;
99
+ tanh(): Promise<PyTorchTensor>;
100
+ sin(): Promise<PyTorchTensor>;
101
+ cos(): Promise<PyTorchTensor>;
102
+ tan(): Promise<PyTorchTensor>;
103
+ asin(): Promise<PyTorchTensor>;
104
+ acos(): Promise<PyTorchTensor>;
105
+ atan(): Promise<PyTorchTensor>;
106
+ atan2(other: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
107
+
108
+ // Reduction
109
+ sum(dim?: number | number[], keepdim?: boolean): Promise<PyTorchTensor | number>;
110
+ mean(dim?: number | number[], keepdim?: boolean): Promise<PyTorchTensor | number>;
111
+ var(dim?: number | number[], unbiased?: boolean, keepdim?: boolean): Promise<PyTorchTensor | number>;
112
+ std(dim?: number | number[], unbiased?: boolean, keepdim?: boolean): Promise<PyTorchTensor | number>;
113
+ min(dim?: number, keepdim?: boolean): Promise<PyTorchTensor | number | [PyTorchTensor, PyTorchTensor]>;
114
+ max(dim?: number, keepdim?: boolean): Promise<PyTorchTensor | number | [PyTorchTensor, PyTorchTensor]>;
115
+ argmin(dim?: number, keepdim?: boolean): Promise<PyTorchTensor | number>;
116
+ argmax(dim?: number, keepdim?: boolean): Promise<PyTorchTensor | number>;
117
+ cumsum(dim: number, dtype?: string): Promise<PyTorchTensor>;
118
+ cumprod(dim: number, dtype?: string): Promise<PyTorchTensor>;
119
+ prod(dim?: number, keepdim?: boolean): Promise<PyTorchTensor | number>;
120
+ norm(p?: number | string, dim?: number, keepdim?: boolean): Promise<PyTorchTensor | number>;
121
+ any(dim?: number, keepdim?: boolean): Promise<boolean | PyTorchTensor>;
122
+ all(dim?: number, keepdim?: boolean): Promise<boolean | PyTorchTensor>;
123
+ median(dim?: number, keepdim?: boolean): Promise<PyTorchTensor | number | [PyTorchTensor, PyTorchTensor]>;
124
+ mode(dim?: number, keepdim?: boolean): Promise<[PyTorchTensor, PyTorchTensor]>;
125
+ sort(dim?: number, descending?: boolean): Promise<[PyTorchTensor, PyTorchTensor]>;
126
+ topk(k: number, dim?: number, largest?: boolean, sorted?: boolean): Promise<[PyTorchTensor, PyTorchTensor]>;
127
+ unique(sorted?: boolean, return_inverse?: boolean, return_counts?: boolean, dim?: number): Promise<PyTorchTensor | [PyTorchTensor, PyTorchTensor, PyTorchTensor]>;
128
+
129
+ // Comparison
130
+ eq(other: PyTorchTensor | PyProxy | number): Promise<PyTorchTensor>;
131
+ ne(other: PyTorchTensor | PyProxy | number): Promise<PyTorchTensor>;
132
+ lt(other: PyTorchTensor | PyProxy | number): Promise<PyTorchTensor>;
133
+ le(other: PyTorchTensor | PyProxy | number): Promise<PyTorchTensor>;
134
+ gt(other: PyTorchTensor | PyProxy | number): Promise<PyTorchTensor>;
135
+ ge(other: PyTorchTensor | PyProxy | number): Promise<PyTorchTensor>;
136
+ equal(other: PyTorchTensor | PyProxy): Promise<boolean>;
137
+ isnan(): Promise<PyTorchTensor>;
138
+ isinf(): Promise<PyTorchTensor>;
139
+ isfinite(): Promise<PyTorchTensor>;
140
+ allclose(other: PyTorchTensor | PyProxy, rtol?: number, atol?: number): Promise<boolean>;
141
+
142
+ // Gradient
143
+ backward(gradient?: PyTorchTensor | PyProxy | null, retain_graph?: boolean, create_graph?: boolean): Promise<void>;
144
+ zero_(): Promise<PyTorchTensor>;
145
+ fill_(value: number): Promise<PyTorchTensor>;
146
+ copy_(src: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
147
+ requires_grad_(requires_grad?: boolean): Promise<PyTorchTensor>;
148
+ retain_grad(): Promise<void>;
149
+
150
+ __len__(): Promise<number>;
151
+ __str__(): Promise<string>;
152
+ [key: string]: unknown;
153
+ }
154
+
155
+ // ── Tensor creation ────────────────────────────────────────────────────────
156
+
157
+ export function tensor(data: unknown, dtype?: string, device?: Device, requires_grad?: boolean): Promise<PyTorchTensor>;
158
+ export function zeros(size: number[], dtype?: string, device?: Device): Promise<PyTorchTensor>;
159
+ export function zeros_like(input: PyTorchTensor | PyProxy, dtype?: string, device?: Device): Promise<PyTorchTensor>;
160
+ export function ones(size: number[], dtype?: string, device?: Device): Promise<PyTorchTensor>;
161
+ export function ones_like(input: PyTorchTensor | PyProxy, dtype?: string, device?: Device): Promise<PyTorchTensor>;
162
+ export function empty(size: number[], dtype?: string, device?: Device): Promise<PyTorchTensor>;
163
+ export function empty_like(input: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
164
+ export function full(size: number[], fill_value: number, dtype?: string, device?: Device): Promise<PyTorchTensor>;
165
+ export function full_like(input: PyTorchTensor | PyProxy, fill_value: number): Promise<PyTorchTensor>;
166
+ export function eye(n: number, m?: number, dtype?: string, device?: Device): Promise<PyTorchTensor>;
167
+ export function arange(start: number, end?: number, step?: number, dtype?: string, device?: Device): Promise<PyTorchTensor>;
168
+ export function linspace(start: number, end: number, steps: number, dtype?: string, device?: Device): Promise<PyTorchTensor>;
169
+ export function logspace(start: number, end: number, steps: number, base?: number, dtype?: string, device?: Device): Promise<PyTorchTensor>;
170
+ export function rand(size: number[], dtype?: string, device?: Device): Promise<PyTorchTensor>;
171
+ export function rand_like(input: PyTorchTensor | PyProxy, dtype?: string): Promise<PyTorchTensor>;
172
+ export function randn(size: number[], dtype?: string, device?: Device): Promise<PyTorchTensor>;
173
+ export function randn_like(input: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
174
+ export function randint(low: number, high: number, size: number[], dtype?: string, device?: Device): Promise<PyTorchTensor>;
175
+ export function randperm(n: number, dtype?: string, device?: Device): Promise<PyTorchTensor>;
176
+ export function from_numpy(ndarray: PyProxy): Promise<PyTorchTensor>;
177
+ export function frombuffer(buffer: ArrayBuffer, dtype?: string): Promise<PyTorchTensor>;
178
+ export function as_tensor(data: unknown, dtype?: string, device?: Device): Promise<PyTorchTensor>;
179
+
180
+ // ── Tensor operations ─────────────────────────────────────────────────────
181
+
182
+ export function cat(tensors: (PyTorchTensor | PyProxy)[], dim?: number): Promise<PyTorchTensor>;
183
+ export function stack(tensors: (PyTorchTensor | PyProxy)[], dim?: number): Promise<PyTorchTensor>;
184
+ export function chunk(input: PyTorchTensor | PyProxy, chunks: number, dim?: number): Promise<PyTorchTensor[]>;
185
+ export function split(tensor: PyTorchTensor | PyProxy, split_size: number | number[], dim?: number): Promise<PyTorchTensor[]>;
186
+ export function unbind(input: PyTorchTensor | PyProxy, dim?: number): Promise<PyTorchTensor[]>;
187
+ export function squeeze(input: PyTorchTensor | PyProxy, dim?: number): Promise<PyTorchTensor>;
188
+ export function unsqueeze(input: PyTorchTensor | PyProxy, dim: number): Promise<PyTorchTensor>;
189
+ export function reshape(input: PyTorchTensor | PyProxy, shape: number[]): Promise<PyTorchTensor>;
190
+ export function flatten(input: PyTorchTensor | PyProxy, start_dim?: number, end_dim?: number): Promise<PyTorchTensor>;
191
+ export function transpose(input: PyTorchTensor | PyProxy, dim0: number, dim1: number): Promise<PyTorchTensor>;
192
+ export function permute(input: PyTorchTensor | PyProxy, dims: number[]): Promise<PyTorchTensor>;
193
+ export function matmul(input: PyTorchTensor | PyProxy, other: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
194
+ export function mm(input: PyTorchTensor | PyProxy, mat2: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
195
+ export function bmm(input: PyTorchTensor | PyProxy, mat2: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
196
+ export function einsum(equation: string, ...operands: (PyTorchTensor | PyProxy)[]): Promise<PyTorchTensor>;
197
+ export function dot(input: PyTorchTensor | PyProxy, other: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
198
+ export function mv(input: PyTorchTensor | PyProxy, vec: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
199
+ export function outer(input: PyTorchTensor | PyProxy, vec2: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
200
+ export function cross(input: PyTorchTensor | PyProxy, other: PyTorchTensor | PyProxy, dim?: number): Promise<PyTorchTensor>;
201
+
202
+ // Math
203
+ export function abs(input: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
204
+ export function sqrt(input: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
205
+ export function exp(input: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
206
+ export function log(input: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
207
+ export function sin(input: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
208
+ export function cos(input: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
209
+ export function tanh(input: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
210
+ export function sigmoid(input: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
211
+ export function relu(input: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
212
+ export function clamp(input: PyTorchTensor | PyProxy, min?: number, max?: number): Promise<PyTorchTensor>;
213
+ export function round(input: PyTorchTensor | PyProxy, decimals?: number): Promise<PyTorchTensor>;
214
+ export function ceil(input: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
215
+ export function floor(input: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
216
+ export function sign(input: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
217
+
218
+ // Reduction
219
+ export function sum(input: PyTorchTensor | PyProxy, dim?: number | number[], keepdim?: boolean): Promise<PyTorchTensor | number>;
220
+ export function mean(input: PyTorchTensor | PyProxy, dim?: number | number[], keepdim?: boolean): Promise<PyTorchTensor | number>;
221
+ export function std(input: PyTorchTensor | PyProxy, dim?: number, unbiased?: boolean): Promise<PyTorchTensor | number>;
222
+ export function var_(input: PyTorchTensor | PyProxy, dim?: number, unbiased?: boolean): Promise<PyTorchTensor | number>;
223
+ export function min(input: PyTorchTensor | PyProxy, dim?: number, keepdim?: boolean): Promise<PyTorchTensor | number | [PyTorchTensor, PyTorchTensor]>;
224
+ export function max(input: PyTorchTensor | PyProxy, dim?: number, keepdim?: boolean): Promise<PyTorchTensor | number | [PyTorchTensor, PyTorchTensor]>;
225
+ export function argmin(input: PyTorchTensor | PyProxy, dim?: number): Promise<PyTorchTensor | number>;
226
+ export function argmax(input: PyTorchTensor | PyProxy, dim?: number): Promise<PyTorchTensor | number>;
227
+ export function norm(input: PyTorchTensor | PyProxy, p?: number | string, dim?: number, keepdim?: boolean): Promise<PyTorchTensor | number>;
228
+ export function sort(input: PyTorchTensor | PyProxy, dim?: number, descending?: boolean): Promise<[PyTorchTensor, PyTorchTensor]>;
229
+ export function topk(input: PyTorchTensor | PyProxy, k: number, dim?: number, largest?: boolean, sorted?: boolean): Promise<[PyTorchTensor, PyTorchTensor]>;
230
+ export function unique(input: PyTorchTensor | PyProxy, sorted?: boolean, return_inverse?: boolean): Promise<PyTorchTensor | [PyTorchTensor, PyTorchTensor]>;
231
+ export function where(condition: PyTorchTensor | PyProxy, x?: PyTorchTensor | PyProxy, y?: PyTorchTensor | PyProxy): Promise<PyTorchTensor | PyTorchTensor[]>;
232
+ export function nonzero(input: PyTorchTensor | PyProxy, as_tuple?: boolean): Promise<PyTorchTensor | PyTorchTensor[]>;
233
+
234
+ // Comparison
235
+ export function equal(input: PyTorchTensor | PyProxy, other: PyTorchTensor | PyProxy): Promise<boolean>;
236
+ export function allclose(input: PyTorchTensor | PyProxy, other: PyTorchTensor | PyProxy, rtol?: number, atol?: number): Promise<boolean>;
237
+ export function isnan(input: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
238
+ export function isinf(input: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
239
+ export function isfinite(input: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
240
+
241
+ // ── torch.nn ─────────────────────────────────────────────────────────────
242
+
243
+ export namespace nn {
244
+ export class Module {
245
+ constructor();
246
+ forward(...args: unknown[]): Promise<PyTorchTensor>;
247
+ parameters(recurse?: boolean): PyProxy;
248
+ named_parameters(recurse?: boolean): PyProxy;
249
+ state_dict(): Promise<Record<string, PyTorchTensor>>;
250
+ load_state_dict(state_dict: Record<string, PyTorchTensor | PyProxy>, strict?: boolean): Promise<PyProxy>;
251
+ train(mode?: boolean): Promise<Module>;
252
+ eval(): Promise<Module>;
253
+ to(device: Device | Record<string, unknown>): Promise<Module>;
254
+ cuda(device?: string | number): Promise<Module>;
255
+ cpu(): Promise<Module>;
256
+ zero_grad(set_to_none?: boolean): Promise<void>;
257
+ apply(fn: PyProxy | ((...args: unknown[]) => unknown)): Promise<Module>;
258
+ children(): PyProxy;
259
+ modules(): PyProxy;
260
+ named_children(): PyProxy;
261
+ named_modules(): PyProxy;
262
+ register_buffer(name: string, tensor: PyTorchTensor | PyProxy | null): Promise<void>;
263
+ register_parameter(name: string, param: PyProxy | null): Promise<void>;
264
+ add_module(name: string, module: PyProxy | null): Promise<void>;
265
+ requires_grad_(requires_grad?: boolean): Promise<Module>;
266
+ readonly training: Promise<boolean>;
267
+ [key: string]: unknown;
268
+ }
269
+
270
+ export class Linear {
271
+ constructor(in_features: number, out_features: number, bias?: boolean);
272
+ forward(input: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
273
+ readonly weight: PyProxy;
274
+ readonly bias: PyProxy;
275
+ [key: string]: unknown;
276
+ }
277
+
278
+ export class Conv1d {
279
+ constructor(in_channels: number, out_channels: number, kernel_size: number | [number], stride?: number | [number], padding?: number | [number], dilation?: number, groups?: number, bias?: boolean);
280
+ forward(input: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
281
+ [key: string]: unknown;
282
+ }
283
+
284
+ export class Conv2d {
285
+ constructor(in_channels: number, out_channels: number, kernel_size: number | [number, number], stride?: number | [number, number], padding?: number | [number, number], dilation?: number | [number, number], groups?: number, bias?: boolean);
286
+ forward(input: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
287
+ [key: string]: unknown;
288
+ }
289
+
290
+ export class Conv3d {
291
+ constructor(in_channels: number, out_channels: number, kernel_size: number | [number, number, number], stride?: number | [number, number, number], padding?: number | [number, number, number], dilation?: number, groups?: number, bias?: boolean);
292
+ forward(input: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
293
+ [key: string]: unknown;
294
+ }
295
+
296
+ export class ConvTranspose2d {
297
+ constructor(in_channels: number, out_channels: number, kernel_size: number | [number, number], stride?: number | [number, number], padding?: number, output_padding?: number, groups?: number, bias?: boolean);
298
+ forward(input: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
299
+ [key: string]: unknown;
300
+ }
301
+
302
+ export class BatchNorm1d {
303
+ constructor(num_features: number, eps?: number, momentum?: number, affine?: boolean, track_running_stats?: boolean);
304
+ forward(input: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
305
+ [key: string]: unknown;
306
+ }
307
+
308
+ export class BatchNorm2d {
309
+ constructor(num_features: number, eps?: number, momentum?: number, affine?: boolean);
310
+ forward(input: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
311
+ [key: string]: unknown;
312
+ }
313
+
314
+ export class LayerNorm {
315
+ constructor(normalized_shape: number | number[], eps?: number, elementwise_affine?: boolean);
316
+ forward(input: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
317
+ [key: string]: unknown;
318
+ }
319
+
320
+ export class Dropout {
321
+ constructor(p?: number, inplace?: boolean);
322
+ forward(input: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
323
+ [key: string]: unknown;
324
+ }
325
+
326
+ export class Dropout2d {
327
+ constructor(p?: number, inplace?: boolean);
328
+ forward(input: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
329
+ [key: string]: unknown;
330
+ }
331
+
332
+ export class LSTM {
333
+ constructor(input_size: number, hidden_size: number, num_layers?: number, bias?: boolean, batch_first?: boolean, dropout?: number, bidirectional?: boolean);
334
+ forward(input: PyTorchTensor | PyProxy, hx?: [PyTorchTensor, PyTorchTensor] | null): Promise<[PyTorchTensor, [PyTorchTensor, PyTorchTensor]]>;
335
+ [key: string]: unknown;
336
+ }
337
+
338
+ export class GRU {
339
+ constructor(input_size: number, hidden_size: number, num_layers?: number, bias?: boolean, batch_first?: boolean, dropout?: number, bidirectional?: boolean);
340
+ forward(input: PyTorchTensor | PyProxy, hx?: PyTorchTensor | null): Promise<[PyTorchTensor, PyTorchTensor]>;
341
+ [key: string]: unknown;
342
+ }
343
+
344
+ export class RNN {
345
+ constructor(input_size: number, hidden_size: number, num_layers?: number, nonlinearity?: 'tanh' | 'relu', batch_first?: boolean, dropout?: number, bidirectional?: boolean);
346
+ forward(input: PyTorchTensor | PyProxy, hx?: PyTorchTensor | null): Promise<[PyTorchTensor, PyTorchTensor]>;
347
+ [key: string]: unknown;
348
+ }
349
+
350
+ export class Transformer {
351
+ constructor(d_model?: number, nhead?: number, num_encoder_layers?: number, num_decoder_layers?: number, dim_feedforward?: number, dropout?: number, activation?: string);
352
+ forward(src: PyTorchTensor | PyProxy, tgt: PyTorchTensor | PyProxy, ...kwargs: unknown[]): Promise<PyTorchTensor>;
353
+ [key: string]: unknown;
354
+ }
355
+
356
+ export class TransformerEncoder {
357
+ constructor(encoder_layer: PyProxy, num_layers: number, norm?: PyProxy | null);
358
+ forward(src: PyTorchTensor | PyProxy, mask?: PyTorchTensor | PyProxy | null, src_key_padding_mask?: PyTorchTensor | PyProxy | null): Promise<PyTorchTensor>;
359
+ [key: string]: unknown;
360
+ }
361
+
362
+ export class TransformerDecoder {
363
+ constructor(decoder_layer: PyProxy, num_layers: number, norm?: PyProxy | null);
364
+ forward(tgt: PyTorchTensor | PyProxy, memory: PyTorchTensor | PyProxy, ...kwargs: unknown[]): Promise<PyTorchTensor>;
365
+ [key: string]: unknown;
366
+ }
367
+
368
+ export class MultiheadAttention {
369
+ constructor(embed_dim: number, num_heads: number, dropout?: number, bias?: boolean, kdim?: number | null, vdim?: number | null, batch_first?: boolean);
370
+ forward(query: PyTorchTensor | PyProxy, key: PyTorchTensor | PyProxy, value: PyTorchTensor | PyProxy, ...kwargs: unknown[]): Promise<[PyTorchTensor, PyTorchTensor | null]>;
371
+ [key: string]: unknown;
372
+ }
373
+
374
+ export class Embedding {
375
+ constructor(num_embeddings: number, embedding_dim: number, padding_idx?: number | null, max_norm?: number | null, scale_grad_by_freq?: boolean, sparse?: boolean);
376
+ forward(input: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
377
+ readonly weight: PyProxy;
378
+ [key: string]: unknown;
379
+ }
380
+
381
+ export class EmbeddingBag {
382
+ constructor(num_embeddings: number, embedding_dim: number, mode?: 'mean' | 'sum' | 'max', include_last_offset?: boolean);
383
+ forward(input: PyTorchTensor | PyProxy, offsets?: PyTorchTensor | PyProxy | null): Promise<PyTorchTensor>;
384
+ [key: string]: unknown;
385
+ }
386
+
387
+ export class Sequential {
388
+ constructor(...modules: PyProxy[]);
389
+ forward(input: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
390
+ append(module: PyProxy): Promise<Sequential>;
391
+ [key: string]: unknown;
392
+ }
393
+
394
+ export class ModuleList {
395
+ constructor(modules?: PyProxy[]);
396
+ append(module: PyProxy): Promise<ModuleList>;
397
+ __len__(): Promise<number>;
398
+ [key: string]: unknown;
399
+ }
400
+
401
+ export class ModuleDict {
402
+ constructor(modules?: Record<string, PyProxy>);
403
+ [key: string]: unknown;
404
+ }
405
+
406
+ export class ParameterList {
407
+ constructor(parameters?: PyProxy[]);
408
+ append(value: PyProxy): Promise<ParameterList>;
409
+ [key: string]: unknown;
410
+ }
411
+
412
+ // Loss functions
413
+ export class CrossEntropyLoss {
414
+ constructor(weight?: PyTorchTensor | PyProxy | null, reduction?: 'mean' | 'sum' | 'none', label_smoothing?: number);
415
+ forward(input: PyTorchTensor | PyProxy, target: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
416
+ [key: string]: unknown;
417
+ }
418
+
419
+ export class MSELoss {
420
+ constructor(reduction?: 'mean' | 'sum' | 'none');
421
+ forward(input: PyTorchTensor | PyProxy, target: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
422
+ [key: string]: unknown;
423
+ }
424
+
425
+ export class BCELoss {
426
+ constructor(weight?: PyTorchTensor | PyProxy | null, reduction?: 'mean' | 'sum' | 'none');
427
+ forward(input: PyTorchTensor | PyProxy, target: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
428
+ [key: string]: unknown;
429
+ }
430
+
431
+ export class BCEWithLogitsLoss {
432
+ constructor(weight?: PyTorchTensor | PyProxy | null, reduction?: 'mean' | 'sum' | 'none', pos_weight?: PyTorchTensor | PyProxy | null);
433
+ forward(input: PyTorchTensor | PyProxy, target: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
434
+ [key: string]: unknown;
435
+ }
436
+
437
+ export class NLLLoss {
438
+ constructor(weight?: PyTorchTensor | PyProxy | null, reduction?: 'mean' | 'sum' | 'none');
439
+ forward(input: PyTorchTensor | PyProxy, target: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
440
+ [key: string]: unknown;
441
+ }
442
+
443
+ export class KLDivLoss {
444
+ constructor(reduction?: 'mean' | 'sum' | 'none' | 'batchmean', log_target?: boolean);
445
+ forward(input: PyTorchTensor | PyProxy, target: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
446
+ [key: string]: unknown;
447
+ }
448
+
449
+ export class L1Loss {
450
+ constructor(reduction?: 'mean' | 'sum' | 'none');
451
+ forward(input: PyTorchTensor | PyProxy, target: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
452
+ [key: string]: unknown;
453
+ }
454
+
455
+ // Functional
456
+ export namespace functional {
457
+ export function relu(input: PyTorchTensor | PyProxy, inplace?: boolean): Promise<PyTorchTensor>;
458
+ export function relu6(input: PyTorchTensor | PyProxy, inplace?: boolean): Promise<PyTorchTensor>;
459
+ export function sigmoid(input: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
460
+ export function tanh(input: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
461
+ export function softmax(input: PyTorchTensor | PyProxy, dim?: number, dtype?: string): Promise<PyTorchTensor>;
462
+ export function log_softmax(input: PyTorchTensor | PyProxy, dim?: number): Promise<PyTorchTensor>;
463
+ export function softplus(input: PyTorchTensor | PyProxy, beta?: number, threshold?: number): Promise<PyTorchTensor>;
464
+ export function selu(input: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
465
+ export function elu(input: PyTorchTensor | PyProxy, alpha?: number): Promise<PyTorchTensor>;
466
+ export function leaky_relu(input: PyTorchTensor | PyProxy, negative_slope?: number): Promise<PyTorchTensor>;
467
+ export function gelu(input: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
468
+ export function swish(input: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
469
+ export function mish(input: PyTorchTensor | PyProxy): Promise<PyTorchTensor>;
470
+ export function dropout(input: PyTorchTensor | PyProxy, p?: number, training?: boolean): Promise<PyTorchTensor>;
471
+ export function dropout2d(input: PyTorchTensor | PyProxy, p?: number, training?: boolean): Promise<PyTorchTensor>;
472
+ export function batch_norm(input: PyTorchTensor | PyProxy, running_mean: PyTorchTensor | PyProxy | null, running_var: PyTorchTensor | PyProxy | null, weight?: PyTorchTensor | PyProxy | null, bias?: PyTorchTensor | PyProxy | null, training?: boolean, momentum?: number, eps?: number): Promise<PyTorchTensor>;
473
+ export function layer_norm(input: PyTorchTensor | PyProxy, normalized_shape: number[], weight?: PyTorchTensor | PyProxy | null, bias?: PyTorchTensor | PyProxy | null, eps?: number): Promise<PyTorchTensor>;
474
+ export function cross_entropy(input: PyTorchTensor | PyProxy, target: PyTorchTensor | PyProxy, weight?: PyTorchTensor | PyProxy | null, reduction?: string, label_smoothing?: number): Promise<PyTorchTensor>;
475
+ export function mse_loss(input: PyTorchTensor | PyProxy, target: PyTorchTensor | PyProxy, reduction?: 'mean' | 'sum' | 'none'): Promise<PyTorchTensor>;
476
+ export function binary_cross_entropy(input: PyTorchTensor | PyProxy, target: PyTorchTensor | PyProxy, weight?: PyTorchTensor | PyProxy | null, reduction?: string): Promise<PyTorchTensor>;
477
+ export function binary_cross_entropy_with_logits(input: PyTorchTensor | PyProxy, target: PyTorchTensor | PyProxy, weight?: PyTorchTensor | PyProxy | null, reduction?: string): Promise<PyTorchTensor>;
478
+ export function l1_loss(input: PyTorchTensor | PyProxy, target: PyTorchTensor | PyProxy, reduction?: string): Promise<PyTorchTensor>;
479
+ export function linear(input: PyTorchTensor | PyProxy, weight: PyTorchTensor | PyProxy, bias?: PyTorchTensor | PyProxy | null): Promise<PyTorchTensor>;
480
+ export function conv2d(input: PyTorchTensor | PyProxy, weight: PyTorchTensor | PyProxy, bias?: PyTorchTensor | PyProxy | null, stride?: number | [number, number], padding?: number | [number, number]): Promise<PyTorchTensor>;
481
+ export function max_pool2d(input: PyTorchTensor | PyProxy, kernel_size: number | [number, number], stride?: number | [number, number], padding?: number): Promise<PyTorchTensor>;
482
+ export function avg_pool2d(input: PyTorchTensor | PyProxy, kernel_size: number | [number, number], stride?: number | [number, number], padding?: number): Promise<PyTorchTensor>;
483
+ export function adaptive_avg_pool2d(input: PyTorchTensor | PyProxy, output_size: number | [number, number]): Promise<PyTorchTensor>;
484
+ export function interpolate(input: PyTorchTensor | PyProxy, size?: number | [number] | [number, number], scale_factor?: number | [number, number], mode?: string, align_corners?: boolean | null): Promise<PyTorchTensor>;
485
+ export function embedding(input: PyTorchTensor | PyProxy, weight: PyTorchTensor | PyProxy, padding_idx?: number | null): Promise<PyTorchTensor>;
486
+ export function one_hot(tensor: PyTorchTensor | PyProxy, num_classes?: number): Promise<PyTorchTensor>;
487
+ export function normalize(input: PyTorchTensor | PyProxy, p?: number, dim?: number, eps?: number): Promise<PyTorchTensor>;
488
+ export function pad(input: PyTorchTensor | PyProxy, pad: number[], mode?: string, value?: number): Promise<PyTorchTensor>;
489
+ export function pixel_shuffle(input: PyTorchTensor | PyProxy, upscale_factor: number): Promise<PyTorchTensor>;
490
+ export function unfold(input: PyTorchTensor | PyProxy, dimension: number, size: number, step?: number): Promise<PyTorchTensor>;
491
+ export function fold(input: PyTorchTensor | PyProxy, output_size: [number, number], kernel_size: number | [number, number], dilation?: number, padding?: number, stride?: number): Promise<PyTorchTensor>;
492
+ }
493
+ }
494
+
495
+ // ── torch.optim ───────────────────────────────────────────────────────────
496
+
497
+ export namespace optim {
498
+ export class Optimizer {
499
+ zero_grad(set_to_none?: boolean): Promise<void>;
500
+ step(closure?: PyProxy | null): Promise<PyTorchTensor | null>;
501
+ state_dict(): Promise<Record<string, unknown>>;
502
+ load_state_dict(state_dict: Record<string, unknown>): Promise<void>;
503
+ add_param_group(param_group: Record<string, unknown>): Promise<void>;
504
+ [key: string]: unknown;
505
+ }
506
+
507
+ export class SGD extends Optimizer {
508
+ constructor(params: PyProxy, lr: number, momentum?: number, dampening?: number, weight_decay?: number, nesterov?: boolean);
509
+ [key: string]: unknown;
510
+ }
511
+
512
+ export class Adam extends Optimizer {
513
+ constructor(params: PyProxy, lr?: number, betas?: [number, number], eps?: number, weight_decay?: number, amsgrad?: boolean);
514
+ [key: string]: unknown;
515
+ }
516
+
517
+ export class AdamW extends Optimizer {
518
+ constructor(params: PyProxy, lr?: number, betas?: [number, number], eps?: number, weight_decay?: number, amsgrad?: boolean);
519
+ [key: string]: unknown;
520
+ }
521
+
522
+ export class RMSprop extends Optimizer {
523
+ constructor(params: PyProxy, lr?: number, alpha?: number, eps?: number, weight_decay?: number, momentum?: number, centered?: boolean);
524
+ [key: string]: unknown;
525
+ }
526
+
527
+ export class Adagrad extends Optimizer {
528
+ constructor(params: PyProxy, lr?: number, lr_decay?: number, weight_decay?: number, eps?: number);
529
+ [key: string]: unknown;
530
+ }
531
+
532
+ export class Adadelta extends Optimizer {
533
+ constructor(params: PyProxy, lr?: number, rho?: number, eps?: number, weight_decay?: number);
534
+ [key: string]: unknown;
535
+ }
536
+
537
+ export namespace lr_scheduler {
538
+ export class LRScheduler {
539
+ step(epoch?: number): Promise<void>;
540
+ get_last_lr(): Promise<number[]>;
541
+ state_dict(): Promise<Record<string, unknown>>;
542
+ load_state_dict(state_dict: Record<string, unknown>): Promise<void>;
543
+ [key: string]: unknown;
544
+ }
545
+ export class StepLR extends LRScheduler {
546
+ constructor(optimizer: PyProxy, step_size: number, gamma?: number, last_epoch?: number);
547
+ }
548
+ export class MultiStepLR extends LRScheduler {
549
+ constructor(optimizer: PyProxy, milestones: number[], gamma?: number);
550
+ }
551
+ export class ExponentialLR extends LRScheduler {
552
+ constructor(optimizer: PyProxy, gamma: number);
553
+ }
554
+ export class CosineAnnealingLR extends LRScheduler {
555
+ constructor(optimizer: PyProxy, T_max: number, eta_min?: number);
556
+ }
557
+ export class ReduceLROnPlateau {
558
+ constructor(optimizer: PyProxy, mode?: 'min' | 'max', factor?: number, patience?: number, verbose?: boolean);
559
+ step(metrics: number): Promise<void>;
560
+ [key: string]: unknown;
561
+ }
562
+ export class OneCycleLR extends LRScheduler {
563
+ constructor(optimizer: PyProxy, max_lr: number | number[], total_steps?: number, epochs?: number, steps_per_epoch?: number);
564
+ }
565
+ export class CyclicLR extends LRScheduler {
566
+ constructor(optimizer: PyProxy, base_lr: number | number[], max_lr: number | number[], step_size_up?: number, mode?: string);
567
+ }
568
+ }
569
+ }
570
+
571
+ // ── torch.utils.data ─────────────────────────────────────────────────────
572
+
573
+ export namespace utils {
574
+ export namespace data {
575
+ export class Dataset {
576
+ __len__(): Promise<number>;
577
+ __getitem__(idx: number): Promise<unknown>;
578
+ [key: string]: unknown;
579
+ }
580
+
581
+ export class TensorDataset extends Dataset {
582
+ constructor(...tensors: (PyTorchTensor | PyProxy)[]);
583
+ [key: string]: unknown;
584
+ }
585
+
586
+ export class DataLoader {
587
+ constructor(
588
+ dataset: PyProxy,
589
+ batch_size?: number,
590
+ shuffle?: boolean,
591
+ num_workers?: number,
592
+ pin_memory?: boolean,
593
+ drop_last?: boolean,
594
+ collate_fn?: PyProxy | null,
595
+ );
596
+ __len__(): Promise<number>;
597
+ [key: string]: unknown;
598
+ }
599
+
600
+ export function random_split(dataset: PyProxy, lengths: number[]): Promise<PyProxy[]>;
601
+ export function Subset(dataset: PyProxy, indices: number[]): Promise<PyProxy>;
602
+ export function ConcatDataset(datasets: PyProxy[]): Promise<PyProxy>;
603
+ }
604
+ }
605
+
606
+ // ── torch.save / load ─────────────────────────────────────────────────────
607
+
608
+ export function save(obj: PyProxy | PyTorchTensor, f: string): Promise<void>;
609
+ export function load(f: string, map_location?: Device | PyProxy | null): Promise<PyProxy | PyTorchTensor | Record<string, PyTorchTensor>>;
610
+
611
+ // ── torch.autograd ────────────────────────────────────────────────────────
612
+
613
+ export namespace autograd {
614
+ export function grad(outputs: PyTorchTensor | PyProxy | (PyTorchTensor | PyProxy)[], inputs: PyTorchTensor | PyProxy | (PyTorchTensor | PyProxy)[], grad_outputs?: (PyTorchTensor | PyProxy | null)[] | null, retain_graph?: boolean, create_graph?: boolean): Promise<PyTorchTensor[]>;
615
+ export function backward(tensors: (PyTorchTensor | PyProxy)[], grad_tensors?: (PyTorchTensor | PyProxy | null)[] | null, retain_graph?: boolean, create_graph?: boolean): Promise<void>;
616
+ export class Function {
617
+ static forward(ctx: PyProxy, ...args: unknown[]): Promise<PyTorchTensor>;
618
+ static backward(ctx: PyProxy, ...grad_outputs: (PyTorchTensor | null)[]): Promise<(PyTorchTensor | null)[]>;
619
+ static apply(...args: unknown[]): Promise<PyTorchTensor>;
620
+ [key: string]: unknown;
621
+ }
622
+ export class no_grad {
623
+ constructor();
624
+ __enter__(): Promise<void>;
625
+ __exit__(...args: unknown[]): Promise<void>;
626
+ [key: string]: unknown;
627
+ }
628
+ export function set_grad_enabled(mode: boolean): Promise<PyProxy>;
629
+ }
630
+
631
+ // ── torch.jit ────────────────────────────────────────────────────────────
632
+
633
+ export namespace jit {
634
+ export function script(obj: PyProxy): Promise<PyProxy>;
635
+ export function trace(func: PyProxy, example_inputs: unknown): Promise<PyProxy>;
636
+ export function load(f: string, map_location?: Device | null): Promise<PyProxy>;
637
+ export function save(m: PyProxy, f: string): Promise<void>;
638
+ export function export_opnames(m: PyProxy): Promise<string[]>;
639
+ }
640
+
641
+ // ── torch.cuda ────────────────────────────────────────────────────────────
642
+
643
+ export namespace cuda {
644
+ export function is_available(): Promise<boolean>;
645
+ export function device_count(): Promise<number>;
646
+ export function current_device(): Promise<number>;
647
+ export function set_device(device: number | string): Promise<void>;
648
+ export function get_device_name(device?: number | string): Promise<string>;
649
+ export function get_device_properties(device: number | string): Promise<PyProxy>;
650
+ export function memory_allocated(device?: number | string): Promise<number>;
651
+ export function memory_reserved(device?: number | string): Promise<number>;
652
+ export function empty_cache(): Promise<void>;
653
+ export function synchronize(device?: number | string): Promise<void>;
654
+ export const OutOfMemoryError: PyProxy;
655
+ }
656
+
657
+ // ── torch.distributed ─────────────────────────────────────────────────────
658
+
659
+ export namespace distributed {
660
+ export function init_process_group(backend?: string, rank?: number, world_size?: number): Promise<void>;
661
+ export function is_initialized(): Promise<boolean>;
662
+ export function get_rank(): Promise<number>;
663
+ export function get_world_size(): Promise<number>;
664
+ export function all_reduce(tensor: PyTorchTensor | PyProxy, op?: PyProxy): Promise<void>;
665
+ export function broadcast(tensor: PyTorchTensor | PyProxy, src: number): Promise<void>;
666
+ export function all_gather(tensor_list: (PyTorchTensor | PyProxy)[], tensor: PyTorchTensor | PyProxy): Promise<void>;
667
+ export function destroy_process_group(): Promise<void>;
668
+ }
669
+
670
+ // ── Constants ─────────────────────────────────────────────────────────────
671
+
672
+ export const __version__: string;
673
+ export const float32: PyProxy;
674
+ export const float64: PyProxy;
675
+ export const double: PyProxy;
676
+ export const float16: PyProxy;
677
+ export const half: PyProxy;
678
+ export const bfloat16: PyProxy;
679
+ export const int8: PyProxy;
680
+ export const int16: PyProxy;
681
+ export const int32: PyProxy;
682
+ export const int64: PyProxy;
683
+ export const bool: PyProxy;
684
+ export const uint8: PyProxy;
685
+ export const complex64: PyProxy;
686
+ export const complex128: PyProxy;
687
+ export const device: PyProxy;
688
+ export const Tensor: typeof PyTorchTensor;
689
+ export const pi: number;
690
+ export const inf: number;
691
+ export const nan: number;
692
+ export const no_grad: typeof autograd.no_grad;
693
+ }
694
+