unzhakov
8bc9b0fd87
test: pin core-spectrum invariant (phase_space x fermi always included)
2026-09-30 03:04:18 +03:00
unzhakov
be3e288e0d
docs: update documentation files and fix linting issues
2026-07-07 13:32:48 +03:00
unzhakov
9bf1e1333e
refactor: rename visualize module to output module and separate concerns into core, csv_export, and visualization modules
2026-07-07 12:59:11 +03:00
unzhakov
a7eef7bc20
feat: polish CSV header format with improved metadata and column naming
2026-07-03 14:58:19 +03:00
unzhakov
876e1e3ab8
Add massive neutrino support and improve CSV/CLI output
...
- Add neutrino mass parameter to SpectrumConfig and CLI interface
- Update PhaseSpace component to handle neutrino mass effects properly
- Update CSV headers to show basic endpoint and all transition types
- Add --csv-verbosity option to CLI with 'full' and 'concise' options
- Fix comparison plots to properly show linear scale variations
- Add comprehensive tests for neutrino mass functionality
2026-07-02 10:33:28 +03:00
unzhakov
8b0ced4b65
fix: resolve 4 fatal bugs — json_to_config, create_config_from_source, Am-241 constant, CLI positional args
2026-05-26 14:57:35 +03:00
unzhakov
5c2b12c0e6
feat: experimental data calibration pipeline with ROOT I/O
...
- Fix chi2 calculation bug in calibration.py (remove incorrect
coeffs[::-1] reversal in np.polyval)
- Fix broken beta_spectrum/cli.py (remove orphaned detector response
add_argument calls and unused imports)
- Add ExpSpectrum.apply_calibration() and EnergyCalibrator.from_am241_spectrum()
- Add LivetimeDetermination class for pulser-based livetime
- Add SpectrumPipeline orchestration (read→subtract→calibrate→livetime→validate)
- Add ROOT I/O with PyROOT primary + uproot fallback
- Add bs_exp CLI with process, livetime, export subcommands
- Add exp_calibration notebook with pre-calibration visualization
- Add comprehensive tests (73 passing)
- Add bs_exp console script and [root] extra to pyproject.toml
- Remove obsolete detector_response module and unused notebooks
2026-05-21 16:01:25 +03:00
unzhakov
745bbae4cd
refactor: rename 'analyzer' to 'visualize' — analysis belongs to fitter module
2026-05-17 01:33:13 +03:00
unzhakov
f05a2de1b8
refactor: move BetaSpectrumAnalyzer to separate analyzer module
2026-05-16 20:41:58 +03:00
unzhakov
76d183b913
test: Phase 5 — advanced improvements
...
1. pytest-timeout (30s, thread-based) added to pyproject.toml
- Prevents hangs in CI
- timeout_method='thread' for clean cancellation
2. hypothesis added for property-based edge case discovery
- tests/common/test_hypothesis_tests.py: 5 tests
- Fermi: random Z, A, W — checks stability, monotonicity
- Phase space: random W0, W — checks threshold/endpoint properties
- Hypothesis already found real bugs:
* Fermi monotonicity fails for Z < 10 (expected — finite-size dominates)
* Phase space negative when W > W0 (test constrains W < W0)
3. pytest.mark.requires_ensdf marker added to TestPaceENSDFIntegration
- Replaces bare @pytest.mark.skipif with documented marker
- Allows running only ENSDF tests: pytest -m requires_ensdf
4. Updated test-migration-todo.md: Phase 5 complete
Final state: 256 tests passing (250 regular + 6 hypothesis + 6 skipped ENSDF)
2026-05-15 16:48:46 +03:00
unzhakov
c78d0655a0
test: complete migration to structured test suite
...
Phase 1: Removed 6 duplicate old test files (fermi, finite_size, screening,
exchange, radiative, phase_space) — their tests are now in physics/ and quality/
using shared helpers from common/.
Phase 2: Migrated remaining 7 old test files:
- test_spectrum.py → integration/test_spectrum_pipeline.py (integration tests)
- test_fitter.py → physics/test_fitter.py (fit quality tests)
- test_cw_extractor.py → physics/test_cw_extractor.py (extraction accuracy)
- test_multi_branch.py → physics/test_multi_branch.py (branching physics)
- test_detector_response.py → physics/ + quality/ (split into physics + API)
- test_nuclear_data.py → quality/test_nuclear_data.py (parsing/API)
- test_logging_utils.py → quality/test_logging_utils.py (API tests)
Removed 12 old flat files, created 4 new files.
Total: 251 tests passing (6 skipped), down from 230 → 251 (net +21
from better coverage, not duplicates).
Test structure:
- tests/common/ — shared property/API helpers (eliminates ~18 duplicates)
- tests/physics/ — 10 files, unique physics behavior tests
- tests/quality/ — 8 files, API contract + parsing tests
- tests/integration/ — 1 file, end-to-end pipeline tests
2026-05-15 15:52:50 +03:00
unzhakov
4b08df3873
test: create new test architecture with shared property/API tests
...
- Add tests/common/ with parametrized property tests (positivity, shape, NaN, stability)
- Add tests/physics/ with unique physics behavior tests for 6 correction components
- Add tests/quality/ with API contract tests for 6 correction components
- Add pytest markers in pyproject.toml: property, physics, api, quality, integration
- New tests: 94 tests passing (physics + quality + common helpers)
- Old tests in tests/ root still present — migration in progress
- Total: 261 tests collected (230 old + 94 new - 63 duplicates removed)
The shared helpers eliminate 18 duplicate test patterns across correction
components. Each component now has:
- tests/physics/test_<name>.py — unique physics behavior
- tests/quality/test_api_<name>.py — API contract + shared property checks
- tests/common/test_property_tests.py — shared helpers (imported, not duplicated)
2026-05-15 15:04:52 +03:00