You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
0.4.0 - 2026-02-27
Added reusable WelfordAccumulator utility (cuvis_ai.utils.welford) for streaming mean/variance/covariance
Added resolve_reduce_dims() as shared module-level utility in binary_decider
Added TRAINABLE_BUFFERS class attribute — 5 nodes declare trainable buffers, base class handles buffer↔parameter conversion in freeze/unfreeze automatically
Added freeze() for LearnableChannelMixer matching existing unfreeze() override
Added ConcreteChannelMixer and LearnableChannelMixer exported from cuvis_ai.node
Added all 6 visualization nodes exported from cuvis_ai.node: AnomalyMask, RGBAnomalyMask, ScoreHeatmapVisualizer, CubeRGBVisualizer, PCAVisualization, PipelineComparisonVisualizer
Added insufficient-samples guard to RXGlobal and ScoreToLogit — raises early when training data has too few samples
Added plugin runtime smoke CI workflow (plugin-runtime-smoke.yml) with slow plugin tests
Added AdaCLIP standalone plugin manifest (configs/plugins/adaclip.yaml) and 6 example scripts
Added plugin contract, manifest sync, and runtime smoke test files
Added 8 new test files: test_welford, test_freeze_unfreeze, test_channel_selector_coverage, test_concrete_channel_mixer, test_pipeline_visualization, test_binary_decider, test_data_node, test_rx_per_batch
Added pytest markers (unit/integration/slow) on all 30 test files; session-scoped fixtures for expensive operations; pytest config consolidated in pytest.ini
Changed RXGlobal, ScoreToLogit, LADGlobal to use WelfordAccumulator instead of inline Welford implementations
Changed _compute_band_correlation_matrix to single-pass streaming with WelfordAccumulator
Changed TrainablePCA and LearnableChannelMixer to use streaming covariance + eigh instead of concat + SVD
Changed SoftChannelSelector variance init to use streaming WelfordAccumulator
Changed ZScoreNormalizerGlobal to use streaming WelfordAccumulator instead of concat + subsample
Changed supervised band selectors to use template method pattern, pulling shared forward() and statistical_initialization() into SupervisedSelectorBase
Changed YAML configs and docs to use new schema field names (hparams, class_name)
Changed EXECUTION_STAGE_VALIDATE references to VAL across gRPC docs
Changed .freezed references to .frozen in tests and docs (matches cuvis-ai-core rename)
Breaking: Reorganized channel selector and mixer nodes into separate files: band_selection.py + selector.py → channel_selector.py, concrete_selector.py + channel_mixer.py → channel_mixer.py, pca.py → dimensionality_reduction.py, visualizations.py + drcnn_tensorboard_viz.py → anomaly_visualization.py + pipeline_visualization.py