From 38c1a48e010c063c6f52e4dae209b090dbebfe41 Mon Sep 17 00:00:00 2001 From: XANTRONIX Industrial Date: Sun, 9 Mar 2025 11:58:09 -0400 Subject: [PATCH] Explicitly specify manner of intersection --- lib/xmet/series.py | 14 ++++++++------ lib/xmet/sounding.py | 4 ++-- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/lib/xmet/series.py b/lib/xmet/series.py index 2835594..6e502b7 100644 --- a/lib/xmet/series.py +++ b/lib/xmet/series.py @@ -1,24 +1,26 @@ +import enum from typing import Self from xmet.util import cmp from xmet.list import nearest +class SeriesIntersection(enum.Enum): + GREATER = -1 + EQUAL = 0 + LESSER = 1 + class Series(dict): def __init__(self): super().__init__() - def intersect(self, series: Self) -> tuple[float]: + def intersect(self, series: Self, intersection: SeriesIntersection) -> tuple[float]: pairs = nearest(sorted(self.keys(), reverse=True), sorted(series.keys(), reverse=True)) - sign_last = None - for pair in pairs: v1, v2 = self[pair[0]], series[pair[1]] sign = cmp(v1, v2) - if sign == 0 or (sign_last is not None and sign_last != sign): + if sign == intersection.value: return v1, pair[0] - - sign_last = sign diff --git a/lib/xmet/sounding.py b/lib/xmet/sounding.py index 22d373f..c703ab6 100644 --- a/lib/xmet/sounding.py +++ b/lib/xmet/sounding.py @@ -4,7 +4,7 @@ import shapely from xmet.db import Database, DatabaseTable, DatabaseOrder from xmet.coord import COORD_SYSTEM from xmet.list import nearest -from xmet.series import Series +from xmet.series import Series, SeriesIntersection from xmet.thermo import follow_dry_adiabat, \ follow_moist_adiabat, \ follow_saturated_mixing_ratio @@ -218,7 +218,7 @@ class Sounding(DatabaseTable): saturated_mr_line = follow_saturated_mixing_ratio(self.samples[0].dewpoint, self.samples[0].pressure) - lcl = dry_adiabat.intersect(saturated_mr_line) + lcl = dry_adiabat.intersect(saturated_mr_line, SeriesIntersection.LESSER) lfc = self.find_lfc(lcl[0], lcl[1]) el = self.find_el(lfc[0], lfc[1])