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.
- package/LICENSE +1 -1
- package/README.md +503 -2
- package/SECURITY.md +34 -0
- package/binding.gyp +67 -0
- package/dist/cli/codegen.d.ts +3 -0
- package/dist/cli/codegen.d.ts.map +1 -0
- package/dist/cli/codegen.js +543 -0
- package/dist/cli/codegen.js.map +1 -0
- package/dist/cli/sync.d.ts +3 -0
- package/dist/cli/sync.d.ts.map +1 -0
- package/dist/cli/sync.js +47 -0
- package/dist/cli/sync.js.map +1 -0
- package/dist/config/project.d.ts +113 -0
- package/dist/config/project.d.ts.map +1 -0
- package/dist/config/project.js +344 -0
- package/dist/config/project.js.map +1 -0
- package/dist/core/isolated-worker.d.ts +39 -0
- package/dist/core/isolated-worker.d.ts.map +1 -0
- package/dist/core/isolated-worker.js +178 -0
- package/dist/core/isolated-worker.js.map +1 -0
- package/dist/core/py-callable.d.ts +67 -0
- package/dist/core/py-callable.d.ts.map +1 -0
- package/dist/core/py-callable.js +104 -0
- package/dist/core/py-callable.js.map +1 -0
- package/dist/core/py-context.d.ts +76 -0
- package/dist/core/py-context.d.ts.map +1 -0
- package/dist/core/py-context.js +239 -0
- package/dist/core/py-context.js.map +1 -0
- package/dist/core/py-iterator.d.ts +84 -0
- package/dist/core/py-iterator.d.ts.map +1 -0
- package/dist/core/py-iterator.js +243 -0
- package/dist/core/py-iterator.js.map +1 -0
- package/dist/core/py-module.d.ts +53 -0
- package/dist/core/py-module.d.ts.map +1 -0
- package/dist/core/py-module.js +162 -0
- package/dist/core/py-module.js.map +1 -0
- package/dist/core/py-proxy.d.ts +75 -0
- package/dist/core/py-proxy.d.ts.map +1 -0
- package/dist/core/py-proxy.js +563 -0
- package/dist/core/py-proxy.js.map +1 -0
- package/dist/core/py-runtime.d.ts +113 -0
- package/dist/core/py-runtime.d.ts.map +1 -0
- package/dist/core/py-runtime.js +528 -0
- package/dist/core/py-runtime.js.map +1 -0
- package/dist/env/executables.d.ts +3 -0
- package/dist/env/executables.d.ts.map +1 -0
- package/dist/env/executables.js +14 -0
- package/dist/env/executables.js.map +1 -0
- package/dist/env/package-installer.d.ts +232 -0
- package/dist/env/package-installer.d.ts.map +1 -0
- package/dist/env/package-installer.js +615 -0
- package/dist/env/package-installer.js.map +1 -0
- package/dist/env/project-environment.d.ts +64 -0
- package/dist/env/project-environment.d.ts.map +1 -0
- package/dist/env/project-environment.js +388 -0
- package/dist/env/project-environment.js.map +1 -0
- package/dist/env/pyfig-adapter.d.ts +38 -0
- package/dist/env/pyfig-adapter.d.ts.map +1 -0
- package/dist/env/pyfig-adapter.js +10 -0
- package/dist/env/pyfig-adapter.js.map +1 -0
- package/dist/env/python-detector.d.ts +48 -0
- package/dist/env/python-detector.d.ts.map +1 -0
- package/dist/env/python-detector.js +182 -0
- package/dist/env/python-detector.js.map +1 -0
- package/dist/env/python-provisioner.d.ts +16 -0
- package/dist/env/python-provisioner.d.ts.map +1 -0
- package/dist/env/python-provisioner.js +42 -0
- package/dist/env/python-provisioner.js.map +1 -0
- package/dist/env/venv-manager.d.ts +56 -0
- package/dist/env/venv-manager.d.ts.map +1 -0
- package/dist/env/venv-manager.js +160 -0
- package/dist/env/venv-manager.js.map +1 -0
- package/dist/index.d.ts +182 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +394 -0
- package/dist/index.js.map +1 -0
- package/dist/native/native-addon-loader.d.ts +13 -0
- package/dist/native/native-addon-loader.d.ts.map +1 -0
- package/dist/native/native-addon-loader.js +171 -0
- package/dist/native/native-addon-loader.js.map +1 -0
- package/dist/plugins/builtin/numpy-plugin.d.ts +17 -0
- package/dist/plugins/builtin/numpy-plugin.d.ts.map +1 -0
- package/dist/plugins/builtin/numpy-plugin.js +41 -0
- package/dist/plugins/builtin/numpy-plugin.js.map +1 -0
- package/dist/plugins/builtin/pandas-plugin.d.ts +19 -0
- package/dist/plugins/builtin/pandas-plugin.d.ts.map +1 -0
- package/dist/plugins/builtin/pandas-plugin.js +57 -0
- package/dist/plugins/builtin/pandas-plugin.js.map +1 -0
- package/dist/plugins/builtin/torch-plugin.d.ts +23 -0
- package/dist/plugins/builtin/torch-plugin.d.ts.map +1 -0
- package/dist/plugins/builtin/torch-plugin.js +50 -0
- package/dist/plugins/builtin/torch-plugin.js.map +1 -0
- package/dist/plugins/index.d.ts +7 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +12 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/plugin-manager.d.ts +26 -0
- package/dist/plugins/plugin-manager.d.ts.map +1 -0
- package/dist/plugins/plugin-manager.js +174 -0
- package/dist/plugins/plugin-manager.js.map +1 -0
- package/dist/plugins/plugin.interface.d.ts +41 -0
- package/dist/plugins/plugin.interface.d.ts.map +1 -0
- package/dist/plugins/plugin.interface.js +12 -0
- package/dist/plugins/plugin.interface.js.map +1 -0
- package/dist/serialization/data-frame-bridge.d.ts +141 -0
- package/dist/serialization/data-frame-bridge.d.ts.map +1 -0
- package/dist/serialization/data-frame-bridge.js +355 -0
- package/dist/serialization/data-frame-bridge.js.map +1 -0
- package/dist/serialization/msg-pack-serializer.d.ts +45 -0
- package/dist/serialization/msg-pack-serializer.d.ts.map +1 -0
- package/dist/serialization/msg-pack-serializer.js +242 -0
- package/dist/serialization/msg-pack-serializer.js.map +1 -0
- package/dist/serialization/numpy-bridge.d.ts +96 -0
- package/dist/serialization/numpy-bridge.d.ts.map +1 -0
- package/dist/serialization/numpy-bridge.js +323 -0
- package/dist/serialization/numpy-bridge.js.map +1 -0
- package/dist/serialization/serializer.d.ts +78 -0
- package/dist/serialization/serializer.d.ts.map +1 -0
- package/dist/serialization/serializer.js +281 -0
- package/dist/serialization/serializer.js.map +1 -0
- package/dist/types/addon.d.ts +131 -0
- package/dist/types/addon.d.ts.map +1 -0
- package/dist/types/addon.js +32 -0
- package/dist/types/addon.js.map +1 -0
- package/dist/types/config.d.ts +236 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +61 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +12 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/python.d.ts +235 -0
- package/dist/types/python.d.ts.map +1 -0
- package/dist/types/python.js +7 -0
- package/dist/types/python.js.map +1 -0
- package/dist/utils/error-translator.d.ts +83 -0
- package/dist/utils/error-translator.d.ts.map +1 -0
- package/dist/utils/error-translator.js +210 -0
- package/dist/utils/error-translator.js.map +1 -0
- package/dist/utils/locking.d.ts +3 -0
- package/dist/utils/locking.d.ts.map +1 -0
- package/dist/utils/locking.js +10 -0
- package/dist/utils/locking.js.map +1 -0
- package/dist/utils/logger.d.ts +27 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +115 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/memory-monitor.d.ts +43 -0
- package/dist/utils/memory-monitor.d.ts.map +1 -0
- package/dist/utils/memory-monitor.js +143 -0
- package/dist/utils/memory-monitor.js.map +1 -0
- package/package.json +93 -17
- package/prebuilds/darwin-arm64/pynect-prebuild.json +8 -0
- package/prebuilds/darwin-arm64/pynect_addon.node +0 -0
- package/prebuilds/darwin-x64/pynect-prebuild.json +8 -0
- package/prebuilds/darwin-x64/pynect_addon.node +0 -0
- package/prebuilds/linux-arm64/pynect-prebuild.json +9 -0
- package/prebuilds/linux-arm64/pynect_addon.node +0 -0
- package/prebuilds/linux-x64/pynect-prebuild.json +9 -0
- package/prebuilds/linux-x64/pynect_addon.node +0 -0
- package/prebuilds/win32-arm64/pynect-prebuild.json +8 -0
- package/prebuilds/win32-arm64/pynect_addon.node +0 -0
- package/prebuilds/win32-x64/pynect-prebuild.json +8 -0
- package/prebuilds/win32-x64/pynect_addon.node +0 -0
- package/python/ast_inspector.py +248 -0
- package/python/error_handler.py +432 -0
- package/python/isolated_worker.py +94 -0
- package/python/pynect_dispatcher.py +382 -0
- package/python/pynect_runtime.py +574 -0
- package/python/serializer.py +373 -0
- package/python/type_inspector.py +315 -0
- package/scripts/build-native.js +50 -0
- package/scripts/cli.js +21 -0
- package/scripts/ensure-native.js +85 -0
- package/scripts/postinstall.js +40 -0
- package/scripts/pyfig.js +128 -0
- package/scripts/python-provisioner.js +23 -0
- package/scripts/smoke-python-boundary.js +103 -0
- package/src/native/gil_guard.cpp +25 -0
- package/src/native/gil_guard.h +174 -0
- package/src/native/native-addon-loader.ts +218 -0
- package/src/native/pynect_addon.cpp +942 -0
- package/src/native/python_bridge.cpp +904 -0
- package/src/native/python_bridge.h +263 -0
- package/src/native/thread_pool.cpp +375 -0
- package/src/native/thread_pool.h +185 -0
- package/src/native/type_converter.cpp +906 -0
- package/src/native/type_converter.h +271 -0
- package/index.d.ts +0 -3
- package/index.js +0 -3
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.loadOrBuildNativeAddon = loadOrBuildNativeAddon;
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const fs_1 = __importDefault(require("fs"));
|
|
9
|
+
const crypto_1 = require("crypto");
|
|
10
|
+
const child_process_1 = require("child_process");
|
|
11
|
+
/**
|
|
12
|
+
* Load a compatible packaged prebuild or exact local addon, compiling through
|
|
13
|
+
* the active JavaScript runtime only when neither can be used.
|
|
14
|
+
*/
|
|
15
|
+
function loadOrBuildNativeAddon(options) {
|
|
16
|
+
let initialError = new Error('Native rebuild explicitly requested.');
|
|
17
|
+
if (process.env['PYNECT_FORCE_BUILD'] !== '1') {
|
|
18
|
+
try {
|
|
19
|
+
return loadMatchingPrebuild(options);
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
initialError = error;
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
return loadMatchingLocalAddon(options);
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
initialError = new AggregateError([initialError, error], 'No compatible native addon loaded.');
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const packageRoot = path_1.default.resolve(__dirname, '..', '..');
|
|
32
|
+
const script = path_1.default.join(packageRoot, 'scripts', 'ensure-native.js');
|
|
33
|
+
const result = (0, child_process_1.spawnSync)(process.execPath, [script], {
|
|
34
|
+
cwd: packageRoot,
|
|
35
|
+
env: {
|
|
36
|
+
...process.env,
|
|
37
|
+
PYNECT_PROJECT_ROOT: options.projectRoot,
|
|
38
|
+
PYNECT_PYTHON: options.pythonExecutable,
|
|
39
|
+
},
|
|
40
|
+
stdio: 'inherit',
|
|
41
|
+
windowsHide: true,
|
|
42
|
+
});
|
|
43
|
+
if (result.error) {
|
|
44
|
+
throw new Error(`Could not launch the native builder with ${process.execPath}: ${result.error.message}`, { cause: initialError });
|
|
45
|
+
}
|
|
46
|
+
if (result.status !== 0) {
|
|
47
|
+
throw new Error(`Pynect could not load or build its native addon with ${process.execPath}. ` +
|
|
48
|
+
'Install a C++ toolchain or provide a compatible prebuilt addon.', { cause: initialError });
|
|
49
|
+
}
|
|
50
|
+
try {
|
|
51
|
+
return loadMatchingLocalAddon(options);
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
throw new Error('Pynect built the native addon, but the active runtime could not load it.', {
|
|
55
|
+
cause: error,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function loadMatchingPrebuild(options) {
|
|
60
|
+
const packageRoot = path_1.default.resolve(__dirname, '..', '..');
|
|
61
|
+
const directory = path_1.default.join(packageRoot, 'prebuilds', `${process.platform}-${process.arch}`);
|
|
62
|
+
const metadataPath = path_1.default.join(directory, 'pynect-prebuild.json');
|
|
63
|
+
let metadata;
|
|
64
|
+
try {
|
|
65
|
+
metadata = JSON.parse(fs_1.default.readFileSync(metadataPath, 'utf8'));
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
throw new Error(`Native prebuild metadata is unavailable at ${metadataPath}.`, { cause: error });
|
|
69
|
+
}
|
|
70
|
+
const pythonMajorMinor = options.pythonVersion.split('.').slice(0, 2).join('.');
|
|
71
|
+
if (metadata.schemaVersion !== 1 ||
|
|
72
|
+
metadata.platform !== process.platform ||
|
|
73
|
+
metadata.architecture !== process.arch ||
|
|
74
|
+
metadata.pythonMajorMinor !== pythonMajorMinor ||
|
|
75
|
+
metadata.napi > Number(process.versions.napi ?? 0)) {
|
|
76
|
+
throw new Error(`Native prebuild does not match ${process.platform}-${process.arch}, ` +
|
|
77
|
+
`Python ${pythonMajorMinor}, N-API ${process.versions.napi ?? 'unknown'}.`);
|
|
78
|
+
}
|
|
79
|
+
if (process.platform === 'linux' && metadata.glibc) {
|
|
80
|
+
const report = process.report?.getReport();
|
|
81
|
+
const runtimeGlibc = report?.header?.glibcVersionRuntime;
|
|
82
|
+
if (!runtimeGlibc || compareVersions(runtimeGlibc, metadata.glibc) < 0) {
|
|
83
|
+
throw new Error(`Native prebuild requires glibc ${metadata.glibc}; runtime has ${runtimeGlibc ?? 'unknown'}.`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
const packagedAddon = path_1.default.join(directory, 'pynect_addon.node');
|
|
87
|
+
const addon = process.platform === 'win32'
|
|
88
|
+
? packagedAddon
|
|
89
|
+
: materializePortablePrebuild(packagedAddon, metadata, options);
|
|
90
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
91
|
+
return require(addon);
|
|
92
|
+
}
|
|
93
|
+
function materializePortablePrebuild(packagedAddon, metadata, options) {
|
|
94
|
+
const identity = (0, crypto_1.createHash)('sha256')
|
|
95
|
+
.update(path_1.default.resolve(options.pythonLibrary))
|
|
96
|
+
.digest('hex')
|
|
97
|
+
.slice(0, 12);
|
|
98
|
+
const directory = path_1.default.join(options.projectRoot, 'node_modules', '.pynect', 'native', `${process.platform}-${process.arch}-python${metadata.pythonMajorMinor}-${identity}`);
|
|
99
|
+
const addon = path_1.default.join(directory, 'pynect_addon.node');
|
|
100
|
+
const library = path_1.default.join(directory, metadata.pythonLibraryName);
|
|
101
|
+
fs_1.default.mkdirSync(directory, { recursive: true });
|
|
102
|
+
publishFile(packagedAddon, addon);
|
|
103
|
+
publishSymlink(options.pythonLibrary, library);
|
|
104
|
+
return addon;
|
|
105
|
+
}
|
|
106
|
+
function publishFile(source, destination) {
|
|
107
|
+
if (fs_1.default.existsSync(destination))
|
|
108
|
+
return;
|
|
109
|
+
const temporary = `${destination}.${process.pid}.tmp`;
|
|
110
|
+
try {
|
|
111
|
+
fs_1.default.copyFileSync(source, temporary, fs_1.default.constants.COPYFILE_EXCL);
|
|
112
|
+
fs_1.default.renameSync(temporary, destination);
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
if (!fs_1.default.existsSync(destination))
|
|
116
|
+
throw error;
|
|
117
|
+
}
|
|
118
|
+
finally {
|
|
119
|
+
fs_1.default.rmSync(temporary, { force: true });
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
function publishSymlink(source, destination) {
|
|
123
|
+
if (fs_1.default.existsSync(destination))
|
|
124
|
+
return;
|
|
125
|
+
const temporary = `${destination}.${process.pid}.tmp`;
|
|
126
|
+
try {
|
|
127
|
+
fs_1.default.symlinkSync(path_1.default.resolve(source), temporary, 'file');
|
|
128
|
+
fs_1.default.renameSync(temporary, destination);
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
if (!fs_1.default.existsSync(destination))
|
|
132
|
+
throw error;
|
|
133
|
+
}
|
|
134
|
+
finally {
|
|
135
|
+
fs_1.default.rmSync(temporary, { force: true });
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
function loadMatchingLocalAddon(options) {
|
|
139
|
+
const packageRoot = path_1.default.resolve(__dirname, '..', '..');
|
|
140
|
+
const metadataPath = path_1.default.join(packageRoot, 'build', 'pynect-python.json');
|
|
141
|
+
let metadata;
|
|
142
|
+
try {
|
|
143
|
+
metadata = JSON.parse(fs_1.default.readFileSync(metadataPath, 'utf8'));
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
throw new Error(`Native build metadata is unavailable at ${metadataPath}.`, { cause: error });
|
|
147
|
+
}
|
|
148
|
+
if (metadata.schemaVersion !== 1 ||
|
|
149
|
+
normalizePath(metadata.pythonExecutable) !== normalizePath(options.pythonExecutable)) {
|
|
150
|
+
throw new Error(`Native addon Python ${metadata.pythonExecutable} does not match selected Python ` +
|
|
151
|
+
`${options.pythonExecutable}.`);
|
|
152
|
+
}
|
|
153
|
+
const addonPath = path_1.default.join(packageRoot, 'build', metadata.buildType === 'Debug' ? 'Debug' : 'Release', 'pynect_addon.node');
|
|
154
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
155
|
+
return require(addonPath);
|
|
156
|
+
}
|
|
157
|
+
function normalizePath(value) {
|
|
158
|
+
const resolved = path_1.default.resolve(value);
|
|
159
|
+
return process.platform === 'win32' ? resolved.toLowerCase() : resolved;
|
|
160
|
+
}
|
|
161
|
+
function compareVersions(left, right) {
|
|
162
|
+
const leftParts = left.split('.').map(Number);
|
|
163
|
+
const rightParts = right.split('.').map(Number);
|
|
164
|
+
for (let index = 0; index < Math.max(leftParts.length, rightParts.length); index += 1) {
|
|
165
|
+
const difference = (leftParts[index] ?? 0) - (rightParts[index] ?? 0);
|
|
166
|
+
if (difference !== 0)
|
|
167
|
+
return difference;
|
|
168
|
+
}
|
|
169
|
+
return 0;
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=native-addon-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-addon-loader.js","sourceRoot":"","sources":["../../src/native/native-addon-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pynect - NumpyPlugin (built-in)
|
|
3
|
+
* Routes ndarray wire objects through NumpyBridge.
|
|
4
|
+
*/
|
|
5
|
+
import type { PynectPlugin, PluginInitContext } from '../plugin.interface';
|
|
6
|
+
import type { SerializedValue, NumPyArrayResult } from '../../types/python';
|
|
7
|
+
export declare class NumpyPlugin implements PynectPlugin {
|
|
8
|
+
readonly name = "numpy";
|
|
9
|
+
readonly version = "1.0.0";
|
|
10
|
+
readonly description = "Enhanced NumPy ndarray -> TypedArray mapping";
|
|
11
|
+
readonly supportedModules: readonly ["numpy", "np"];
|
|
12
|
+
readonly handledTypes: readonly ["ndarray", "matrix", "MaskedArray"];
|
|
13
|
+
onInit(ctx: PluginInitContext): void;
|
|
14
|
+
transformResult(raw: SerializedValue, typeHint: string): NumPyArrayResult | null;
|
|
15
|
+
private _handle;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=numpy-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"numpy-plugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/builtin/numpy-plugin.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAO5E,qBAAa,WAAY,YAAW,YAAY;IAC9C,QAAQ,CAAC,IAAI,WAAuB;IACpC,QAAQ,CAAC,OAAO,WAAoB;IACpC,QAAQ,CAAC,WAAW,kDAAuD;IAC3E,QAAQ,CAAC,gBAAgB,2BAA4B;IACrD,QAAQ,CAAC,YAAY,gDAAqD;IAE1E,MAAM,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI;IAKpC,eAAe,CAAC,GAAG,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAKhF,OAAO,CAAC,OAAO;CAIhB"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* pynect - NumpyPlugin (built-in)
|
|
4
|
+
* Routes ndarray wire objects through NumpyBridge.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.NumpyPlugin = void 0;
|
|
8
|
+
const numpy_bridge_1 = require("../../serialization/numpy-bridge");
|
|
9
|
+
const logger_1 = require("../../utils/logger");
|
|
10
|
+
const logger = new logger_1.Logger('NumpyPlugin');
|
|
11
|
+
const bridge = new numpy_bridge_1.NumpyBridge();
|
|
12
|
+
class NumpyPlugin {
|
|
13
|
+
name = 'numpy';
|
|
14
|
+
version = '1.0.0';
|
|
15
|
+
description = 'Enhanced NumPy ndarray -> TypedArray mapping';
|
|
16
|
+
supportedModules = ['numpy', 'np'];
|
|
17
|
+
handledTypes = ['ndarray', 'matrix', 'MaskedArray'];
|
|
18
|
+
onInit(ctx) {
|
|
19
|
+
for (const t of this.handledTypes) {
|
|
20
|
+
ctx.registerTypeHandler(t, this._handle.bind(this));
|
|
21
|
+
}
|
|
22
|
+
logger.debug('NumpyPlugin initialised');
|
|
23
|
+
}
|
|
24
|
+
transformResult(raw, typeHint) {
|
|
25
|
+
if (this.handledTypes.includes(typeHint)) {
|
|
26
|
+
return this._handle(raw, typeHint, {});
|
|
27
|
+
}
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
_handle(raw, _type, _meta) {
|
|
31
|
+
try {
|
|
32
|
+
return bridge.deserialize(raw);
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
logger.warn(`ndarray deserialization error: ${err}`);
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.NumpyPlugin = NumpyPlugin;
|
|
41
|
+
//# sourceMappingURL=numpy-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"numpy-plugin.js","sourceRoot":"","sources":["../../../src/plugins/builtin/numpy-plugin.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAIH,mEAA+D;AAC/D,+CAA4C;AAE5C,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,aAAa,CAAC,CAAC;AACzC,MAAM,MAAM,GAAG,IAAI,0BAAW,EAAE,CAAC;AAEjC,MAAa,WAAW;IACb,IAAI,GAAe,OAAO,CAAC;IAC3B,OAAO,GAAY,OAAO,CAAC;IAC3B,WAAW,GAAQ,8CAA8C,CAAC;IAClE,gBAAgB,GAAG,CAAC,OAAO,EAAE,IAAI,CAAU,CAAC;IAC5C,YAAY,GAAO,CAAC,SAAS,EAAE,QAAQ,EAAE,aAAa,CAAU,CAAC;IAE1E,MAAM,CAAC,GAAsB;QAC3B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAAA,GAAG,CAAC,mBAAmB,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAAA,CAAC;QACzF,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC1C,CAAC;IAED,eAAe,CAAC,GAAoB,EAAE,QAAgB;QACpD,IAAK,IAAI,CAAC,YAAkC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QAAA,CAAC;QAC1G,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,OAAO,CAAC,GAAoB,EAAE,KAAc,EAAE,KAA+B;QACnF,IAAI,CAAC;YAAC,OAAO,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC;QACvC,OAAO,GAAG,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,kCAAkC,GAAG,EAAE,CAAC,CAAC;YAAC,OAAO,IAAI,CAAC;QAAC,CAAC;IACpF,CAAC;CACF;AArBD,kCAqBC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pynect - PandasPlugin (built-in)
|
|
3
|
+
* Intercepts DataFrame/Series wire objects and routes through DataFrameBridge.
|
|
4
|
+
*/
|
|
5
|
+
import type { PynectPlugin, PluginInitContext } from '../plugin.interface';
|
|
6
|
+
import type { SerializedValue, DataFrameResult, SeriesResult } from '../../types/python';
|
|
7
|
+
export declare class PandasPlugin implements PynectPlugin {
|
|
8
|
+
readonly name = "pandas";
|
|
9
|
+
readonly version = "1.0.0";
|
|
10
|
+
readonly description = "Enhanced pandas DataFrame and Series support";
|
|
11
|
+
readonly supportedModules: readonly ["pandas", "pd"];
|
|
12
|
+
readonly handledTypes: readonly ["DataFrame", "Series", "DataFrameGroupBy", "SeriesGroupBy"];
|
|
13
|
+
onInit(ctx: PluginInitContext): void;
|
|
14
|
+
onModuleImported(moduleName: string): void;
|
|
15
|
+
transformResult(raw: SerializedValue, typeHint: string): DataFrameResult | SeriesResult | null;
|
|
16
|
+
private _handleDF;
|
|
17
|
+
private _handleSeries;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=pandas-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pandas-plugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/builtin/pandas-plugin.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAOzF,qBAAa,YAAa,YAAW,YAAY;IAC/C,QAAQ,CAAC,IAAI,YAAwB;IACrC,QAAQ,CAAC,OAAO,WAAoB;IACpC,QAAQ,CAAC,WAAW,kDAAuD;IAC3E,QAAQ,CAAC,gBAAgB,4BAA6B;IACtD,QAAQ,CAAC,YAAY,wEAA6E;IAElG,MAAM,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI;IAQpC,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAI1C,eAAe,CAAC,GAAG,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,GAAG,YAAY,GAAG,IAAI;IAM9F,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,aAAa;CAItB"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* pynect - PandasPlugin (built-in)
|
|
4
|
+
* Intercepts DataFrame/Series wire objects and routes through DataFrameBridge.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.PandasPlugin = void 0;
|
|
8
|
+
const data_frame_bridge_1 = require("../../serialization/data-frame-bridge");
|
|
9
|
+
const logger_1 = require("../../utils/logger");
|
|
10
|
+
const logger = new logger_1.Logger('PandasPlugin');
|
|
11
|
+
const bridge = new data_frame_bridge_1.DataFrameBridge();
|
|
12
|
+
class PandasPlugin {
|
|
13
|
+
name = 'pandas';
|
|
14
|
+
version = '1.0.0';
|
|
15
|
+
description = 'Enhanced pandas DataFrame and Series support';
|
|
16
|
+
supportedModules = ['pandas', 'pd'];
|
|
17
|
+
handledTypes = ['DataFrame', 'Series', 'DataFrameGroupBy', 'SeriesGroupBy'];
|
|
18
|
+
onInit(ctx) {
|
|
19
|
+
ctx.registerTypeHandler('DataFrame', this._handleDF.bind(this));
|
|
20
|
+
ctx.registerTypeHandler('DataFrameGroupBy', this._handleDF.bind(this));
|
|
21
|
+
ctx.registerTypeHandler('Series', this._handleSeries.bind(this));
|
|
22
|
+
ctx.registerTypeHandler('SeriesGroupBy', this._handleSeries.bind(this));
|
|
23
|
+
logger.debug('PandasPlugin initialised');
|
|
24
|
+
}
|
|
25
|
+
onModuleImported(moduleName) {
|
|
26
|
+
logger.debug(`pandas module imported: ${moduleName}`);
|
|
27
|
+
}
|
|
28
|
+
transformResult(raw, typeHint) {
|
|
29
|
+
if (typeHint === 'DataFrame' || typeHint === 'DataFrameGroupBy') {
|
|
30
|
+
return this._handleDF(raw, typeHint, {});
|
|
31
|
+
}
|
|
32
|
+
if (typeHint === 'Series' || typeHint === 'SeriesGroupBy') {
|
|
33
|
+
return this._handleSeries(raw, typeHint, {});
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
_handleDF(raw, _typeHint, _meta) {
|
|
38
|
+
try {
|
|
39
|
+
return bridge.deserializeDataFrame(raw);
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
logger.warn(`DataFrame deserialization error: ${err}`);
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
_handleSeries(raw, _typeHint, _meta) {
|
|
47
|
+
try {
|
|
48
|
+
return bridge.deserializeSeries(raw);
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
logger.warn(`Series deserialization error: ${err}`);
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.PandasPlugin = PandasPlugin;
|
|
57
|
+
//# sourceMappingURL=pandas-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pandas-plugin.js","sourceRoot":"","sources":["../../../src/plugins/builtin/pandas-plugin.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAIH,6EAAwE;AACxE,+CAA4C;AAE5C,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,cAAc,CAAC,CAAC;AAC1C,MAAM,MAAM,GAAG,IAAI,mCAAe,EAAE,CAAC;AAErC,MAAa,YAAY;IACd,IAAI,GAAe,QAAQ,CAAC;IAC5B,OAAO,GAAY,OAAO,CAAC;IAC3B,WAAW,GAAQ,8CAA8C,CAAC;IAClE,gBAAgB,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAU,CAAC;IAC7C,YAAY,GAAO,CAAC,WAAW,EAAE,QAAQ,EAAE,kBAAkB,EAAE,eAAe,CAAU,CAAC;IAElG,MAAM,CAAC,GAAsB;QAC3B,GAAG,CAAC,mBAAmB,CAAC,WAAW,EAAS,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACvE,GAAG,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACvE,GAAG,CAAC,mBAAmB,CAAC,QAAQ,EAAY,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3E,GAAG,CAAC,mBAAmB,CAAC,eAAe,EAAK,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3E,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC3C,CAAC;IAED,gBAAgB,CAAC,UAAkB;QACjC,MAAM,CAAC,KAAK,CAAC,2BAA2B,UAAU,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,eAAe,CAAC,GAAoB,EAAE,QAAgB;QACpD,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,kBAAkB,EAAE,CAAC;YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QAAA,CAAC;QAC5G,IAAI,QAAQ,KAAK,QAAQ,IAAM,QAAQ,KAAK,eAAe,EAAK,CAAC;YAAA,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QAAA,CAAC;QAC/G,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,SAAS,CAAC,GAAoB,EAAE,SAAkB,EAAE,KAA+B;QACzF,IAAI,CAAC;YAAC,OAAO,MAAM,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC;QAChD,OAAO,GAAG,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,oCAAoC,GAAG,EAAE,CAAC,CAAC;YAAC,OAAO,IAAI,CAAC;QAAC,CAAC;IACtF,CAAC;IAEO,aAAa,CAAC,GAAoB,EAAE,SAAkB,EAAE,KAA+B;QAC7F,IAAI,CAAC;YAAC,OAAO,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC;QAC7C,OAAO,GAAG,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAC;YAAC,OAAO,IAAI,CAAC;QAAC,CAAC;IACnF,CAAC;CACF;AAlCD,oCAkCC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pynect - TorchPlugin (built-in)
|
|
3
|
+
* Handles PyTorch Tensor objects - delegates to NumpyBridge (tensors are NumPy-compatible).
|
|
4
|
+
*/
|
|
5
|
+
import type { PynectPlugin, PluginInitContext } from '../plugin.interface';
|
|
6
|
+
import type { SerializedValue, NumPyArrayResult } from '../../types/python';
|
|
7
|
+
export type TensorResult = NumPyArrayResult & {
|
|
8
|
+
requiresGrad: boolean;
|
|
9
|
+
isCuda: boolean;
|
|
10
|
+
device: string;
|
|
11
|
+
gradFn: string | null;
|
|
12
|
+
};
|
|
13
|
+
export declare class TorchPlugin implements PynectPlugin {
|
|
14
|
+
readonly name = "torch";
|
|
15
|
+
readonly version = "1.0.0";
|
|
16
|
+
readonly description = "Enhanced PyTorch Tensor support";
|
|
17
|
+
readonly supportedModules: readonly ["torch"];
|
|
18
|
+
readonly handledTypes: readonly ["Tensor"];
|
|
19
|
+
onInit(ctx: PluginInitContext): void;
|
|
20
|
+
transformResult(raw: SerializedValue, typeHint: string, meta: Record<string, unknown>): TensorResult | null;
|
|
21
|
+
private _handle;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=torch-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"torch-plugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/builtin/torch-plugin.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAO5E,MAAM,MAAM,YAAY,GAAG,gBAAgB,GAAG;IAC5C,YAAY,EAAE,OAAO,CAAC;IACtB,MAAM,EAAQ,OAAO,CAAC;IACtB,MAAM,EAAQ,MAAM,CAAC;IACrB,MAAM,EAAQ,MAAM,GAAG,IAAI,CAAC;CAC7B,CAAA;AAED,qBAAa,WAAY,YAAW,YAAY;IAC9C,QAAQ,CAAC,IAAI,WAAuB;IACpC,QAAQ,CAAC,OAAO,WAAoB;IACpC,QAAQ,CAAC,WAAW,qCAA0C;IAC9D,QAAQ,CAAC,gBAAgB,qBAAsB;IAC/C,QAAQ,CAAC,YAAY,sBAA2B;IAEhD,MAAM,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI;IAKpC,eAAe,CAAC,GAAG,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,GAAG,IAAI;IAI3G,OAAO,CAAC,OAAO;CAkBhB"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* pynect - TorchPlugin (built-in)
|
|
4
|
+
* Handles PyTorch Tensor objects - delegates to NumpyBridge (tensors are NumPy-compatible).
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.TorchPlugin = void 0;
|
|
8
|
+
const numpy_bridge_1 = require("../../serialization/numpy-bridge");
|
|
9
|
+
const logger_1 = require("../../utils/logger");
|
|
10
|
+
const logger = new logger_1.Logger('TorchPlugin');
|
|
11
|
+
const bridge = new numpy_bridge_1.NumpyBridge();
|
|
12
|
+
class TorchPlugin {
|
|
13
|
+
name = 'torch';
|
|
14
|
+
version = '1.0.0';
|
|
15
|
+
description = 'Enhanced PyTorch Tensor support';
|
|
16
|
+
supportedModules = ['torch'];
|
|
17
|
+
handledTypes = ['Tensor'];
|
|
18
|
+
onInit(ctx) {
|
|
19
|
+
ctx.registerTypeHandler('Tensor', this._handle.bind(this));
|
|
20
|
+
logger.debug('TorchPlugin initialised');
|
|
21
|
+
}
|
|
22
|
+
transformResult(raw, typeHint, meta) {
|
|
23
|
+
return typeHint === 'Tensor' ? this._handle(raw, typeHint, meta) : null;
|
|
24
|
+
}
|
|
25
|
+
_handle(raw, _t, meta) {
|
|
26
|
+
try {
|
|
27
|
+
const base = bridge.deserialize(raw);
|
|
28
|
+
if (!base) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
const isCuda = Boolean(meta?.['isCuda']);
|
|
32
|
+
if (isCuda) {
|
|
33
|
+
logger.warn('CUDA Tensor: data was copied to CPU for transfer.');
|
|
34
|
+
}
|
|
35
|
+
return {
|
|
36
|
+
...base,
|
|
37
|
+
requiresGrad: Boolean(meta?.['requiresGrad']),
|
|
38
|
+
isCuda,
|
|
39
|
+
device: String(meta?.['device'] ?? 'cpu'),
|
|
40
|
+
gradFn: meta?.['gradFn'] !== null && meta?.['gradFn'] !== undefined ? String(meta?.['gradFn']) : null,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
logger.warn(`Tensor deserialization error: ${err}`);
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.TorchPlugin = TorchPlugin;
|
|
50
|
+
//# sourceMappingURL=torch-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"torch-plugin.js","sourceRoot":"","sources":["../../../src/plugins/builtin/torch-plugin.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAIH,mEAA+D;AAC/D,+CAA4C;AAE5C,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,aAAa,CAAC,CAAC;AACzC,MAAM,MAAM,GAAG,IAAI,0BAAW,EAAE,CAAC;AASjC,MAAa,WAAW;IACb,IAAI,GAAe,OAAO,CAAC;IAC3B,OAAO,GAAY,OAAO,CAAC;IAC3B,WAAW,GAAQ,iCAAiC,CAAC;IACrD,gBAAgB,GAAG,CAAC,OAAO,CAAU,CAAC;IACtC,YAAY,GAAO,CAAC,QAAQ,CAAU,CAAC;IAEhD,MAAM,CAAC,GAAsB;QAC3B,GAAG,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC1C,CAAC;IAED,eAAe,CAAC,GAAoB,EAAE,QAAgB,EAAE,IAA6B;QACnF,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1E,CAAC;IAEO,OAAO,CAAC,GAAoB,EAAE,EAAW,EAAE,IAA8B;QAC/E,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAAA,OAAO,IAAI,CAAC;YAAA,CAAC;YACzB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;YACzC,IAAI,MAAM,EAAE,CAAC;gBAAA,MAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;YAAA,CAAC;YAC/E,OAAO;gBACL,GAAG,IAAI;gBACP,YAAY,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,cAAc,CAAC,CAAC;gBAC7C,MAAM;gBACN,MAAM,EAAG,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC;gBAC1C,MAAM,EAAG,IAAI,EAAE,CAAC,QAAQ,CAAC,KAAK,IAAI,IAAI,IAAI,EAAE,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;aACvF,CAAC;QACpB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,iCAAiC,GAAG,EAAE,CAAC,CAAC;YACpD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;CACF;AAlCD,kCAkCC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type { PynectPlugin, PluginRegistration, PluginInitContext, TypeTransformHandler, PythonTypeName } from './plugin.interface';
|
|
2
|
+
export { PluginManager } from './plugin-manager';
|
|
3
|
+
export { PandasPlugin } from './builtin/pandas-plugin';
|
|
4
|
+
export { NumpyPlugin } from './builtin/numpy-plugin';
|
|
5
|
+
export { TorchPlugin } from './builtin/torch-plugin';
|
|
6
|
+
export type { TensorResult } from './builtin/torch-plugin';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpI,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAO,wBAAwB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAO,wBAAwB,CAAC;AACtD,YAAY,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TorchPlugin = exports.NumpyPlugin = exports.PandasPlugin = exports.PluginManager = void 0;
|
|
4
|
+
var plugin_manager_1 = require("./plugin-manager");
|
|
5
|
+
Object.defineProperty(exports, "PluginManager", { enumerable: true, get: function () { return plugin_manager_1.PluginManager; } });
|
|
6
|
+
var pandas_plugin_1 = require("./builtin/pandas-plugin");
|
|
7
|
+
Object.defineProperty(exports, "PandasPlugin", { enumerable: true, get: function () { return pandas_plugin_1.PandasPlugin; } });
|
|
8
|
+
var numpy_plugin_1 = require("./builtin/numpy-plugin");
|
|
9
|
+
Object.defineProperty(exports, "NumpyPlugin", { enumerable: true, get: function () { return numpy_plugin_1.NumpyPlugin; } });
|
|
10
|
+
var torch_plugin_1 = require("./builtin/torch-plugin");
|
|
11
|
+
Object.defineProperty(exports, "TorchPlugin", { enumerable: true, get: function () { return torch_plugin_1.TorchPlugin; } });
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":";;;AACA,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AACtB,yDAAuD;AAA9C,6GAAA,YAAY,OAAA;AACrB,uDAAsD;AAA7C,2GAAA,WAAW,OAAA;AACpB,uDAAsD;AAA7C,2GAAA,WAAW,OAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pynect - PluginManager
|
|
3
|
+
*
|
|
4
|
+
* Manages registration, lifecycle, and dispatch of pynect plugins.
|
|
5
|
+
* PyRuntime holds a single PluginManager instance.
|
|
6
|
+
*/
|
|
7
|
+
import type { PynectPlugin, PluginRegistration, PluginInitContext } from './plugin.interface';
|
|
8
|
+
import type { SerializedValue } from '../types/python';
|
|
9
|
+
export declare class PluginManager {
|
|
10
|
+
private readonly _plugins;
|
|
11
|
+
private readonly _typeMap;
|
|
12
|
+
private readonly _moduleMap;
|
|
13
|
+
register(plugin: PynectPlugin): this;
|
|
14
|
+
registerBuiltins(): Promise<void>;
|
|
15
|
+
initAll(ctx: PluginInitContext): Promise<void>;
|
|
16
|
+
shutdownAll(): Promise<void>;
|
|
17
|
+
onModuleImported(moduleName: string, moduleOid: number): Promise<void>;
|
|
18
|
+
transformResult(value: SerializedValue, typeName: string, metadata?: Record<string, unknown>): unknown | null;
|
|
19
|
+
serializeValue(value: unknown, targetTypeName?: string): SerializedValue | null;
|
|
20
|
+
get names(): string[];
|
|
21
|
+
getPlugin(name: string): PluginRegistration | undefined;
|
|
22
|
+
get active(): PluginRegistration[];
|
|
23
|
+
get all(): PluginRegistration[];
|
|
24
|
+
isActive(name: string): boolean;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=plugin-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-manager.d.ts","sourceRoot":"","sources":["../../src/plugins/plugin-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EAGlB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAIvD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2C;IACpE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuD;IAChF,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqC;IAIhE,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IA+B9B,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAajC,OAAO,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB9C,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAY5B,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAa5E,eAAe,CACb,KAAK,EAAK,eAAe,EACzB,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACrC,OAAO,GAAG,IAAI;IAajB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAe/E,IAAI,KAAK,IAAI,MAAM,EAAE,CAAsC;IAC3D,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IACvD,IAAI,MAAM,IAAI,kBAAkB,EAAE,CAAgE;IAClG,IAAI,GAAG,IAAI,kBAAkB,EAAE,CAAwC;IACvE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAChC"}
|