Skip to content

Stabilize Complex Watson fitting for extreme weights#4393

Draft
FlorianPfaff wants to merge 2 commits into
mainfrom
agent/fix-complex-watson-extreme-weights-20260714
Draft

Stabilize Complex Watson fitting for extreme weights#4393
FlorianPfaff wants to merge 2 commits into
mainfrom
agent/fix-complex-watson-extreme-weights-20260714

Conversation

@FlorianPfaff

Copy link
Copy Markdown
Owner

Summary

  • rescale finite nonnegative weights before summing them or forming the weighted Complex Watson scatter matrix
  • preserve the estimator's invariance to multiplying all weights by a common positive factor
  • add a regression using finite weights near the float64 limit

Bug

ComplexWatsonDistribution.estimate_parameters previously evaluated both sum(weights) and Z * weights[:, None] at the caller's raw scale. Individually finite weights could therefore overflow in the reduction or matrix product. For example, weights proportional to [8, 4, 2, 1] but scaled so the largest value is float64.max produced an infinite total and a NaN scatter matrix, even though common weight scaling must not change the estimate.

Fix

Normalize weights by their largest value before computing the total and weighted scatter. The scaled weights lie in [0, 1]; their sum and weighted samples remain bounded, while the final normalization is algebraically identical to the original formula.

Validation

  • reproduced the pre-fix overflow with finite extreme weights
  • independently verified the stabilized scatter equals the ordinary-scale reference
  • added tests/distributions/test_complex_watson_extreme_weights.py, checking phase-invariant mean direction and concentration parameter equality
  • branch is two commits ahead of main, zero behind; changes one production file and adds one focused regression test

@github-actions

Copy link
Copy Markdown
Contributor

MegaLinter analysis: Success

Descriptor Linter Files Fixed Errors Warnings Elapsed time
✅ COPYPASTE jscpd yes no no 15.05s
✅ JSON prettier 7 0 0 0 0.76s
✅ JSON v8r 7 0 0 2.71s
✅ MARKDOWN markdownlint 68 0 0 0 1.03s
✅ MARKDOWN markdown-table-formatter 68 0 0 0 0.46s
✅ PYTHON black 1490 184 0 0 56.61s
✅ PYTHON isort 1490 329 0 0 1.55s
✅ REPOSITORY betterleaks yes no no 1.54s
✅ REPOSITORY checkov yes no no 37.35s
✅ REPOSITORY gitleaks yes no no 10.41s
✅ REPOSITORY git_diff yes no no 0.11s
✅ REPOSITORY secretlint yes no no 32.79s
✅ REPOSITORY syft yes no no 3.35s
✅ REPOSITORY trivy-sbom yes no no 4.23s
✅ REPOSITORY trufflehog yes no no 23.17s
✅ YAML prettier 11 0 0 0 0.42s
✅ YAML v8r 11 0 0 7.37s
✅ YAML yamllint 11 0 0 0.4s

Notices

📣 MegaLinter 9.5.0 is out! Discover the new features and security recommendations in the release announcement. (Skip this info by defining SECURITY_SUGGESTIONS: false)

See detailed reports in MegaLinter artifacts

Your project could benefit from a custom flavor, which would allow you to run only the linters you need, and thus improve runtime performances. (Skip this info by defining FLAVOR_SUGGESTIONS: false)

  • Documentation: Custom Flavors
  • Command: npx mega-linter-runner@9.6.0 --custom-flavor-setup --custom-flavor-linters PYTHON_BLACK,PYTHON_ISORT,COPYPASTE_JSCPD,JSON_V8R,JSON_PRETTIER,MARKDOWN_MARKDOWNLINT,MARKDOWN_MARKDOWN_TABLE_FORMATTER,REPOSITORY_CHECKOV,REPOSITORY_GIT_DIFF,REPOSITORY_GITLEAKS,REPOSITORY_BETTERLEAKS,REPOSITORY_SECRETLINT,REPOSITORY_SYFT,REPOSITORY_TRIVY_SBOM,REPOSITORY_TRUFFLEHOG,YAML_PRETTIER,YAML_YAMLLINT,YAML_V8R

MegaLinter is graciously provided by OX Security
Show us your support by starring ⭐ the repository

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.

1 participant