pynect 0.0.0 → 0.2.1

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 (191) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +503 -2
  3. package/SECURITY.md +34 -0
  4. package/binding.gyp +67 -0
  5. package/dist/cli/codegen.d.ts +3 -0
  6. package/dist/cli/codegen.d.ts.map +1 -0
  7. package/dist/cli/codegen.js +543 -0
  8. package/dist/cli/codegen.js.map +1 -0
  9. package/dist/cli/sync.d.ts +3 -0
  10. package/dist/cli/sync.d.ts.map +1 -0
  11. package/dist/cli/sync.js +47 -0
  12. package/dist/cli/sync.js.map +1 -0
  13. package/dist/config/project.d.ts +113 -0
  14. package/dist/config/project.d.ts.map +1 -0
  15. package/dist/config/project.js +344 -0
  16. package/dist/config/project.js.map +1 -0
  17. package/dist/core/isolated-worker.d.ts +39 -0
  18. package/dist/core/isolated-worker.d.ts.map +1 -0
  19. package/dist/core/isolated-worker.js +178 -0
  20. package/dist/core/isolated-worker.js.map +1 -0
  21. package/dist/core/py-callable.d.ts +67 -0
  22. package/dist/core/py-callable.d.ts.map +1 -0
  23. package/dist/core/py-callable.js +104 -0
  24. package/dist/core/py-callable.js.map +1 -0
  25. package/dist/core/py-context.d.ts +76 -0
  26. package/dist/core/py-context.d.ts.map +1 -0
  27. package/dist/core/py-context.js +239 -0
  28. package/dist/core/py-context.js.map +1 -0
  29. package/dist/core/py-iterator.d.ts +84 -0
  30. package/dist/core/py-iterator.d.ts.map +1 -0
  31. package/dist/core/py-iterator.js +243 -0
  32. package/dist/core/py-iterator.js.map +1 -0
  33. package/dist/core/py-module.d.ts +53 -0
  34. package/dist/core/py-module.d.ts.map +1 -0
  35. package/dist/core/py-module.js +162 -0
  36. package/dist/core/py-module.js.map +1 -0
  37. package/dist/core/py-proxy.d.ts +75 -0
  38. package/dist/core/py-proxy.d.ts.map +1 -0
  39. package/dist/core/py-proxy.js +563 -0
  40. package/dist/core/py-proxy.js.map +1 -0
  41. package/dist/core/py-runtime.d.ts +113 -0
  42. package/dist/core/py-runtime.d.ts.map +1 -0
  43. package/dist/core/py-runtime.js +528 -0
  44. package/dist/core/py-runtime.js.map +1 -0
  45. package/dist/env/executables.d.ts +3 -0
  46. package/dist/env/executables.d.ts.map +1 -0
  47. package/dist/env/executables.js +14 -0
  48. package/dist/env/executables.js.map +1 -0
  49. package/dist/env/package-installer.d.ts +232 -0
  50. package/dist/env/package-installer.d.ts.map +1 -0
  51. package/dist/env/package-installer.js +615 -0
  52. package/dist/env/package-installer.js.map +1 -0
  53. package/dist/env/project-environment.d.ts +64 -0
  54. package/dist/env/project-environment.d.ts.map +1 -0
  55. package/dist/env/project-environment.js +388 -0
  56. package/dist/env/project-environment.js.map +1 -0
  57. package/dist/env/pyfig-adapter.d.ts +38 -0
  58. package/dist/env/pyfig-adapter.d.ts.map +1 -0
  59. package/dist/env/pyfig-adapter.js +10 -0
  60. package/dist/env/pyfig-adapter.js.map +1 -0
  61. package/dist/env/python-detector.d.ts +48 -0
  62. package/dist/env/python-detector.d.ts.map +1 -0
  63. package/dist/env/python-detector.js +182 -0
  64. package/dist/env/python-detector.js.map +1 -0
  65. package/dist/env/python-provisioner.d.ts +16 -0
  66. package/dist/env/python-provisioner.d.ts.map +1 -0
  67. package/dist/env/python-provisioner.js +42 -0
  68. package/dist/env/python-provisioner.js.map +1 -0
  69. package/dist/env/venv-manager.d.ts +56 -0
  70. package/dist/env/venv-manager.d.ts.map +1 -0
  71. package/dist/env/venv-manager.js +160 -0
  72. package/dist/env/venv-manager.js.map +1 -0
  73. package/dist/index.d.ts +182 -0
  74. package/dist/index.d.ts.map +1 -0
  75. package/dist/index.js +394 -0
  76. package/dist/index.js.map +1 -0
  77. package/dist/native/native-addon-loader.d.ts +13 -0
  78. package/dist/native/native-addon-loader.d.ts.map +1 -0
  79. package/dist/native/native-addon-loader.js +171 -0
  80. package/dist/native/native-addon-loader.js.map +1 -0
  81. package/dist/plugins/builtin/numpy-plugin.d.ts +17 -0
  82. package/dist/plugins/builtin/numpy-plugin.d.ts.map +1 -0
  83. package/dist/plugins/builtin/numpy-plugin.js +41 -0
  84. package/dist/plugins/builtin/numpy-plugin.js.map +1 -0
  85. package/dist/plugins/builtin/pandas-plugin.d.ts +19 -0
  86. package/dist/plugins/builtin/pandas-plugin.d.ts.map +1 -0
  87. package/dist/plugins/builtin/pandas-plugin.js +57 -0
  88. package/dist/plugins/builtin/pandas-plugin.js.map +1 -0
  89. package/dist/plugins/builtin/torch-plugin.d.ts +23 -0
  90. package/dist/plugins/builtin/torch-plugin.d.ts.map +1 -0
  91. package/dist/plugins/builtin/torch-plugin.js +50 -0
  92. package/dist/plugins/builtin/torch-plugin.js.map +1 -0
  93. package/dist/plugins/index.d.ts +7 -0
  94. package/dist/plugins/index.d.ts.map +1 -0
  95. package/dist/plugins/index.js +12 -0
  96. package/dist/plugins/index.js.map +1 -0
  97. package/dist/plugins/plugin-manager.d.ts +26 -0
  98. package/dist/plugins/plugin-manager.d.ts.map +1 -0
  99. package/dist/plugins/plugin-manager.js +174 -0
  100. package/dist/plugins/plugin-manager.js.map +1 -0
  101. package/dist/plugins/plugin.interface.d.ts +41 -0
  102. package/dist/plugins/plugin.interface.d.ts.map +1 -0
  103. package/dist/plugins/plugin.interface.js +12 -0
  104. package/dist/plugins/plugin.interface.js.map +1 -0
  105. package/dist/serialization/data-frame-bridge.d.ts +141 -0
  106. package/dist/serialization/data-frame-bridge.d.ts.map +1 -0
  107. package/dist/serialization/data-frame-bridge.js +355 -0
  108. package/dist/serialization/data-frame-bridge.js.map +1 -0
  109. package/dist/serialization/msg-pack-serializer.d.ts +45 -0
  110. package/dist/serialization/msg-pack-serializer.d.ts.map +1 -0
  111. package/dist/serialization/msg-pack-serializer.js +242 -0
  112. package/dist/serialization/msg-pack-serializer.js.map +1 -0
  113. package/dist/serialization/numpy-bridge.d.ts +96 -0
  114. package/dist/serialization/numpy-bridge.d.ts.map +1 -0
  115. package/dist/serialization/numpy-bridge.js +323 -0
  116. package/dist/serialization/numpy-bridge.js.map +1 -0
  117. package/dist/serialization/serializer.d.ts +78 -0
  118. package/dist/serialization/serializer.d.ts.map +1 -0
  119. package/dist/serialization/serializer.js +281 -0
  120. package/dist/serialization/serializer.js.map +1 -0
  121. package/dist/types/addon.d.ts +131 -0
  122. package/dist/types/addon.d.ts.map +1 -0
  123. package/dist/types/addon.js +32 -0
  124. package/dist/types/addon.js.map +1 -0
  125. package/dist/types/config.d.ts +236 -0
  126. package/dist/types/config.d.ts.map +1 -0
  127. package/dist/types/config.js +61 -0
  128. package/dist/types/config.js.map +1 -0
  129. package/dist/types/index.d.ts +10 -0
  130. package/dist/types/index.d.ts.map +1 -0
  131. package/dist/types/index.js +12 -0
  132. package/dist/types/index.js.map +1 -0
  133. package/dist/types/python.d.ts +235 -0
  134. package/dist/types/python.d.ts.map +1 -0
  135. package/dist/types/python.js +7 -0
  136. package/dist/types/python.js.map +1 -0
  137. package/dist/utils/error-translator.d.ts +83 -0
  138. package/dist/utils/error-translator.d.ts.map +1 -0
  139. package/dist/utils/error-translator.js +210 -0
  140. package/dist/utils/error-translator.js.map +1 -0
  141. package/dist/utils/locking.d.ts +3 -0
  142. package/dist/utils/locking.d.ts.map +1 -0
  143. package/dist/utils/locking.js +10 -0
  144. package/dist/utils/locking.js.map +1 -0
  145. package/dist/utils/logger.d.ts +27 -0
  146. package/dist/utils/logger.d.ts.map +1 -0
  147. package/dist/utils/logger.js +115 -0
  148. package/dist/utils/logger.js.map +1 -0
  149. package/dist/utils/memory-monitor.d.ts +43 -0
  150. package/dist/utils/memory-monitor.d.ts.map +1 -0
  151. package/dist/utils/memory-monitor.js +143 -0
  152. package/dist/utils/memory-monitor.js.map +1 -0
  153. package/package.json +93 -17
  154. package/prebuilds/darwin-arm64/pynect-prebuild.json +8 -0
  155. package/prebuilds/darwin-arm64/pynect_addon.node +0 -0
  156. package/prebuilds/darwin-x64/pynect-prebuild.json +8 -0
  157. package/prebuilds/darwin-x64/pynect_addon.node +0 -0
  158. package/prebuilds/linux-arm64/pynect-prebuild.json +9 -0
  159. package/prebuilds/linux-arm64/pynect_addon.node +0 -0
  160. package/prebuilds/linux-x64/pynect-prebuild.json +9 -0
  161. package/prebuilds/linux-x64/pynect_addon.node +0 -0
  162. package/prebuilds/win32-arm64/pynect-prebuild.json +8 -0
  163. package/prebuilds/win32-arm64/pynect_addon.node +0 -0
  164. package/prebuilds/win32-x64/pynect-prebuild.json +8 -0
  165. package/prebuilds/win32-x64/pynect_addon.node +0 -0
  166. package/python/ast_inspector.py +248 -0
  167. package/python/error_handler.py +432 -0
  168. package/python/isolated_worker.py +94 -0
  169. package/python/pynect_dispatcher.py +382 -0
  170. package/python/pynect_runtime.py +574 -0
  171. package/python/serializer.py +373 -0
  172. package/python/type_inspector.py +315 -0
  173. package/scripts/build-native.js +50 -0
  174. package/scripts/cli.js +21 -0
  175. package/scripts/ensure-native.js +85 -0
  176. package/scripts/postinstall.js +40 -0
  177. package/scripts/pyfig.js +128 -0
  178. package/scripts/python-provisioner.js +23 -0
  179. package/scripts/smoke-python-boundary.js +103 -0
  180. package/src/native/gil_guard.cpp +25 -0
  181. package/src/native/gil_guard.h +174 -0
  182. package/src/native/native-addon-loader.ts +218 -0
  183. package/src/native/pynect_addon.cpp +942 -0
  184. package/src/native/python_bridge.cpp +904 -0
  185. package/src/native/python_bridge.h +263 -0
  186. package/src/native/thread_pool.cpp +375 -0
  187. package/src/native/thread_pool.h +185 -0
  188. package/src/native/type_converter.cpp +906 -0
  189. package/src/native/type_converter.h +271 -0
  190. package/index.d.ts +0 -3
  191. package/index.js +0 -3
@@ -0,0 +1,563 @@
1
+ "use strict";
2
+ /**
3
+ * pynect - PyProxy
4
+ *
5
+ * The heart of pynect's JavaScript API.
6
+ * Every Python object is represented as a PyProxy - a JavaScript Proxy that:
7
+ *
8
+ * 1. Intercepts property access -> creates lazy child PyProxy
9
+ * 2. Intercepts function call -> sends to Python worker thread
10
+ * 3. Intercepts `then` -> resolves the proxy chain into a value (makes it awaitable)
11
+ * 4. Intercepts Symbol.iterator -> enables for...of loops
12
+ * 5. Intercepts Symbol.asyncIterator -> enables for await...of loops
13
+ * 6. Intercepts property assignment -> sets Python attribute
14
+ *
15
+ * The key insight: attributes are NOT resolved eagerly. The chain
16
+ * `df.groupby('country').agg({'sales': 'sum'}).reset_index()`
17
+ * creates a chain of PyProxy objects, each recording the operation,
18
+ * and only executes when you `await` the final result.
19
+ */
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.PyProxy = exports.PYNECT_WITH_OPTIONS = exports.PYPROXY_PATH = exports.PYPROXY_OBJECTID = exports.PYPROXY_INTERNAL = void 0;
22
+ exports.isPyProxy = isPyProxy;
23
+ const error_translator_1 = require("../utils/error-translator");
24
+ const logger_1 = require("../utils/logger");
25
+ const logger = new logger_1.Logger('PyProxy');
26
+ let nextRequestId = 0;
27
+ // Internal symbols used to brand PyProxy and access internals
28
+ exports.PYPROXY_INTERNAL = Symbol('pynect.internal');
29
+ exports.PYPROXY_OBJECTID = Symbol('pynect.objectId');
30
+ exports.PYPROXY_PATH = Symbol('pynect.path');
31
+ exports.PYNECT_WITH_OPTIONS = Symbol.for('pynect.withOptions');
32
+ /**
33
+ * PyProxy - wraps any Python object in JavaScript.
34
+ *
35
+ * Usage:
36
+ * ```typescript
37
+ * const pd = await py.import('pandas');
38
+ * const df = await pd.read_csv('data.csv'); // df is a PyProxy
39
+ * const rows = await df.describe().to_dict('records'); // chained calls
40
+ * ```
41
+ */
42
+ class PyProxy {
43
+ /** Internal state - do not access directly from outside */
44
+ [exports.PYPROXY_INTERNAL];
45
+ constructor(internal) {
46
+ this[exports.PYPROXY_INTERNAL] = internal;
47
+ // A Proxy apply trap only works when its target is callable. Use a
48
+ // function target while preserving the concrete PyProxy/PyModule
49
+ // prototype and local state.
50
+ const callable = function pyProxyTarget() { };
51
+ Object.setPrototypeOf(callable, new.target.prototype);
52
+ Object.defineProperty(callable, exports.PYPROXY_INTERNAL, {
53
+ configurable: false,
54
+ enumerable: false,
55
+ value: internal,
56
+ writable: false,
57
+ });
58
+ return new Proxy(callable, PyProxy.handler);
59
+ }
60
+ // Proxy Handler
61
+ static handler = {
62
+ get(target, prop, receiver) {
63
+ const internal = target[exports.PYPROXY_INTERNAL];
64
+ // Internal Symbol Access
65
+ if (prop === exports.PYPROXY_INTERNAL || prop === exports.PYPROXY_OBJECTID || prop === exports.PYPROXY_PATH) {
66
+ return Reflect.get(target, prop, receiver);
67
+ }
68
+ // JavaScript built-in symbols
69
+ if (typeof prop === 'symbol') {
70
+ // Make for...of work (synchronous iteration via async iterator)
71
+ if (prop === Symbol.asyncIterator) {
72
+ return () => target._makeAsyncIterator(internal);
73
+ }
74
+ // Symbol.iterator - not directly supported for Python objects
75
+ if (prop === Symbol.iterator) {
76
+ return () => {
77
+ throw new Error('Python objects are not synchronously iterable from JavaScript. ' +
78
+ 'Use "for await...of" instead.');
79
+ };
80
+ }
81
+ // Symbol.toPrimitive - for coercion
82
+ if (prop === Symbol.toPrimitive) {
83
+ return (hint) => {
84
+ if (hint === 'string') {
85
+ return `[PyProxy id=${internal.objectId}]`;
86
+ }
87
+ return NaN;
88
+ };
89
+ }
90
+ // Symbol.toStringTag
91
+ if (prop === Symbol.toStringTag) {
92
+ return 'PyProxy';
93
+ }
94
+ return Reflect.get(target, prop, receiver);
95
+ }
96
+ const prototype = Object.getPrototypeOf(target);
97
+ const isLocal = Object.prototype.hasOwnProperty.call(target, prop) ||
98
+ (prototype !== null && prop in prototype && !(prop in Function.prototype));
99
+ if (isLocal) {
100
+ return Reflect.get(target, prop, receiver);
101
+ }
102
+ // toString / valueOf
103
+ if (prop === 'toString') {
104
+ return () => `[PyProxy id=${internal.objectId} path=${internal.path.join('.')}]`;
105
+ }
106
+ if (prop === 'valueOf') {
107
+ return () => target;
108
+ }
109
+ // then (Thenable - makes it work with await)
110
+ if (prop === 'then') {
111
+ // Root proxies are stable object handles. Marking them as thenables
112
+ // makes Promise resolution recursively unwrap the same Python object.
113
+ if (internal.path.length === 0) {
114
+ return undefined;
115
+ }
116
+ return (onfulfilled, onrejected) => {
117
+ return target._resolve(internal).then(onfulfilled, onrejected);
118
+ };
119
+ }
120
+ // catch / finally (Promise chain support)
121
+ if (prop === 'catch') {
122
+ if (internal.path.length === 0) {
123
+ return undefined;
124
+ }
125
+ return (onrejected) => target._resolve(internal).catch(onrejected);
126
+ }
127
+ if (prop === 'finally') {
128
+ if (internal.path.length === 0) {
129
+ return undefined;
130
+ }
131
+ return (onfinally) => target._resolve(internal).finally(onfinally);
132
+ }
133
+ // Internal pynect methods
134
+ if (prop.startsWith('__pynect_')) {
135
+ return Reflect.get(target, prop, receiver);
136
+ }
137
+ // Create lazy child PyProxy
138
+ const childInternal = {
139
+ objectId: internal.objectId,
140
+ path: [...internal.path, prop],
141
+ addon: internal.addon,
142
+ callTimeout: internal.callTimeout,
143
+ executionTimeout: internal.executionTimeout,
144
+ };
145
+ return new PyProxy(childInternal);
146
+ },
147
+ // Function call (proxy() or proxy.method())
148
+ apply(target, _thisArg, args) {
149
+ const internal = target[exports.PYPROXY_INTERNAL];
150
+ return target._call(internal, args);
151
+ },
152
+ // Property assignment
153
+ set(target, prop, value) {
154
+ const internal = target[exports.PYPROXY_INTERNAL];
155
+ if (typeof prop === 'symbol') {
156
+ return Reflect.set(target, prop, value);
157
+ }
158
+ const prototype = Object.getPrototypeOf(target);
159
+ const isLocal = prop.startsWith('_') ||
160
+ Object.prototype.hasOwnProperty.call(target, prop) ||
161
+ (prototype !== null && prop in prototype && !(prop in Function.prototype));
162
+ if (isLocal || prop.startsWith('__pynect_')) {
163
+ return Reflect.set(target, prop, value);
164
+ }
165
+ // Schedule async setAttribute (best-effort, no await)
166
+ target._setAttr(internal, String(prop), value).catch(err => {
167
+ logger.error(`Failed to set Python attribute '${String(prop)}'`, err);
168
+ });
169
+ return true;
170
+ },
171
+ // has() - needed for 'in' operator
172
+ has(_target, _prop) {
173
+ // We can't know without checking Python; return true for everything
174
+ return true;
175
+ },
176
+ // deleteProperty
177
+ deleteProperty(target, prop) {
178
+ if (typeof prop === 'string') {
179
+ const internal = target[exports.PYPROXY_INTERNAL];
180
+ internal.addon.deleteAttribute(internal.objectId, prop).catch(err => {
181
+ logger.error(`Failed to delete Python attribute '${prop}'`, err);
182
+ });
183
+ }
184
+ return true;
185
+ },
186
+ // ownKeys - for Object.keys()
187
+ ownKeys(_target) {
188
+ // Can't synchronously get Python keys; return empty
189
+ return [];
190
+ },
191
+ getOwnPropertyDescriptor(_target, prop) {
192
+ if (typeof prop === 'symbol') {
193
+ return undefined;
194
+ }
195
+ return {
196
+ enumerable: false,
197
+ configurable: true,
198
+ writable: false,
199
+ value: undefined,
200
+ };
201
+ },
202
+ };
203
+ // Resolution (await)
204
+ async _resolve(internal) {
205
+ try {
206
+ const addon = internal.addon;
207
+ if (internal.path.length === 0) {
208
+ // Resolve the object itself
209
+ const result = await addon.getObjectValue(internal.objectId);
210
+ return PyProxy._deserializeAddonResult(result, internal);
211
+ }
212
+ // Resolve attribute path
213
+ const result = await addon.getAttributePath(internal.objectId, internal.path);
214
+ return PyProxy._deserializeAddonResult(result, internal);
215
+ }
216
+ catch (err) {
217
+ if (err && typeof err === 'object' && 'pythonType' in err) {
218
+ throw (0, error_translator_1.translatePythonError)({
219
+ type: err.pythonType,
220
+ message: err.message,
221
+ traceback: err.pythonTraceback || '',
222
+ });
223
+ }
224
+ throw err;
225
+ }
226
+ }
227
+ // Function Call
228
+ async callWithOptions(args, options = {}, kwargs) {
229
+ const combined = kwargs ? [...args, kwargs] : args;
230
+ return this._call(this[exports.PYPROXY_INTERNAL], combined, options);
231
+ }
232
+ /** Call this Python function with cancellation or timeout overrides. */
233
+ async withOptions(options, ...args) {
234
+ return this._call(this[exports.PYPROXY_INTERNAL], args, options);
235
+ }
236
+ /** Collision-free form of withOptions(). */
237
+ async [exports.PYNECT_WITH_OPTIONS](options, ...args) {
238
+ return this._call(this[exports.PYPROXY_INTERNAL], args, options);
239
+ }
240
+ async _call(internal, args, controls = {}) {
241
+ try {
242
+ const addon = internal.addon;
243
+ if (controls.signal?.aborted) {
244
+ throw PyProxy._abortError();
245
+ }
246
+ // Serialize arguments
247
+ const serializedArgs = await Promise.all(args.map(arg => PyProxy._serializeArg(arg)));
248
+ const callOptions = {
249
+ args: serializedArgs,
250
+ kwargs: {},
251
+ timeout: controls.queueTimeout ?? internal.callTimeout,
252
+ executionTimeout: controls.executionTimeout ?? internal.executionTimeout,
253
+ requestId: `pynect-${process.pid}-${Date.now()}-${++nextRequestId}`,
254
+ };
255
+ // If last arg is a plain object (not PyProxy/Array), treat as kwargs
256
+ if (args.length > 0) {
257
+ const lastArg = args[args.length - 1];
258
+ if (lastArg !== null &&
259
+ typeof lastArg === 'object' &&
260
+ !Array.isArray(lastArg) &&
261
+ !(lastArg instanceof PyProxy) &&
262
+ !(lastArg instanceof ArrayBuffer) &&
263
+ !ArrayBuffer.isView(lastArg) &&
264
+ !('__pyref__' in lastArg) &&
265
+ PyProxy._isPlainObject(lastArg)) {
266
+ // Treat as kwargs
267
+ callOptions.args = serializedArgs.slice(0, -1);
268
+ const kwargsEntries = await Promise.all(Object.entries(lastArg).map(async ([k, v]) => [k, await PyProxy._serializeArg(v)]));
269
+ callOptions.kwargs = Object.fromEntries(kwargsEntries);
270
+ }
271
+ }
272
+ const pending = addon.callFunction(internal.objectId, internal.path, callOptions);
273
+ const result = controls.signal
274
+ ? await PyProxy._withAbort(pending, controls.signal, addon, callOptions.requestId)
275
+ : await pending;
276
+ return PyProxy._deserializeAddonResult(result, internal);
277
+ }
278
+ catch (err) {
279
+ if (err && typeof err === 'object' && 'pythonType' in err) {
280
+ throw (0, error_translator_1.translatePythonError)({
281
+ type: err.pythonType,
282
+ message: err.message,
283
+ traceback: err.pythonTraceback || '',
284
+ });
285
+ }
286
+ throw err;
287
+ }
288
+ }
289
+ // Async Iterator (for await...of)
290
+ async *_makeAsyncIterator(internal) {
291
+ const addon = internal.addon;
292
+ // Create Python iterator
293
+ const iterResult = await addon.createIterator(internal.objectId, internal.path);
294
+ const iteratorResult = iterResult;
295
+ if (!iteratorResult.success) {
296
+ const err = iteratorResult.error;
297
+ if (err) {
298
+ throw (0, error_translator_1.translatePythonError)({
299
+ type: err.type,
300
+ message: err.message,
301
+ traceback: err.traceback || '',
302
+ });
303
+ }
304
+ throw new Error('Failed to create Python iterator');
305
+ }
306
+ // Parse iteratorId from resultJson
307
+ let iteratorId;
308
+ try {
309
+ const parsed = JSON.parse(iterResult.resultJson || '{}');
310
+ iteratorId = parsed.iteratorId;
311
+ }
312
+ catch {
313
+ throw new Error('Failed to parse iterator ID');
314
+ }
315
+ if (!iteratorId) {
316
+ throw new Error('Iterator ID not returned from Python');
317
+ }
318
+ try {
319
+ while (true) {
320
+ const next = await addon.iteratorNext(iteratorId);
321
+ const nextResult = next;
322
+ if (!nextResult.success) {
323
+ break;
324
+ }
325
+ let parsed;
326
+ try {
327
+ parsed = JSON.parse(nextResult.resultJson || '{"done":true}');
328
+ }
329
+ catch {
330
+ break;
331
+ }
332
+ if (parsed.done) {
333
+ break;
334
+ }
335
+ // Deserialize the value
336
+ const value = parsed.value;
337
+ if (value && typeof value === 'object' && '__pyref__' in value) {
338
+ const refId = value.__pyref__;
339
+ yield PyProxy._createFromObjectId(refId, [], addon, internal.callTimeout, internal.executionTimeout);
340
+ }
341
+ else {
342
+ yield value;
343
+ }
344
+ }
345
+ }
346
+ finally {
347
+ // Always destroy the iterator
348
+ await addon.destroyIterator(iteratorId).catch(() => { });
349
+ }
350
+ }
351
+ // Set Attribute
352
+ async _setAttr(internal, propName, value) {
353
+ const serialized = await PyProxy._serializeArg(value);
354
+ await internal.addon.setAttribute(internal.objectId, propName, serialized);
355
+ }
356
+ // Static Helpers
357
+ static _createFromObjectId(objectId, path, addon, callTimeout, executionTimeout) {
358
+ return new PyProxy({
359
+ objectId,
360
+ path,
361
+ addon,
362
+ callTimeout,
363
+ executionTimeout,
364
+ });
365
+ }
366
+ static _deserializeAddonResult(result, internal) {
367
+ const r = result;
368
+ if (!r.success) {
369
+ if (r.error) {
370
+ throw (0, error_translator_1.translatePythonError)({
371
+ type: r.error.type,
372
+ message: r.error.message,
373
+ traceback: r.error.traceback || '',
374
+ });
375
+ }
376
+ throw new Error('Python call failed without error details');
377
+ }
378
+ if (r.isObject && r.objectId) {
379
+ // Result is a Python object - wrap in PyProxy
380
+ return PyProxy._createFromObjectId(r.objectId, [], internal.addon, internal.callTimeout, internal.executionTimeout);
381
+ }
382
+ // Deserialize JSON result
383
+ if (r.resultJson !== undefined && r.resultJson !== null) {
384
+ try {
385
+ const parsed = JSON.parse(r.resultJson);
386
+ if (parsed && typeof parsed === 'object' && '__pyref__' in parsed) {
387
+ return PyProxy._createFromObjectId(parsed.__pyref__, [], internal.addon, internal.callTimeout, internal.executionTimeout);
388
+ }
389
+ return parsed;
390
+ }
391
+ catch {
392
+ return r.resultJson;
393
+ }
394
+ }
395
+ return null;
396
+ }
397
+ static _abortError() {
398
+ const error = new Error('Python call was aborted');
399
+ error.name = 'AbortError';
400
+ return error;
401
+ }
402
+ static _withAbort(pending, signal, addon, requestId) {
403
+ return new Promise((resolve, reject) => {
404
+ let settled = false;
405
+ const cleanup = () => signal.removeEventListener('abort', onAbort);
406
+ const onAbort = () => {
407
+ if (settled)
408
+ return;
409
+ settled = true;
410
+ cleanup();
411
+ if (requestId)
412
+ void addon.cancelCall(requestId).catch(() => undefined);
413
+ pending.catch(() => undefined);
414
+ reject(PyProxy._abortError());
415
+ };
416
+ signal.addEventListener('abort', onAbort, { once: true });
417
+ pending.then(value => {
418
+ if (settled)
419
+ return;
420
+ settled = true;
421
+ cleanup();
422
+ resolve(value);
423
+ }, error => {
424
+ if (settled)
425
+ return;
426
+ settled = true;
427
+ cleanup();
428
+ reject(error);
429
+ });
430
+ if (signal.aborted)
431
+ onAbort();
432
+ });
433
+ }
434
+ static async _serializeArg(value) {
435
+ // Already a SerializedValue
436
+ if (value !== null &&
437
+ typeof value === 'object' &&
438
+ 'format' in value) {
439
+ return value;
440
+ }
441
+ // PyProxy -> pass as Python reference
442
+ if (value instanceof PyProxy) {
443
+ const internal = value[exports.PYPROXY_INTERNAL];
444
+ // If proxy has a path, resolve it first to get the objectId
445
+ if (internal.path.length > 0) {
446
+ // We need to resolve it - for now, keep as reference
447
+ // Production: could pre-resolve path to objectId
448
+ }
449
+ return {
450
+ format: 6, // PYTHON_REF
451
+ data: null,
452
+ metadata: { objectId: internal.objectId },
453
+ };
454
+ }
455
+ // null / undefined
456
+ if (value === null || value === undefined) {
457
+ return { format: 0, data: 'null', metadata: {} };
458
+ }
459
+ // TypedArrays -> numpy-compatible binary
460
+ if (value instanceof Float32Array ||
461
+ value instanceof Float64Array ||
462
+ value instanceof Int8Array ||
463
+ value instanceof Int16Array ||
464
+ value instanceof Int32Array ||
465
+ value instanceof Uint8Array ||
466
+ value instanceof Uint16Array ||
467
+ value instanceof Uint32Array ||
468
+ value instanceof BigInt64Array ||
469
+ value instanceof BigUint64Array) {
470
+ const ta = value;
471
+ const dtype = PyProxy._getTypedArrayDtype(ta);
472
+ return {
473
+ format: 2, // NUMPY_ARRAY
474
+ data: new Uint8Array(ta.buffer, ta.byteOffset, ta.byteLength),
475
+ metadata: {
476
+ dtype,
477
+ shape: [ta.length],
478
+ },
479
+ };
480
+ }
481
+ // ArrayBuffer
482
+ if (value instanceof ArrayBuffer) {
483
+ return {
484
+ format: 7, // BYTES
485
+ data: new Uint8Array(value),
486
+ metadata: {},
487
+ };
488
+ }
489
+ // Primitive types
490
+ if (typeof value === 'number' ||
491
+ typeof value === 'string' ||
492
+ typeof value === 'boolean') {
493
+ return {
494
+ format: 0, // JSON
495
+ data: JSON.stringify(value),
496
+ metadata: {},
497
+ };
498
+ }
499
+ // Array or object - use JSON
500
+ try {
501
+ return {
502
+ format: 0, // JSON
503
+ data: JSON.stringify(value),
504
+ metadata: {},
505
+ };
506
+ }
507
+ catch {
508
+ // Can't serialize - this shouldn't happen for plain objects
509
+ return { format: 8, data: null, metadata: {} }; // NONE
510
+ }
511
+ }
512
+ static _getTypedArrayDtype(arr) {
513
+ if (arr instanceof Float32Array) {
514
+ return 'float32';
515
+ }
516
+ if (arr instanceof Float64Array) {
517
+ return 'float64';
518
+ }
519
+ if (arr instanceof Int8Array) {
520
+ return 'int8';
521
+ }
522
+ if (arr instanceof Int16Array) {
523
+ return 'int16';
524
+ }
525
+ if (arr instanceof Int32Array) {
526
+ return 'int32';
527
+ }
528
+ if (arr instanceof BigInt64Array) {
529
+ return 'int64';
530
+ }
531
+ if (arr instanceof Uint8Array) {
532
+ return 'uint8';
533
+ }
534
+ if (arr instanceof Uint16Array) {
535
+ return 'uint16';
536
+ }
537
+ if (arr instanceof Uint32Array) {
538
+ return 'uint32';
539
+ }
540
+ if (arr instanceof BigUint64Array) {
541
+ return 'uint64';
542
+ }
543
+ return 'uint8';
544
+ }
545
+ static _isPlainObject(obj) {
546
+ if (!obj || typeof obj !== 'object') {
547
+ return false;
548
+ }
549
+ const proto = Object.getPrototypeOf(obj);
550
+ return proto === null || proto === Object.prototype;
551
+ }
552
+ }
553
+ exports.PyProxy = PyProxy;
554
+ /**
555
+ * Check if a value is a PyProxy.
556
+ */
557
+ function isPyProxy(value) {
558
+ return (value instanceof PyProxy ||
559
+ (value !== null &&
560
+ typeof value === 'object' &&
561
+ exports.PYPROXY_INTERNAL in value));
562
+ }
563
+ //# sourceMappingURL=py-proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"py-proxy.js","sourceRoot":"","sources":["../../src/core/py-proxy.ts"],"names":[],"mappings":"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"}