Skip to content

Expand Rust-core psychometric diagnostics - #240

Merged
seonghobae merged 1 commit into
mainfrom
seonghobae-pr-213-audit
Jul 25, 2026
Merged

Expand Rust-core psychometric diagnostics#240
seonghobae merged 1 commit into
mainfrom
seonghobae-pr-213-audit

Conversation

@seonghobae

Copy link
Copy Markdown
Contributor

Why

This branch expands fast-mlsirm's Rust-first psychometric and IRT surface so calibration, scoring, diagnostics, DIF, and response-model workflows can run through the native core with thin Python wrappers.

What changed

  • Adds paper-backed Rust modules for marginal estimation, polytomous models, fit statistics, DIF, scoring, linking/equating, response-time/testlet/CDM-style diagnostics, and related validation boundaries.
  • Exposes the new native functionality through Python API and CLI wrappers while keeping Python mostly orchestration-facing.
  • Adds regression, parity, security-hardening, and paper-feature tests, including the PR MMLE marginal LSIRM stack with GPU-first scoring and audit fixes #213 audit fixes for masked polytomous responses and finite leniency residual outputs on empty observed rows.
  • Updates documentation and literature mapping for implemented methods and formula scope.

Notes

The local .jules/palette.md change was left uncommitted because it is unrelated workspace memory, not part of this library PR.

Validation

Copilot AI review requested due to automatic review settings July 24, 2026 07:30

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot wasn't able to review this pull request because it exceeds the maximum number of lines (20,000). Try reducing the number of changed lines and requesting a review from Copilot again.

Copilot AI review requested due to automatic review settings July 24, 2026 08:20

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot wasn't able to review this pull request because it exceeds the maximum number of lines (20,000). Try reducing the number of changed lines and requesting a review from Copilot again.

Copilot AI review requested due to automatic review settings July 24, 2026 08:43

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot wasn't able to review this pull request because it exceeds the maximum number of lines (20,000). Try reducing the number of changed lines and requesting a review from Copilot again.

Copilot AI review requested due to automatic review settings July 24, 2026 08:52

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot wasn't able to review this pull request because it exceeds the maximum number of lines (20,000). Try reducing the number of changed lines and requesting a review from Copilot again.

Copilot AI review requested due to automatic review settings July 24, 2026 09:04

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot wasn't able to review this pull request because it exceeds the maximum number of lines (20,000). Try reducing the number of changed lines and requesting a review from Copilot again.

Copilot AI review requested due to automatic review settings July 24, 2026 09:20

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot wasn't able to review this pull request because it exceeds the maximum number of lines (20,000). Try reducing the number of changed lines and requesting a review from Copilot again.

Copilot AI review requested due to automatic review settings July 24, 2026 09:37

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot wasn't able to review this pull request because it exceeds the maximum number of lines (20,000). Try reducing the number of changed lines and requesting a review from Copilot again.

Copilot AI review requested due to automatic review settings July 24, 2026 09:51

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot wasn't able to review this pull request because it exceeds the maximum number of lines (20,000). Try reducing the number of changed lines and requesting a review from Copilot again.

Copilot AI review requested due to automatic review settings July 24, 2026 10:21

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot wasn't able to review this pull request because it exceeds the maximum number of lines (20,000). Try reducing the number of changed lines and requesting a review from Copilot again.

Copilot AI review requested due to automatic review settings July 24, 2026 11:03

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot wasn't able to review this pull request because it exceeds the maximum number of lines (20,000). Try reducing the number of changed lines and requesting a review from Copilot again.

Copilot AI review requested due to automatic review settings July 24, 2026 11:19

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot wasn't able to review this pull request because it exceeds the maximum number of lines (20,000). Try reducing the number of changed lines and requesting a review from Copilot again.

@seonghobae
seonghobae changed the base branch from main to seonghobae-validate-commit-160 July 24, 2026 11:40
@seonghobae

Copy link
Copy Markdown
Contributor Author

@copilot resolve the merge conflicts on this branch.

Copilot AI commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

@copilot resolve the merge conflicts on this branch.

Resolved. The branch had four conflict markers in crates/mlsirm-core/src/poly.rs — all from the same pattern where the HEAD used expected_len/expected_cat_params variable names while the base branch used n_cells/n_item_steps. Took the base branch's cleaner naming. Committed as fix(merge): resolve conflicts in poly.rs (n_cells/n_item_steps naming) after verifying all 428 Rust tests pass.

@seonghobae
seonghobae force-pushed the seonghobae-pr-213-audit branch 2 times, most recently from 91f9d21 to 715d4cc Compare July 24, 2026 12:47
Base automatically changed from seonghobae-validate-commit-160 to main July 25, 2026 09:10
@seonghobae
seonghobae force-pushed the seonghobae-pr-213-audit branch from 871d6a2 to 5e956a3 Compare July 25, 2026 09:22
Audit fixes identified during adversarial review of PR #213:
- poly.rs: fix degenerate GRM threshold handling
- fitstats.rs: correctness improvements
- poly_marginal.rs: updated tests
- polytomous.py: minor corrections

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@seonghobae
seonghobae merged commit 776c949 into main Jul 25, 2026
32 checks passed
@seonghobae
seonghobae deleted the seonghobae-pr-213-audit branch July 25, 2026 09:34
seonghobae added a commit that referenced this pull request Jul 25, 2026
Rebuild on top of updated main (post-audit) preserving poly.rs/fitstats.rs
correctness from audit PR #240. KSIRT-unique changes only:
- New: ksirt.rs, subscores.rs, ksirt.py, subscores.py, tests
- Modified infra: lib.rs, CHANGELOG, __init__.py, py-bindings
- mokken.rs: make normal_upper_quantile pub(crate) for KSIRT use

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
seonghobae added a commit that referenced this pull request Jul 25, 2026
Rebuild on top of updated main (post-audit) preserving poly.rs/fitstats.rs
correctness from audit PR #240. KSIRT-unique changes only:
- New: ksirt.rs, subscores.rs, ksirt.py, subscores.py, tests
- Modified infra: lib.rs, CHANGELOG, __init__.py, py-bindings
- mokken.rs: make normal_upper_quantile pub(crate) for KSIRT use

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants