Update pint requirement from >=0.25.2 to >=0.25.3 - #4
Merged
Conversation
Updates the requirements on [pint](https://github.com/hgrecco/pint) to permit the latest version. - [Changelog](https://github.com/hgrecco/pint/blob/master/CHANGES) - [Commits](hgrecco/pint@0.25.2...0.25.3) --- updated-dependencies: - dependency-name: pint dependency-version: 0.25.3 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com>
wpfleger96
added a commit
that referenced
this pull request
Aug 3, 2026
…context, compliance denominator Address all Thufir pass-1 CRITICAL and IMPORTANT findings: CRITICAL — BreathService cross-profile read isolation - Add profile_id to BreathService.__init__ (required arg). - _resolve_session_for_date, get_breath_table, find_windows, compare_epochs, get_nightly_summary, get_analysis_status all join through Device.profile_id == self._profile_id. - get_device_capabilities verifies device ownership; returns null/empty for foreign devices. - fetch_waveform_window_raw accepts optional profile_id and enforces ownership when supplied. - get_waveform_window passes self._profile_id through. - 7 two-profile adversarial tests: foreign session/device IDs, date auto-selection, capabilities, find_windows, compare_epochs, waveform. IMPORTANT — AnalysisFacade latest-run selector inconsistency - analysis_facade.py: add id DESC tie-breaker to all 3 row_number() ORDER BY clauses (list_status, delete_latest, get_analysis_result). IMPORTANT — compliance denominator - get_nightly_range_summary: divide by n_calendar not n_nights. IMPORTANT — waveform corruption swallowed as CHANNEL_ABSENT - compute_waveform_window: re-raise ValueError (corrupt blob / sample mismatch); only unknown exceptions collapse to missing_channels. IMPORTANT — contextual event values were session means not at-event - get_contextual_events: use waveform window seam (pressure/leak ±5 s, MV over prior 120 s). null + NOT_AVAILABLE when channel absent. IMPORTANT — CA analysis used proxy instead of persisted data - get_ca_analysis: periodic_breathing_pct from persisted periodic_breathing_episodes (total duration / session duration * 100). MV rolling variance from MV waveform binned into 10-min windows. IMPORTANT — breath-table zero-coercion and missing peak_exp_flow - Add peak_exp_flow_lpm to models.Breath (nullable, no migration per ruling #4), ComputedBreath, and store_result(). - _build_computed_breaths threads peak_expiratory_flow through. - BreathRow fields (timing, amplitude, shape, class) made nullable; get_breath_table passes None instead of or-0.0/or-1/or-False. IMPORTANT — compare_epochs metrics filter and cross-epoch identity - metrics filter: only requested DistributionMetric fields are computed; unrequested fields receive null DistributionStats. - Cross-epoch CROSS_VERSION_REFUSAL_KEYS comparison added at return. MINOR - Replace datetime.utcfromtimestamp deprecation in TZ test with datetime.fromtimestamp(epoch, tz=UTC).replace(tzinfo=None). Co-authored-by: Will Pfleger <pfleger.will@gmail.com> Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
wpfleger96
added a commit
that referenced
this pull request
Aug 3, 2026
…metrics, epoch refusal, capabilities, validation Addresses all Thufir pass-2 CRITICAL and IMPORTANT findings. CRITICAL: - Add DeviceAmbiguityError raised when ≥2 devices have sessions on same date - Add _resolve_device() centralizing profile-scoped device resolution - Add _fetch_day_sessions() returning all sessions for a resolved device/date - Add _reduce_day_status() pure reducer implementing 5-case precedence: mixed identities → MIXED_VERSION; all-OK → OK; all-NOT_RUN → NOT_RUN; all-STALE → STALE; anything else (incl. stale+not-run) → PARTIAL - Update find_windows(), get_nightly_summary(), get_nightly_range_summary(), compare_epochs(), get_contextual_events(), get_ca_analysis() to use helpers IMPORTANT #4 (status test): - Rename test_stale_and_not_run_find_windows_status_is_stale to _is_partial - Flip expectation to PARTIAL (stale+not-run → PARTIAL per plan §1 line 864) - Add plan-line citation comments to all status/precedence assertions IMPORTANT #5 (compliance): - get_nightly_summary() reads Day.total_therapy_hours instead of summing Session.duration_seconds - get_nightly_range_summary() validates date_end >= date_start IMPORTANT #6 (capabilities): - rx_keys_present uses RX_KEYS from rx_tracker (not CROSS_VERSION_REFUSAL_KEYS) - Add list_supported_models() to ParserRegistry aggregating parser metadata - get_device_capabilities() uses list_supported_models() IMPORTANT #7 (epoch refusal): - Move RX homogeneity check before any breath queries - Check ALL contributing sessions per night (not just first session) - Immediately refuse with null distributions when RX violation detected IMPORTANT #8 (corruption propagation): - get_contextual_events() and get_ca_analysis() narrow except-Exception catches to re-raise ValueError (corrupt blob) while swallowing absent-channel errors IMPORTANT #9 (input validation): - get_contextual_events() validates event_types (non-empty strings or None) and min_duration (>= 0 or None) IMPORTANT #2 (CA metrics): - Implement preceding_mv_slope via linear regression over prior 120s MV - Implement ps_delivered_cmh2o via mean(THERAPY_PRESSURE - EPAP) over ±5s - Implement stability_index as CV (std/mean) of MV over prior 120s - Fix WaveformWindowRequest window_cap_seconds bypass for full-session MV fetch - get_ca_analysis() and get_contextual_events() now aggregate across ALL sessions New tests: - TestSameProfileTwoDevice: DeviceAmbiguityError for methods without device_id - TestSplitNight: contextual events and CA analysis return from both sessions - TestContextualEventsInputValidation: invalid event_types and min_duration - TestNightlyRangeDateValidation: reversed date range raises ValueError Co-authored-by: Will Pfleger <pfleger.will@gmail.com> Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Updates the requirements on pint to permit the latest version.
Changelog
Sourced from pint's changelog.
... (truncated)
Commits
5e79411Back to development: 0.26046ae5dprep for release 0.25.3625d53bprep for release 0.25.2d4961b9Converting units without default definition to prefixed forms (#2261) (#2282)df412efSupport numpy functionsvdot,inner,outer,linalg.outer,matvec, `...ea5a863Enh: Defer expensive loading of dask.array (#2276)86f37c02256 as ratio (#2268)40936b9Add atomic unit of electric field gradient (#2270)6049a9cmake parse_expression always return Quantity (#2260)936a13dto_preferred(): Replace mip with scipy (#2264)Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore this major versionwill close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor versionwill close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependencywill close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)