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
From the PR #305 review (epic #278 Phase 1). Three gaps exist identically in AMICATorchNG and (by deliberate parity) AMICAMLXNG; fixing them one-backend-only would violate .rules/backend_parity.md, so they are tracked here for one cross-backend PR:
transform/get_mixing_matrix/get_unmixing_matrix/get_sensor_mixing_matrix return numeric-looking output from a fit the backend itself classified as degenerate (stop_reason in the degenerate set, or a non-finite parameter): no warning, no error. get_rho already carries a finiteness guard on both backends, and state_dict refuses to persist such a model, so the fix pattern exists. The AMICA wrapper's AMICA wrapper marks is_fitted_ even on a degenerate (nan_ll/singular_ll) fit #50 contract (_check_usable) already protects wrapper users; this is about the raw backend surface.
transform(X) does not validate X.ndim/X.shape[0] the way fit does on the same classes, so a wrong-channel-count array fails with a raw matmul/broadcast error instead of the named ValueError fit gives for the identical mistake.
from_state_dict's cls(**config) surfaces malformed config as a bare TypeError (unexpected/missing kwargs) while every neighboring validation step raises a named ValueError identifying the save file as the culprit.
Same-PR cross-backend fix with a shared test per .rules/backend_parity.md.
From the PR #305 review (epic #278 Phase 1). Three gaps exist identically in AMICATorchNG and (by deliberate parity) AMICAMLXNG; fixing them one-backend-only would violate .rules/backend_parity.md, so they are tracked here for one cross-backend PR:
transform/get_mixing_matrix/get_unmixing_matrix/get_sensor_mixing_matrixreturn numeric-looking output from a fit the backend itself classified as degenerate (stop_reasonin the degenerate set, or a non-finite parameter): no warning, no error.get_rhoalready carries a finiteness guard on both backends, andstate_dictrefuses to persist such a model, so the fix pattern exists. TheAMICAwrapper's AMICA wrapper marks is_fitted_ even on a degenerate (nan_ll/singular_ll) fit #50 contract (_check_usable) already protects wrapper users; this is about the raw backend surface.transform(X)does not validateX.ndim/X.shape[0]the wayfitdoes on the same classes, so a wrong-channel-count array fails with a raw matmul/broadcast error instead of the named ValueErrorfitgives for the identical mistake.from_state_dict'scls(**config)surfaces malformed config as a bareTypeError(unexpected/missing kwargs) while every neighboring validation step raises a named ValueError identifying the save file as the culprit.Same-PR cross-backend fix with a shared test per .rules/backend_parity.md.