from __future__ import annotations import sys import unittest from pathlib import Path import numpy as np SCRIPTS_DIR = Path(__file__).resolve().parents[1] / "scripts" sys.path.insert(0, str(SCRIPTS_DIR)) from summarize_county_gridmet_humidity import ( # noqa: E402 DEFAULT_HEAT_INDEX_THRESHOLD_F, _heat_index_f, ) class HeatIndexTests(unittest.TestCase): def test_matches_nws_example(self) -> None: result = _heat_index_f(np.array([100.0]), np.array([55.0])) self.assertAlmostEqual(result[0], 124.0, delta=0.5) def test_uses_simple_formula_below_regression_range(self) -> None: result = _heat_index_f(np.array([70.0]), np.array([50.0])) self.assertAlmostEqual(result[0], 69.525, places=3) def test_default_threshold_is_extreme_caution_boundary(self) -> None: heat_index = _heat_index_f( np.array([85.0, 90.0]), np.array([40.0, 55.0]), ) self.assertEqual(DEFAULT_HEAT_INDEX_THRESHOLD_F, 90.0) self.assertEqual( (heat_index >= DEFAULT_HEAT_INDEX_THRESHOLD_F).tolist(), [False, True], ) def test_relative_humidity_is_clamped_to_physical_range(self) -> None: result = _heat_index_f( np.array([90.0, 90.0]), np.array([-5.0, 105.0]), ) expected = _heat_index_f( np.array([90.0, 90.0]), np.array([0.0, 100.0]), ) np.testing.assert_allclose(result, expected) if __name__ == "__main__": unittest.main()