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,178 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IsolatedWorker = void 0;
4
+ const readline_1 = require("readline");
5
+ const pyfig_adapter_1 = require("../env/pyfig-adapter");
6
+ /** Persistent JSON-only child process used when hard termination is required. */
7
+ class IsolatedWorker {
8
+ options;
9
+ child;
10
+ lines;
11
+ nextId = 0;
12
+ pending = new Map();
13
+ closing = false;
14
+ stderrTail = '';
15
+ constructor(options) {
16
+ this.options = options;
17
+ }
18
+ async call(moduleName, functionName, args = [], callOptions = {}) {
19
+ if (callOptions.signal?.aborted)
20
+ throw this.abortError();
21
+ const child = await this.ensureStarted();
22
+ const id = ++this.nextId;
23
+ const timeout = callOptions.timeout ?? this.options.timeout;
24
+ return new Promise((resolve, reject) => {
25
+ const pending = {
26
+ resolve: value => resolve(value),
27
+ reject,
28
+ signal: callOptions.signal,
29
+ };
30
+ if (timeout > 0) {
31
+ pending.timer = setTimeout(() => {
32
+ this.terminate(new Error(`Isolated Python call exceeded ${timeout}ms`));
33
+ }, timeout);
34
+ }
35
+ if (callOptions.signal) {
36
+ pending.onAbort = () => this.terminate(this.abortError());
37
+ callOptions.signal.addEventListener('abort', pending.onAbort, { once: true });
38
+ }
39
+ this.pending.set(id, pending);
40
+ this.setReferenced(true);
41
+ const request = {
42
+ id,
43
+ module: moduleName,
44
+ function: functionName,
45
+ args,
46
+ kwargs: callOptions.kwargs ?? {},
47
+ executionTimeout: timeout,
48
+ };
49
+ child.stdin.write(`${JSON.stringify(request)}\n`, error => {
50
+ if (error)
51
+ this.terminate(error);
52
+ });
53
+ });
54
+ }
55
+ async close() {
56
+ this.closing = true;
57
+ this.terminate(new Error('Isolated Python worker closed'));
58
+ }
59
+ closeSync() {
60
+ this.closing = true;
61
+ this.terminate(new Error('Isolated Python worker closed'));
62
+ }
63
+ async ensureStarted() {
64
+ if (this.child && !this.child.killed)
65
+ return this.child;
66
+ this.closing = false;
67
+ this.stderrTail = '';
68
+ const pythonPath = [
69
+ ...this.options.pythonPath,
70
+ process.env['PYTHONPATH'],
71
+ ].filter(Boolean).join(process.platform === 'win32' ? ';' : ':');
72
+ const client = (0, pyfig_adapter_1.createPynectPyfig)({
73
+ projectRoot: this.options.projectRoot,
74
+ pythonPath: this.options.pythonExecutable,
75
+ env: this.options.env,
76
+ });
77
+ const child = await client.python([this.options.scriptPath], {
78
+ cwd: this.options.cwd,
79
+ env: {
80
+ ...process.env,
81
+ ...this.options.env,
82
+ PYTHONPATH: pythonPath,
83
+ PYNECT_DISPATCHER_CONFIG: JSON.stringify(this.options.dispatcher),
84
+ PYNECT_INCLUDE_TRACEBACKS: this.options.includeTracebacks ? '1' : '0',
85
+ },
86
+ stdio: ['pipe', 'pipe', 'pipe'],
87
+ windowsHide: true,
88
+ });
89
+ this.child = child;
90
+ this.lines = (0, readline_1.createInterface)({ input: child.stdout });
91
+ this.lines.on('line', line => this.handleLine(line));
92
+ child.stderr.setEncoding('utf8');
93
+ child.stderr.on('data', chunk => {
94
+ this.stderrTail = `${this.stderrTail}${String(chunk)}`.slice(-4000);
95
+ });
96
+ child.on('error', error => this.terminate(error));
97
+ child.on('exit', (code, signal) => {
98
+ if (this.child !== child)
99
+ return;
100
+ this.child = undefined;
101
+ this.lines?.close();
102
+ this.lines = undefined;
103
+ if (!this.closing && this.pending.size) {
104
+ const detail = this.stderrTail.trim();
105
+ this.rejectAll(new Error(`Isolated Python worker exited (${signal ?? code ?? 'unknown'})${detail ? `: ${detail}` : ''}`));
106
+ }
107
+ });
108
+ this.setReferenced(false);
109
+ return child;
110
+ }
111
+ handleLine(line) {
112
+ let message;
113
+ try {
114
+ message = JSON.parse(line);
115
+ }
116
+ catch {
117
+ this.terminate(new Error('Isolated Python worker returned invalid JSON'));
118
+ return;
119
+ }
120
+ if (typeof message.id !== 'number')
121
+ return;
122
+ const pending = this.pending.get(message.id);
123
+ if (!pending)
124
+ return;
125
+ this.pending.delete(message.id);
126
+ this.cleanupPending(pending);
127
+ if (!this.pending.size)
128
+ this.setReferenced(false);
129
+ if (message.ok) {
130
+ pending.resolve(message.result);
131
+ return;
132
+ }
133
+ const error = new Error(message.error?.message ?? 'Isolated Python call failed');
134
+ error.name = message.error?.type ?? 'PythonError';
135
+ if (message.error?.traceback)
136
+ error.stack = message.error.traceback;
137
+ pending.reject(error);
138
+ }
139
+ terminate(error) {
140
+ const child = this.child;
141
+ this.child = undefined;
142
+ this.lines?.close();
143
+ this.lines = undefined;
144
+ if (child && !child.killed)
145
+ child.kill();
146
+ this.rejectAll(error);
147
+ }
148
+ rejectAll(error) {
149
+ for (const pending of this.pending.values()) {
150
+ this.cleanupPending(pending);
151
+ pending.reject(error);
152
+ }
153
+ this.pending.clear();
154
+ }
155
+ setReferenced(referenced) {
156
+ if (!this.child)
157
+ return;
158
+ const method = referenced ? 'ref' : 'unref';
159
+ this.child[method]();
160
+ for (const stream of [this.child.stdin, this.child.stdout, this.child.stderr]) {
161
+ stream[method]?.();
162
+ }
163
+ }
164
+ cleanupPending(pending) {
165
+ if (pending.timer)
166
+ clearTimeout(pending.timer);
167
+ if (pending.signal && pending.onAbort) {
168
+ pending.signal.removeEventListener('abort', pending.onAbort);
169
+ }
170
+ }
171
+ abortError() {
172
+ const error = new Error('Isolated Python call was aborted');
173
+ error.name = 'AbortError';
174
+ return error;
175
+ }
176
+ }
177
+ exports.IsolatedWorker = IsolatedWorker;
178
+ //# sourceMappingURL=isolated-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isolated-worker.js","sourceRoot":"","sources":["../../src/core/isolated-worker.ts"],"names":[],"mappings":";;;AACA,uCAAgF;AAChF,wDAAyD;AA4BzD,iFAAiF;AACjF,MAAa,cAAc;IAQI;IAPrB,KAAK,CAAkC;IACvC,KAAK,CAAqB;IAC1B,MAAM,GAAG,CAAC,CAAC;IACF,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;IAClD,OAAO,GAAG,KAAK,CAAC;IAChB,UAAU,GAAG,EAAE,CAAC;IAExB,YAA6B,OAA8B;QAA9B,YAAO,GAAP,OAAO,CAAuB;IAAG,CAAC;IAE/D,KAAK,CAAC,IAAI,CACR,UAAkB,EAClB,YAAoB,EACpB,OAAkB,EAAE,EACpB,cAAmC,EAAE;QAErC,IAAI,WAAW,CAAC,MAAM,EAAE,OAAO;YAAE,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACzD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QACzC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC;QACzB,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QAC5D,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxC,MAAM,OAAO,GAAgB;gBAC3B,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,KAAU,CAAC;gBACrC,MAAM;gBACN,MAAM,EAAE,WAAW,CAAC,MAAM;aAC3B,CAAC;YACF,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBAChB,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;oBAC9B,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,iCAAiC,OAAO,IAAI,CAAC,CAAC,CAAC;gBAC1E,CAAC,EAAE,OAAO,CAAC,CAAC;YACd,CAAC;YACD,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;gBACvB,OAAO,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;gBAC1D,WAAW,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAChF,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;YAC9B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACzB,MAAM,OAAO,GAAG;gBACd,EAAE;gBACF,MAAM,EAAE,UAAU;gBAClB,QAAQ,EAAE,YAAY;gBACtB,IAAI;gBACJ,MAAM,EAAE,WAAW,CAAC,MAAM,IAAI,EAAE;gBAChC,gBAAgB,EAAE,OAAO;aAC1B,CAAC;YACF,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;gBACxD,IAAI,KAAK;oBAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,SAAS;QACP,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;IAC7D,CAAC;IAEO,KAAK,CAAC,aAAa;QACzB,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC;QACxD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,MAAM,UAAU,GAAG;YACjB,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU;YAC1B,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;SAC1B,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,IAAA,iCAAiB,EAAC;YAC/B,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW;YACrC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB;YACzC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG;SACtB,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;YAC3D,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG;YACrB,GAAG,EAAE;gBACH,GAAG,OAAO,CAAC,GAAG;gBACd,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG;gBACnB,UAAU,EAAE,UAAU;gBACtB,wBAAwB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;gBACjE,yBAAyB,EAAE,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;aACtE;YACD,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAC/B,WAAW,EAAE,IAAI;SAClB,CAAmC,CAAC;QACrC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,IAAA,0BAAe,EAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACrD,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QACjC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE;YAC9B,IAAI,CAAC,UAAU,GAAG,GAAG,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAClD,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YAChC,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK;gBAAE,OAAO;YACjC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;YACvB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;YACpB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBACvC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;gBACtC,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,CACtB,kCAAkC,MAAM,IAAI,IAAI,IAAI,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAC/F,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,UAAU,CAAC,IAAY;QAC7B,IAAI,OAKH,CAAC;QACF,IAAI,CAAC;YACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAmB,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC,CAAC;YAC1E,OAAO;QACT,CAAC;QACD,IAAI,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ;YAAE,OAAO;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI;YAAE,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAClD,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAChC,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,IAAI,6BAA6B,CAAC,CAAC;QACjF,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,IAAI,aAAa,CAAC;QAClD,IAAI,OAAO,CAAC,KAAK,EAAE,SAAS;YAAE,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC;QACpE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAEO,SAAS,CAAC,KAAY;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;QACvB,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,EAAE,CAAC;QACzC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAEO,SAAS,CAAC,KAAY;QAC5B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC5C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAC7B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAEO,aAAa,CAAC,UAAmB;QACvC,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO;QACxB,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;QAC5C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACrB,KAAK,MAAM,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7E,MAA8D,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QAC9E,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,OAAoB;QACzC,IAAI,OAAO,CAAC,KAAK;YAAE,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACtC,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAEO,UAAU;QAChB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAC5D,KAAK,CAAC,IAAI,GAAG,YAAY,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAjLD,wCAiLC"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * pynect - PyCallable
3
+ * Represents a Python callable (function, method, class constructor).
4
+ * Extends PyProxy with call metadata and convenience methods.
5
+ */
6
+ import { PyProxy } from './py-proxy';
7
+ import type { NativeAddon } from '../types/addon';
8
+ import type { PyCallOptions } from '../types/addon';
9
+ import type { PyObjectId, AttributePath, PyCallableInfo } from '../types/python';
10
+ /**
11
+ * PyCallable - wraps a Python function or method.
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * const np = await py.import('numpy');
16
+ * const zeros = await np.zeros; // PyCallable
17
+ * const arr = await zeros([3, 3], { dtype: 'float64' });
18
+ *
19
+ * // Or more concisely:
20
+ * const arr2 = await np.zeros([3, 3]);
21
+ * ```
22
+ */
23
+ export declare class PyCallable extends PyProxy {
24
+ private readonly _callableName;
25
+ constructor(objectId: PyObjectId, path: AttributePath, callableName: string, addon: NativeAddon, callTimeout?: number, executionTimeout?: number);
26
+ /** Callable name */
27
+ get callableName(): string;
28
+ /**
29
+ * Call the callable with given arguments.
30
+ * Same as using the callable directly (proxy syntax).
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * const result = await callable.invoke([1, 2, 3], { axis: 0 });
35
+ * // equivalent to: await callable([1, 2, 3], { axis: 0 })
36
+ * ```
37
+ */
38
+ invoke(...args: unknown[]): Promise<unknown>;
39
+ /** Invoke with cancellation or per-call timeout overrides. */
40
+ invokeWithOptions(options: PyCallOptions, ...args: unknown[]): Promise<unknown>;
41
+ /**
42
+ * Call with explicit positional args and keyword args.
43
+ *
44
+ * @example
45
+ * ```typescript
46
+ * const result = await callable.call([1, 2, 3], { axis: 0, keepdims: true });
47
+ * ```
48
+ */
49
+ call(args: unknown[], kwargs?: Record<string, unknown>, options?: PyCallOptions): Promise<unknown>;
50
+ /**
51
+ * Partially apply arguments (like functools.partial in Python).
52
+ *
53
+ * @example
54
+ * ```typescript
55
+ * const readCsvUtf8 = await pd.read_csv.partial({ encoding: 'utf-8' });
56
+ * const df = await readCsvUtf8('data.csv');
57
+ * ```
58
+ */
59
+ partial(...partialArgs: unknown[]): PyCallable;
60
+ /**
61
+ * Get introspection information about this callable.
62
+ */
63
+ getInfo(): Promise<PyCallableInfo | null>;
64
+ static fromProxy(proxy: PyProxy, name: string): PyCallable;
65
+ toString(): string;
66
+ }
67
+ //# sourceMappingURL=py-callable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"py-callable.d.ts","sourceRoot":"","sources":["../../src/core/py-callable.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAoB,MAAM,YAAY,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjF;;;;;;;;;;;;GAYG;AACH,qBAAa,UAAW,SAAQ,OAAO;IACrC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;gBAGrC,QAAQ,EAAE,UAAU,EACpB,IAAI,EAAE,aAAa,EACnB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,WAAW,EAClB,WAAW,CAAC,EAAE,MAAM,EACpB,gBAAgB,CAAC,EAAE,MAAM;IAY3B,oBAAoB;IACpB,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED;;;;;;;;;OASG;IACG,MAAM,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAIlD,8DAA8D;IACxD,iBAAiB,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAIrF;;;;;;;OAOG;IACG,IAAI,CACR,IAAI,EAAE,OAAO,EAAE,EACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,OAAO,CAAC;IAInB;;;;;;;;OAQG;IACH,OAAO,CAAC,GAAG,WAAW,EAAE,OAAO,EAAE,GAAG,UAAU;IAwB9C;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAI/C,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU;IAYjD,QAAQ,IAAI,MAAM;CAG5B"}
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ /**
3
+ * pynect - PyCallable
4
+ * Represents a Python callable (function, method, class constructor).
5
+ * Extends PyProxy with call metadata and convenience methods.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.PyCallable = void 0;
9
+ const py_proxy_1 = require("./py-proxy");
10
+ /**
11
+ * PyCallable - wraps a Python function or method.
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * const np = await py.import('numpy');
16
+ * const zeros = await np.zeros; // PyCallable
17
+ * const arr = await zeros([3, 3], { dtype: 'float64' });
18
+ *
19
+ * // Or more concisely:
20
+ * const arr2 = await np.zeros([3, 3]);
21
+ * ```
22
+ */
23
+ class PyCallable extends py_proxy_1.PyProxy {
24
+ _callableName;
25
+ constructor(objectId, path, callableName, addon, callTimeout, executionTimeout) {
26
+ super({
27
+ objectId,
28
+ path,
29
+ addon,
30
+ callTimeout,
31
+ executionTimeout,
32
+ });
33
+ this._callableName = callableName;
34
+ }
35
+ /** Callable name */
36
+ get callableName() {
37
+ return this._callableName;
38
+ }
39
+ /**
40
+ * Call the callable with given arguments.
41
+ * Same as using the callable directly (proxy syntax).
42
+ *
43
+ * @example
44
+ * ```typescript
45
+ * const result = await callable.invoke([1, 2, 3], { axis: 0 });
46
+ * // equivalent to: await callable([1, 2, 3], { axis: 0 })
47
+ * ```
48
+ */
49
+ async invoke(...args) {
50
+ return this(...args);
51
+ }
52
+ /** Invoke with cancellation or per-call timeout overrides. */
53
+ async invokeWithOptions(options, ...args) {
54
+ return this.withOptions(options, ...args);
55
+ }
56
+ /**
57
+ * Call with explicit positional args and keyword args.
58
+ *
59
+ * @example
60
+ * ```typescript
61
+ * const result = await callable.call([1, 2, 3], { axis: 0, keepdims: true });
62
+ * ```
63
+ */
64
+ async call(args, kwargs, options = {}) {
65
+ return this.callWithOptions(args, options, kwargs);
66
+ }
67
+ /**
68
+ * Partially apply arguments (like functools.partial in Python).
69
+ *
70
+ * @example
71
+ * ```typescript
72
+ * const readCsvUtf8 = await pd.read_csv.partial({ encoding: 'utf-8' });
73
+ * const df = await readCsvUtf8('data.csv');
74
+ * ```
75
+ */
76
+ partial(...partialArgs) {
77
+ const internal = this[py_proxy_1.PYPROXY_INTERNAL];
78
+ const callableName = `${this._callableName}(partial)`;
79
+ const wrapper = new PyCallable(internal.objectId, internal.path, callableName, internal.addon, internal.callTimeout, internal.executionTimeout);
80
+ // Override: always prepend partialArgs (use arrow to capture outer `this` lexically)
81
+ const callSelf = (...a) => this(...a);
82
+ const overrideProxy = new Proxy(wrapper, {
83
+ apply(_target, _thisArg, args) {
84
+ return callSelf(...partialArgs, ...args);
85
+ },
86
+ });
87
+ return overrideProxy;
88
+ }
89
+ /**
90
+ * Get introspection information about this callable.
91
+ */
92
+ async getInfo() {
93
+ return null;
94
+ }
95
+ static fromProxy(proxy, name) {
96
+ const internal = proxy[py_proxy_1.PYPROXY_INTERNAL];
97
+ return new PyCallable(internal.objectId, internal.path, name, internal.addon, internal.callTimeout, internal.executionTimeout);
98
+ }
99
+ toString() {
100
+ return `[PyCallable '${this._callableName}' id=${this[py_proxy_1.PYPROXY_INTERNAL].objectId}]`;
101
+ }
102
+ }
103
+ exports.PyCallable = PyCallable;
104
+ //# sourceMappingURL=py-callable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"py-callable.js","sourceRoot":"","sources":["../../src/core/py-callable.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAEH,yCAAuD;AAKvD;;;;;;;;;;;;GAYG;AACH,MAAa,UAAW,SAAQ,kBAAO;IACpB,aAAa,CAAS;IAEvC,YACE,QAAoB,EACpB,IAAmB,EACnB,YAAoB,EACpB,KAAkB,EAClB,WAAoB,EACpB,gBAAyB;QAEzB,KAAK,CAAC;YACJ,QAAQ;YACR,IAAI;YACJ,KAAK;YACL,WAAW;YACX,gBAAgB;SACjB,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;IACpC,CAAC;IAED,oBAAoB;IACpB,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,MAAM,CAAC,GAAG,IAAe;QAC7B,OAAQ,IAAgD,CAAC,GAAG,IAAI,CAAC,CAAC;IACpE,CAAC;IAED,8DAA8D;IAC9D,KAAK,CAAC,iBAAiB,CAAC,OAAsB,EAAE,GAAG,IAAe;QAChE,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,IAAI,CACR,IAAe,EACf,MAAgC,EAChC,UAAyB,EAAE;QAE3B,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IAED;;;;;;;;OAQG;IACH,OAAO,CAAC,GAAG,WAAsB;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,2BAAgB,CAAC,CAAC;QACxC,MAAM,YAAY,GAAG,GAAG,IAAI,CAAC,aAAa,WAAW,CAAC;QACtD,MAAM,OAAO,GAAG,IAAI,UAAU,CAC5B,QAAQ,CAAC,QAAQ,EACjB,QAAQ,CAAC,IAAI,EACb,YAAY,EACZ,QAAQ,CAAC,KAAK,EACd,QAAQ,CAAC,WAAW,EACpB,QAAQ,CAAC,gBAAgB,CAC1B,CAAC;QAEF,qFAAqF;QACrF,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAY,EAAE,EAAE,CAClC,IAAgD,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1D,MAAM,aAAa,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE;YACvC,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAe;gBACtC,OAAO,QAAQ,CAAC,GAAG,WAAW,EAAE,GAAG,IAAI,CAAC,CAAC;YAC3C,CAAC;SACF,CAAC,CAAC;QAEH,OAAO,aAA2B,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,KAAc,EAAE,IAAY;QAC3C,MAAM,QAAQ,GAAG,KAAK,CAAC,2BAAgB,CAAC,CAAC;QACzC,OAAO,IAAI,UAAU,CACnB,QAAQ,CAAC,QAAQ,EACjB,QAAQ,CAAC,IAAI,EACb,IAAI,EACJ,QAAQ,CAAC,KAAK,EACd,QAAQ,CAAC,WAAW,EACpB,QAAQ,CAAC,gBAAgB,CAC1B,CAAC;IACJ,CAAC;IAEQ,QAAQ;QACf,OAAO,gBAAgB,IAAI,CAAC,aAAa,QAAQ,IAAI,CAAC,2BAAgB,CAAC,CAAC,QAAQ,GAAG,CAAC;IACtF,CAAC;CACF;AApHD,gCAoHC"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * pynect - PyContext
3
+ * Manages an isolated Python execution context (namespace).
4
+ * Useful for running code in isolation without polluting the global namespace.
5
+ */
6
+ import type { NativeAddon } from '../types/addon';
7
+ import { PyProxy } from './py-proxy';
8
+ /**
9
+ * PyContext - an isolated Python execution environment.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * const ctx = await PyContext.create(addon);
14
+ *
15
+ * // Run code in isolation
16
+ * await ctx.exec('x = 42');
17
+ * await ctx.exec('y = x * 2');
18
+ * const result = await ctx.eval('x + y');
19
+ * console.log(result); // 126
20
+ *
21
+ * // Import into context
22
+ * const pd = await ctx.import('pandas');
23
+ * await ctx.exec("df = pd.DataFrame({'a': [1,2,3]})");
24
+ * const df = await ctx.get('df');
25
+ * ```
26
+ */
27
+ export declare class PyContext {
28
+ private readonly _addon;
29
+ private readonly _namespacePyId;
30
+ private _variables;
31
+ private _destroyed;
32
+ private constructor();
33
+ /**
34
+ * Create a new isolated Python context.
35
+ */
36
+ static create(addon: NativeAddon): Promise<PyContext>;
37
+ /**
38
+ * Execute Python code in this context.
39
+ */
40
+ exec(code: string): Promise<void>;
41
+ /**
42
+ * Evaluate a Python expression in this context and return the result.
43
+ */
44
+ eval(expression: string): Promise<unknown>;
45
+ /**
46
+ * Import a module into this context.
47
+ */
48
+ import(moduleName: string): Promise<PyProxy>;
49
+ /**
50
+ * Get a variable from the context namespace.
51
+ */
52
+ get(name: string): Promise<unknown>;
53
+ /**
54
+ * Set a variable in the context namespace.
55
+ */
56
+ set(name: string, value: unknown): Promise<void>;
57
+ /**
58
+ * Check if a name is defined in the context.
59
+ */
60
+ has(name: string): Promise<boolean>;
61
+ /**
62
+ * Delete a variable from the context.
63
+ */
64
+ delete(name: string): Promise<void>;
65
+ /**
66
+ * Clear all variables in the context.
67
+ */
68
+ clear(): Promise<void>;
69
+ /**
70
+ * Destroy the context and free resources.
71
+ */
72
+ destroy(): Promise<void>;
73
+ private _ensureNotDestroyed;
74
+ [Symbol.asyncDispose](): Promise<void>;
75
+ }
76
+ //# sourceMappingURL=py-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"py-context.d.ts","sourceRoot":"","sources":["../../src/core/py-context.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,OAAO,EAAE,OAAO,EAAoB,MAAM,YAAY,CAAC;AAMvD;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAa;IAC5C,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,UAAU,CAAS;IAE3B,OAAO;IAMP;;OAEG;WACU,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC;IA2B3D;;OAEG;IACG,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBvC;;OAEG;IACG,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAyChD;;OAEG;IACG,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA+BlD;;OAEG;IACG,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmDzC;;OAEG;IACG,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBtD;;OAEG;IACG,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUzC;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOzC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ9B,OAAO,CAAC,mBAAmB;IAM3B,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;CAGvC"}