tech-rkj 0.1.0__tar.gz

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.
tech_rkj-0.1.0/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Jaydeep Prajapati
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
@@ -0,0 +1,159 @@
1
+ Metadata-Version: 2.4
2
+ Name: tech-rkj
3
+ Version: 0.1.0
4
+ Summary: Deterministic AVX2 Closed-Form & Online Continual Learning Subspace Engine in Rust
5
+ Author: Jaydeep Prajapati
6
+ License-Expression: MIT
7
+ Classifier: Programming Language :: Python :: 3
8
+ Classifier: Programming Language :: Python :: 3.9
9
+ Classifier: Programming Language :: Python :: 3.10
10
+ Classifier: Programming Language :: Python :: 3.11
11
+ Classifier: Programming Language :: Python :: 3.12
12
+ Classifier: Operating System :: POSIX :: Linux
13
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
14
+ Requires-Python: >=3.9
15
+ Description-Content-Type: text/markdown
16
+ License-File: LICENSE
17
+ Requires-Dist: numpy>=1.21
18
+ Dynamic: license-file
19
+
20
+ # tech-rkj
21
+
22
+ [![PyPI version](https://img.shields.io/badge/pypi-v0.1.0-blue.svg)](https://pypi.org/project/tech-rkj/)
23
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
24
+ [![Platform](https://img.shields.io/badge/platform-linux__x86__64-brightgreen.svg)]()
25
+ [![Hardware Acceleration](https://img.shields.io/badge/AVX2%20%2B%20FMA-Vectorized-blueviolet.svg)]()
26
+
27
+ **Deterministic AVX2 Closed-Form & Online Continual Learning Subspace Engine in Rust.**
28
+
29
+ `tech-rkj` delivers instant, single-pass closed-form training with zero backprop loops, alongside sub-30µs streaming continual learning without catastrophic forgetting.
30
+
31
+ ---
32
+
33
+ ## Key Features
34
+
35
+ - **Single-Pass Closed-Form Solve**: Direct Gauss-Jordan orthogonal subspace solver $(Z^T Z + \alpha I)^{-1} Z^T Y$ eliminates iterative backpropagation loops entirely.
36
+ - **Hardware-Vectorized AVX2 + FMA**: Rank-1 updates ($P^{-1} \leftarrow P^{-1} - \gamma k k^T$ and $W \leftarrow W + \gamma k e^T$) unrolled with 256-bit SIMD intrinsics.
37
+ - **Continual Streaming Learning (< 30µs)**: Real-time sample-by-sample recursive least squares (RLS) updates with zero heap allocation per stream step.
38
+ - **Zero-Day & Few-Shot Detection**: Novelty-aware learning gain floor avoids $P^{-1}$ saturation on rare classes after large batch fits.
39
+ - **Supervised Fisher / ANOVA Feature Weighting**: Automatic between-class to within-class variance ratio scaling for tabular datasets to surpass gradient boosted trees (e.g. XGBoost).
40
+ - **Scikit-Learn Compatible API**: Drop-in `.fit(X, y)`, `.predict(X)`, `.score(X, y)`, `.update_online(x, label, sample_weight)`, and `.memory_mb()`.
41
+
42
+ ---
43
+
44
+ ## Installation
45
+
46
+ ```bash
47
+ pip install tech-rkj
48
+ ```
49
+
50
+ *Requirements*: Linux (x86_64 with AVX2 support), Python >= 3.9, NumPy >= 1.21.
51
+
52
+ ---
53
+
54
+ ## Quickstart
55
+
56
+ ### Batch Fitting & Evaluation
57
+ ```python
58
+ import numpy as np
59
+ from sklearn.datasets import load_digits
60
+ from tech_rkj import SubspaceClassifier
61
+
62
+ # Load dataset
63
+ X, y = load_digits(return_X_y=True)
64
+ X = (X / 16.0).astype(np.float32)
65
+ y = y.astype(np.int64)
66
+
67
+ # Split 80/20
68
+ X_train, X_test = X[:1400], X[1400:]
69
+ y_train, y_test = y[:1400], y[1400:]
70
+
71
+ # Initialize classifier
72
+ clf = SubspaceClassifier(
73
+ input_dim=64,
74
+ num_classes=10,
75
+ num_heads=4,
76
+ head_circuits=256,
77
+ alpha=1.0,
78
+ low_freq_scale=0.18,
79
+ high_freq_scale=0.38,
80
+ )
81
+
82
+ # Single-pass fit (no backpropagation)
83
+ clf.fit(X_train, y_train)
84
+
85
+ # Evaluate
86
+ acc = clf.score(X_test, y_test)
87
+ print(f"Test Accuracy: {acc * 100:.2f}%")
88
+ print(f"Memory Footprint: {clf.memory_mb():.2f} MB")
89
+ ```
90
+
91
+ ### Continual Online Streaming (< 30µs / sample)
92
+ ```python
93
+ # Stream new incoming sample dynamically without retraining
94
+ clf.update_online(X_test[0], int(y_test[0]), sample_weight=1.0)
95
+
96
+ # High-priority / zero-day novelty sample (e.g. few-shot rare event)
97
+ clf.update_online(X_test[1], int(y_test[1]), sample_weight=5.0)
98
+ ```
99
+
100
+ ### Tabular Datasets with Fisher / ANOVA Feature Weighting
101
+ ```python
102
+ # For tabular datasets with noisy or uninformative features
103
+ clf_tab = SubspaceClassifier(
104
+ input_dim=32,
105
+ num_classes=4,
106
+ num_heads=4,
107
+ head_circuits=384,
108
+ alpha=0.5,
109
+ low_freq_scale=0.15,
110
+ high_freq_scale=0.35,
111
+ frontend_mode="zscore", # Enables ANOVA F-statistic feature weighting
112
+ )
113
+ clf_tab.fit(X_tabular_train, y_tabular_train)
114
+ ```
115
+
116
+ ---
117
+
118
+ ## API Reference
119
+
120
+ ### `SubspaceClassifier`
121
+
122
+ ```python
123
+ SubspaceClassifier(
124
+ input_dim: int,
125
+ num_classes: int,
126
+ num_heads: int = 4,
127
+ head_circuits: int = 384,
128
+ alpha: float = 8.0,
129
+ forgetting_factor: float = 1.0,
130
+ low_freq_scale: float = 0.055,
131
+ high_freq_scale: float = 0.115,
132
+ frontend_mode: str = "identity", # "identity" | "zscore" | "vision_gabor"
133
+ lib_path: Optional[str] = None,
134
+ )
135
+ ```
136
+
137
+ - `fit(X, y)`: Fits the subspace model using single-pass closed-form Gauss-Jordan elimination.
138
+ - `predict(X)`: Predicts class labels for sample array `X`.
139
+ - `score(X, y)`: Computes mean classification accuracy on `(X, y)`.
140
+ - `update_online(x, label, sample_weight=1.0)`: Performs sub-30µs streaming RLS rank-1 update.
141
+ - `memory_mb()`: Returns the total internal memory footprint of the engine in megabytes.
142
+
143
+ *(Note: `AICoreClassifier` is retained as an alias for backward compatibility.)*
144
+
145
+ ---
146
+
147
+ ## Benchmark Highlights
148
+
149
+ - **Full MNIST 28x28 (784-D)**: Trained single-pass in ~2.1 seconds (**2.9x faster** than 10-epoch MLP backpropagation).
150
+ - **Continual Learning Retention**: **95.25%** base class retention after streaming completely new unseen classes.
151
+ - **Zero-Day Few-Shot Detection**: **82.14%** accuracy on 40 few-shot zero-day samples injected after 6,000 normal samples (with 99.00% normal class retention).
152
+ - **Tabular 32D Benchmark**: **84.90%** accuracy (exceeds XGBoost baseline of 83.83%).
153
+
154
+ ---
155
+
156
+ ## License
157
+
158
+ MIT License. Copyright (c) 2026 Jaydeep Prajapati.
159
+
@@ -0,0 +1,140 @@
1
+ # tech-rkj
2
+
3
+ [![PyPI version](https://img.shields.io/badge/pypi-v0.1.0-blue.svg)](https://pypi.org/project/tech-rkj/)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
+ [![Platform](https://img.shields.io/badge/platform-linux__x86__64-brightgreen.svg)]()
6
+ [![Hardware Acceleration](https://img.shields.io/badge/AVX2%20%2B%20FMA-Vectorized-blueviolet.svg)]()
7
+
8
+ **Deterministic AVX2 Closed-Form & Online Continual Learning Subspace Engine in Rust.**
9
+
10
+ `tech-rkj` delivers instant, single-pass closed-form training with zero backprop loops, alongside sub-30µs streaming continual learning without catastrophic forgetting.
11
+
12
+ ---
13
+
14
+ ## Key Features
15
+
16
+ - **Single-Pass Closed-Form Solve**: Direct Gauss-Jordan orthogonal subspace solver $(Z^T Z + \alpha I)^{-1} Z^T Y$ eliminates iterative backpropagation loops entirely.
17
+ - **Hardware-Vectorized AVX2 + FMA**: Rank-1 updates ($P^{-1} \leftarrow P^{-1} - \gamma k k^T$ and $W \leftarrow W + \gamma k e^T$) unrolled with 256-bit SIMD intrinsics.
18
+ - **Continual Streaming Learning (< 30µs)**: Real-time sample-by-sample recursive least squares (RLS) updates with zero heap allocation per stream step.
19
+ - **Zero-Day & Few-Shot Detection**: Novelty-aware learning gain floor avoids $P^{-1}$ saturation on rare classes after large batch fits.
20
+ - **Supervised Fisher / ANOVA Feature Weighting**: Automatic between-class to within-class variance ratio scaling for tabular datasets to surpass gradient boosted trees (e.g. XGBoost).
21
+ - **Scikit-Learn Compatible API**: Drop-in `.fit(X, y)`, `.predict(X)`, `.score(X, y)`, `.update_online(x, label, sample_weight)`, and `.memory_mb()`.
22
+
23
+ ---
24
+
25
+ ## Installation
26
+
27
+ ```bash
28
+ pip install tech-rkj
29
+ ```
30
+
31
+ *Requirements*: Linux (x86_64 with AVX2 support), Python >= 3.9, NumPy >= 1.21.
32
+
33
+ ---
34
+
35
+ ## Quickstart
36
+
37
+ ### Batch Fitting & Evaluation
38
+ ```python
39
+ import numpy as np
40
+ from sklearn.datasets import load_digits
41
+ from tech_rkj import SubspaceClassifier
42
+
43
+ # Load dataset
44
+ X, y = load_digits(return_X_y=True)
45
+ X = (X / 16.0).astype(np.float32)
46
+ y = y.astype(np.int64)
47
+
48
+ # Split 80/20
49
+ X_train, X_test = X[:1400], X[1400:]
50
+ y_train, y_test = y[:1400], y[1400:]
51
+
52
+ # Initialize classifier
53
+ clf = SubspaceClassifier(
54
+ input_dim=64,
55
+ num_classes=10,
56
+ num_heads=4,
57
+ head_circuits=256,
58
+ alpha=1.0,
59
+ low_freq_scale=0.18,
60
+ high_freq_scale=0.38,
61
+ )
62
+
63
+ # Single-pass fit (no backpropagation)
64
+ clf.fit(X_train, y_train)
65
+
66
+ # Evaluate
67
+ acc = clf.score(X_test, y_test)
68
+ print(f"Test Accuracy: {acc * 100:.2f}%")
69
+ print(f"Memory Footprint: {clf.memory_mb():.2f} MB")
70
+ ```
71
+
72
+ ### Continual Online Streaming (< 30µs / sample)
73
+ ```python
74
+ # Stream new incoming sample dynamically without retraining
75
+ clf.update_online(X_test[0], int(y_test[0]), sample_weight=1.0)
76
+
77
+ # High-priority / zero-day novelty sample (e.g. few-shot rare event)
78
+ clf.update_online(X_test[1], int(y_test[1]), sample_weight=5.0)
79
+ ```
80
+
81
+ ### Tabular Datasets with Fisher / ANOVA Feature Weighting
82
+ ```python
83
+ # For tabular datasets with noisy or uninformative features
84
+ clf_tab = SubspaceClassifier(
85
+ input_dim=32,
86
+ num_classes=4,
87
+ num_heads=4,
88
+ head_circuits=384,
89
+ alpha=0.5,
90
+ low_freq_scale=0.15,
91
+ high_freq_scale=0.35,
92
+ frontend_mode="zscore", # Enables ANOVA F-statistic feature weighting
93
+ )
94
+ clf_tab.fit(X_tabular_train, y_tabular_train)
95
+ ```
96
+
97
+ ---
98
+
99
+ ## API Reference
100
+
101
+ ### `SubspaceClassifier`
102
+
103
+ ```python
104
+ SubspaceClassifier(
105
+ input_dim: int,
106
+ num_classes: int,
107
+ num_heads: int = 4,
108
+ head_circuits: int = 384,
109
+ alpha: float = 8.0,
110
+ forgetting_factor: float = 1.0,
111
+ low_freq_scale: float = 0.055,
112
+ high_freq_scale: float = 0.115,
113
+ frontend_mode: str = "identity", # "identity" | "zscore" | "vision_gabor"
114
+ lib_path: Optional[str] = None,
115
+ )
116
+ ```
117
+
118
+ - `fit(X, y)`: Fits the subspace model using single-pass closed-form Gauss-Jordan elimination.
119
+ - `predict(X)`: Predicts class labels for sample array `X`.
120
+ - `score(X, y)`: Computes mean classification accuracy on `(X, y)`.
121
+ - `update_online(x, label, sample_weight=1.0)`: Performs sub-30µs streaming RLS rank-1 update.
122
+ - `memory_mb()`: Returns the total internal memory footprint of the engine in megabytes.
123
+
124
+ *(Note: `AICoreClassifier` is retained as an alias for backward compatibility.)*
125
+
126
+ ---
127
+
128
+ ## Benchmark Highlights
129
+
130
+ - **Full MNIST 28x28 (784-D)**: Trained single-pass in ~2.1 seconds (**2.9x faster** than 10-epoch MLP backpropagation).
131
+ - **Continual Learning Retention**: **95.25%** base class retention after streaming completely new unseen classes.
132
+ - **Zero-Day Few-Shot Detection**: **82.14%** accuracy on 40 few-shot zero-day samples injected after 6,000 normal samples (with 99.00% normal class retention).
133
+ - **Tabular 32D Benchmark**: **84.90%** accuracy (exceeds XGBoost baseline of 83.83%).
134
+
135
+ ---
136
+
137
+ ## License
138
+
139
+ MIT License. Copyright (c) 2026 Jaydeep Prajapati.
140
+
@@ -0,0 +1,33 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61.0", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "tech-rkj"
7
+ version = "0.1.0"
8
+ description = "Deterministic AVX2 Closed-Form & Online Continual Learning Subspace Engine in Rust"
9
+ readme = "README.md"
10
+ requires-python = ">=3.9"
11
+ license = "MIT"
12
+ authors = [
13
+ { name = "Jaydeep Prajapati" }
14
+ ]
15
+ dependencies = [
16
+ "numpy>=1.21",
17
+ ]
18
+ classifiers = [
19
+ "Programming Language :: Python :: 3",
20
+ "Programming Language :: Python :: 3.9",
21
+ "Programming Language :: Python :: 3.10",
22
+ "Programming Language :: Python :: 3.11",
23
+ "Programming Language :: Python :: 3.12",
24
+ "Operating System :: POSIX :: Linux",
25
+ "Topic :: Scientific/Engineering :: Artificial Intelligence",
26
+ ]
27
+
28
+ [tool.setuptools.packages.find]
29
+ where = ["."]
30
+ include = ["tech_rkj*"]
31
+
32
+ [tool.setuptools.package-data]
33
+ tech_rkj = ["bin/*.so"]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,21 @@
1
+ from setuptools import setup, find_packages
2
+ from wheel.bdist_wheel import bdist_wheel as _bdist_wheel
3
+
4
+
5
+ class universal_bdist_wheel(_bdist_wheel):
6
+ def finalize_options(self):
7
+ super().finalize_options()
8
+ self.root_is_pure = False
9
+
10
+ def get_tag(self):
11
+ _, _, plat = super().get_tag()
12
+ return ("py3", "none", plat)
13
+
14
+
15
+ setup(
16
+ packages=find_packages(),
17
+ package_data={"tech_rkj": ["bin/*.so"]},
18
+ include_package_data=True,
19
+ cmdclass={"bdist_wheel": universal_bdist_wheel},
20
+ has_ext_modules=lambda: True,
21
+ )
@@ -0,0 +1,9 @@
1
+ """
2
+ tech-rkj: High-Performance AVX2 Closed-Form & Continual Learning Subspace Engine in Rust.
3
+ """
4
+
5
+ from .classifier import SubspaceClassifier, AICoreClassifier
6
+
7
+ __version__ = "0.1.0"
8
+ __all__ = ["SubspaceClassifier", "AICoreClassifier", "__version__"]
9
+
@@ -0,0 +1,161 @@
1
+ import ctypes
2
+ import os
3
+ from typing import Optional
4
+ import numpy as np
5
+
6
+ _MODE_MAP = {"identity": 0, "zscore": 1, "vision_gabor": 2}
7
+
8
+
9
+ class SubspaceClassifier:
10
+ """
11
+ SubspaceClassifier: High-performance AVX2 closed-form and continual learning classifier in Rust.
12
+ """
13
+
14
+ def __init__(
15
+ self,
16
+ input_dim: int,
17
+ num_classes: int,
18
+ num_heads: int = 4,
19
+ head_circuits: int = 384,
20
+ alpha: float = 8.0,
21
+ forgetting_factor: float = 1.0,
22
+ low_freq_scale: float = 0.055,
23
+ high_freq_scale: float = 0.115,
24
+ frontend_mode: str = "identity",
25
+ lib_path: Optional[str] = None,
26
+ ):
27
+ if lib_path is None:
28
+ here = os.path.dirname(os.path.abspath(__file__))
29
+ default_so = os.path.join(here, "bin", "libaicore_fw.so")
30
+ fallback_so = os.path.join(here, "libaicore_fw.so")
31
+ if os.path.exists(default_so):
32
+ lib_path = default_so
33
+ elif os.path.exists(fallback_so):
34
+ lib_path = fallback_so
35
+ else:
36
+ lib_path = default_so
37
+
38
+ if not os.path.exists(lib_path):
39
+ raise FileNotFoundError(
40
+ f"Native binary '{lib_path}' not found. Please verify package installation."
41
+ )
42
+
43
+ self._lib = ctypes.CDLL(lib_path)
44
+ self._bind_signatures()
45
+ self.input_dim = input_dim
46
+ self.num_classes = num_classes
47
+
48
+ mode_id = _MODE_MAP.get(frontend_mode, 0)
49
+ self._handle = self._lib.aicore_create(
50
+ input_dim,
51
+ num_classes,
52
+ num_heads,
53
+ head_circuits,
54
+ alpha,
55
+ forgetting_factor,
56
+ low_freq_scale,
57
+ high_freq_scale,
58
+ mode_id,
59
+ )
60
+ if not self._handle:
61
+ raise RuntimeError("Failed to initialize Rust AICoreEngine")
62
+ self.handle = self._handle
63
+
64
+ def _bind_signatures(self):
65
+ c_f32_p = ctypes.POINTER(ctypes.c_float)
66
+ c_i64_p = ctypes.POINTER(ctypes.c_int64)
67
+
68
+ self._lib.aicore_create.argtypes = [
69
+ ctypes.c_size_t,
70
+ ctypes.c_size_t,
71
+ ctypes.c_size_t,
72
+ ctypes.c_size_t,
73
+ ctypes.c_double,
74
+ ctypes.c_double,
75
+ ctypes.c_float,
76
+ ctypes.c_float,
77
+ ctypes.c_int,
78
+ ]
79
+ self._lib.aicore_create.restype = ctypes.c_void_p
80
+ self._lib.aicore_free.argtypes = [ctypes.c_void_p]
81
+ self._lib.aicore_fit.argtypes = [
82
+ ctypes.c_void_p,
83
+ c_f32_p,
84
+ c_i64_p,
85
+ ctypes.c_size_t,
86
+ ]
87
+ self._lib.aicore_fit.restype = ctypes.c_int
88
+ self._lib.aicore_update_online.argtypes = [
89
+ ctypes.c_void_p,
90
+ c_f32_p,
91
+ ctypes.c_size_t,
92
+ ctypes.c_double,
93
+ ]
94
+ self._lib.aicore_predict_batch.argtypes = [
95
+ ctypes.c_void_p,
96
+ c_f32_p,
97
+ c_i64_p,
98
+ ctypes.c_size_t,
99
+ ]
100
+ self._lib.aicore_memory_mb.argtypes = [ctypes.c_void_p]
101
+ self._lib.aicore_memory_mb.restype = ctypes.c_double
102
+
103
+ def fit(self, X: np.ndarray, y: np.ndarray):
104
+ X_c = np.ascontiguousarray(X, dtype=np.float32)
105
+ y_c = np.ascontiguousarray(y, dtype=np.int64)
106
+ if len(X_c) != len(y_c):
107
+ raise ValueError(
108
+ f"Length mismatch: X has {len(X_c)} samples, y has {len(y_c)} samples"
109
+ )
110
+ rc = self._lib.aicore_fit(
111
+ self._handle,
112
+ X_c.ctypes.data_as(ctypes.POINTER(ctypes.c_float)),
113
+ y_c.ctypes.data_as(ctypes.POINTER(ctypes.c_int64)),
114
+ len(y_c),
115
+ )
116
+ if rc != 0:
117
+ raise RuntimeError(f"aicore_fit failed with code {rc}")
118
+ return self
119
+
120
+ def update_online(
121
+ self, x: np.ndarray, label: int, sample_weight: float = 1.0
122
+ ):
123
+ x_c = np.ascontiguousarray(x, dtype=np.float32)
124
+ self._lib.aicore_update_online(
125
+ self._handle,
126
+ x_c.ctypes.data_as(ctypes.POINTER(ctypes.c_float)),
127
+ int(label),
128
+ float(sample_weight),
129
+ )
130
+
131
+ def predict(self, X: np.ndarray) -> np.ndarray:
132
+ X_c = np.ascontiguousarray(X, dtype=np.float32)
133
+ preds = np.empty(len(X_c), dtype=np.int64)
134
+ self._lib.aicore_predict_batch(
135
+ self._handle,
136
+ X_c.ctypes.data_as(ctypes.POINTER(ctypes.c_float)),
137
+ preds.ctypes.data_as(ctypes.POINTER(ctypes.c_int64)),
138
+ len(X_c),
139
+ )
140
+ return preds
141
+
142
+ def score(self, X: np.ndarray, y: np.ndarray) -> float:
143
+ preds = self.predict(X)
144
+ y_arr = np.asarray(y)
145
+ return float(np.mean(preds == y_arr))
146
+
147
+ def memory_mb(self) -> float:
148
+ if self._handle:
149
+ return float(self._lib.aicore_memory_mb(self._handle))
150
+ return 0.0
151
+
152
+ def __del__(self):
153
+ if getattr(self, "_handle", None) and getattr(self, "_lib", None):
154
+ self._lib.aicore_free(self._handle)
155
+ self._handle = None
156
+ self.handle = None
157
+
158
+
159
+ # Backward compatibility alias
160
+ AICoreClassifier = SubspaceClassifier
161
+
@@ -0,0 +1,159 @@
1
+ Metadata-Version: 2.4
2
+ Name: tech-rkj
3
+ Version: 0.1.0
4
+ Summary: Deterministic AVX2 Closed-Form & Online Continual Learning Subspace Engine in Rust
5
+ Author: Jaydeep Prajapati
6
+ License-Expression: MIT
7
+ Classifier: Programming Language :: Python :: 3
8
+ Classifier: Programming Language :: Python :: 3.9
9
+ Classifier: Programming Language :: Python :: 3.10
10
+ Classifier: Programming Language :: Python :: 3.11
11
+ Classifier: Programming Language :: Python :: 3.12
12
+ Classifier: Operating System :: POSIX :: Linux
13
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
14
+ Requires-Python: >=3.9
15
+ Description-Content-Type: text/markdown
16
+ License-File: LICENSE
17
+ Requires-Dist: numpy>=1.21
18
+ Dynamic: license-file
19
+
20
+ # tech-rkj
21
+
22
+ [![PyPI version](https://img.shields.io/badge/pypi-v0.1.0-blue.svg)](https://pypi.org/project/tech-rkj/)
23
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
24
+ [![Platform](https://img.shields.io/badge/platform-linux__x86__64-brightgreen.svg)]()
25
+ [![Hardware Acceleration](https://img.shields.io/badge/AVX2%20%2B%20FMA-Vectorized-blueviolet.svg)]()
26
+
27
+ **Deterministic AVX2 Closed-Form & Online Continual Learning Subspace Engine in Rust.**
28
+
29
+ `tech-rkj` delivers instant, single-pass closed-form training with zero backprop loops, alongside sub-30µs streaming continual learning without catastrophic forgetting.
30
+
31
+ ---
32
+
33
+ ## Key Features
34
+
35
+ - **Single-Pass Closed-Form Solve**: Direct Gauss-Jordan orthogonal subspace solver $(Z^T Z + \alpha I)^{-1} Z^T Y$ eliminates iterative backpropagation loops entirely.
36
+ - **Hardware-Vectorized AVX2 + FMA**: Rank-1 updates ($P^{-1} \leftarrow P^{-1} - \gamma k k^T$ and $W \leftarrow W + \gamma k e^T$) unrolled with 256-bit SIMD intrinsics.
37
+ - **Continual Streaming Learning (< 30µs)**: Real-time sample-by-sample recursive least squares (RLS) updates with zero heap allocation per stream step.
38
+ - **Zero-Day & Few-Shot Detection**: Novelty-aware learning gain floor avoids $P^{-1}$ saturation on rare classes after large batch fits.
39
+ - **Supervised Fisher / ANOVA Feature Weighting**: Automatic between-class to within-class variance ratio scaling for tabular datasets to surpass gradient boosted trees (e.g. XGBoost).
40
+ - **Scikit-Learn Compatible API**: Drop-in `.fit(X, y)`, `.predict(X)`, `.score(X, y)`, `.update_online(x, label, sample_weight)`, and `.memory_mb()`.
41
+
42
+ ---
43
+
44
+ ## Installation
45
+
46
+ ```bash
47
+ pip install tech-rkj
48
+ ```
49
+
50
+ *Requirements*: Linux (x86_64 with AVX2 support), Python >= 3.9, NumPy >= 1.21.
51
+
52
+ ---
53
+
54
+ ## Quickstart
55
+
56
+ ### Batch Fitting & Evaluation
57
+ ```python
58
+ import numpy as np
59
+ from sklearn.datasets import load_digits
60
+ from tech_rkj import SubspaceClassifier
61
+
62
+ # Load dataset
63
+ X, y = load_digits(return_X_y=True)
64
+ X = (X / 16.0).astype(np.float32)
65
+ y = y.astype(np.int64)
66
+
67
+ # Split 80/20
68
+ X_train, X_test = X[:1400], X[1400:]
69
+ y_train, y_test = y[:1400], y[1400:]
70
+
71
+ # Initialize classifier
72
+ clf = SubspaceClassifier(
73
+ input_dim=64,
74
+ num_classes=10,
75
+ num_heads=4,
76
+ head_circuits=256,
77
+ alpha=1.0,
78
+ low_freq_scale=0.18,
79
+ high_freq_scale=0.38,
80
+ )
81
+
82
+ # Single-pass fit (no backpropagation)
83
+ clf.fit(X_train, y_train)
84
+
85
+ # Evaluate
86
+ acc = clf.score(X_test, y_test)
87
+ print(f"Test Accuracy: {acc * 100:.2f}%")
88
+ print(f"Memory Footprint: {clf.memory_mb():.2f} MB")
89
+ ```
90
+
91
+ ### Continual Online Streaming (< 30µs / sample)
92
+ ```python
93
+ # Stream new incoming sample dynamically without retraining
94
+ clf.update_online(X_test[0], int(y_test[0]), sample_weight=1.0)
95
+
96
+ # High-priority / zero-day novelty sample (e.g. few-shot rare event)
97
+ clf.update_online(X_test[1], int(y_test[1]), sample_weight=5.0)
98
+ ```
99
+
100
+ ### Tabular Datasets with Fisher / ANOVA Feature Weighting
101
+ ```python
102
+ # For tabular datasets with noisy or uninformative features
103
+ clf_tab = SubspaceClassifier(
104
+ input_dim=32,
105
+ num_classes=4,
106
+ num_heads=4,
107
+ head_circuits=384,
108
+ alpha=0.5,
109
+ low_freq_scale=0.15,
110
+ high_freq_scale=0.35,
111
+ frontend_mode="zscore", # Enables ANOVA F-statistic feature weighting
112
+ )
113
+ clf_tab.fit(X_tabular_train, y_tabular_train)
114
+ ```
115
+
116
+ ---
117
+
118
+ ## API Reference
119
+
120
+ ### `SubspaceClassifier`
121
+
122
+ ```python
123
+ SubspaceClassifier(
124
+ input_dim: int,
125
+ num_classes: int,
126
+ num_heads: int = 4,
127
+ head_circuits: int = 384,
128
+ alpha: float = 8.0,
129
+ forgetting_factor: float = 1.0,
130
+ low_freq_scale: float = 0.055,
131
+ high_freq_scale: float = 0.115,
132
+ frontend_mode: str = "identity", # "identity" | "zscore" | "vision_gabor"
133
+ lib_path: Optional[str] = None,
134
+ )
135
+ ```
136
+
137
+ - `fit(X, y)`: Fits the subspace model using single-pass closed-form Gauss-Jordan elimination.
138
+ - `predict(X)`: Predicts class labels for sample array `X`.
139
+ - `score(X, y)`: Computes mean classification accuracy on `(X, y)`.
140
+ - `update_online(x, label, sample_weight=1.0)`: Performs sub-30µs streaming RLS rank-1 update.
141
+ - `memory_mb()`: Returns the total internal memory footprint of the engine in megabytes.
142
+
143
+ *(Note: `AICoreClassifier` is retained as an alias for backward compatibility.)*
144
+
145
+ ---
146
+
147
+ ## Benchmark Highlights
148
+
149
+ - **Full MNIST 28x28 (784-D)**: Trained single-pass in ~2.1 seconds (**2.9x faster** than 10-epoch MLP backpropagation).
150
+ - **Continual Learning Retention**: **95.25%** base class retention after streaming completely new unseen classes.
151
+ - **Zero-Day Few-Shot Detection**: **82.14%** accuracy on 40 few-shot zero-day samples injected after 6,000 normal samples (with 99.00% normal class retention).
152
+ - **Tabular 32D Benchmark**: **84.90%** accuracy (exceeds XGBoost baseline of 83.83%).
153
+
154
+ ---
155
+
156
+ ## License
157
+
158
+ MIT License. Copyright (c) 2026 Jaydeep Prajapati.
159
+
@@ -0,0 +1,12 @@
1
+ LICENSE
2
+ README.md
3
+ pyproject.toml
4
+ setup.py
5
+ tech_rkj/__init__.py
6
+ tech_rkj/classifier.py
7
+ tech_rkj.egg-info/PKG-INFO
8
+ tech_rkj.egg-info/SOURCES.txt
9
+ tech_rkj.egg-info/dependency_links.txt
10
+ tech_rkj.egg-info/requires.txt
11
+ tech_rkj.egg-info/top_level.txt
12
+ tech_rkj/bin/libaicore_fw.so
@@ -0,0 +1 @@
1
+ numpy>=1.21
@@ -0,0 +1 @@
1
+ tech_rkj