From 0cf2e5c487f297b6044fc2455572e40e9998034f Mon Sep 17 00:00:00 2001 From: Chris Mackey Date: Mon, 31 Aug 2026 11:52:03 -0700 Subject: [PATCH 1/3] fix(sunpath): Fix floating point tolerance issue with solar noon --- ladybug/sunpath.py | 4 ++-- tests/sunpath_test.py | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/ladybug/sunpath.py b/ladybug/sunpath.py index 6b8bc1f6..2962d6f9 100644 --- a/ladybug/sunpath.py +++ b/ladybug/sunpath.py @@ -296,8 +296,8 @@ def calculate_sun_from_date_time(self, datetime, is_solar_time=False): azimuth = (math.degrees(math.acos(az_init)) + 180) % 360 else: azimuth = (540 - math.degrees(math.acos(az_init))) % 360 - except ValueError: # perfect solar noon yields math domain error - azimuth = 180 + except ValueError: # perfect solar noon (az_init == +/-1) yields math domain error + azimuth = 180 if az_init > 0 else 0 # create the sun for this hour return Sun(datetime, altitude, azimuth, is_solar_time, is_daylight_saving, diff --git a/tests/sunpath_test.py b/tests/sunpath_test.py index ad932296..dd5ee992 100644 --- a/tests/sunpath_test.py +++ b/tests/sunpath_test.py @@ -150,6 +150,25 @@ def test_solar_time(): assert sun.azimuth == approx(270, rel=1e-2) +def test_calculate_sun_with_solar_time(): + """Test the calculate_sun methods with solar time.""" + ocean_s = Location('Test', 'Southern Ocean', latitude=-50, longitude=0, time_zone=0) + sp = Sunpath.from_location(ocean_s) + + sun = sp.calculate_sun(1, 21, 12, True) + assert sun.azimuth == 0 + sun = sp.calculate_sun(2, 21, 12, True) + assert sun.azimuth == 0 + + ocean_s = Location('Test', 'Northern Ocean', latitude=50, longitude=0, time_zone=0) + sp = Sunpath.from_location(ocean_s) + + sun = sp.calculate_sun(1, 21, 12, True) + assert sun.azimuth == 180 + sun = sp.calculate_sun(2, 21, 12, True) + assert sun.azimuth == 180 + + def test_daylight_saving(): """Test the applicaiton of daylight saving time.""" nyc = Location('New_York', country='USA', latitude=40.72, longitude=-74.02, From d02473d81f6fb4779f16c823b3570685e4d492bc Mon Sep 17 00:00:00 2001 From: Chris Mackey Date: Mon, 31 Aug 2026 12:23:24 -0700 Subject: [PATCH 2/3] fix(ddy): Ensure comments do not block DDY serialization --- ladybug/ddy.py | 7 ++- tests/assets/ddy/tokyo.ddy | 88 +++++++++++++++++++------------------- tests/ddy_test.py | 2 +- 3 files changed, 51 insertions(+), 46 deletions(-) diff --git a/ladybug/ddy.py b/ladybug/ddy.py index 516b0639..d00308cf 100644 --- a/ladybug/ddy.py +++ b/ladybug/ddy.py @@ -93,7 +93,12 @@ def from_ddy_file(cls, file_path): # build design day and location objects location = Location.from_idf(loc_matches[0][0]) - ddays = [DesignDay.from_idf(match[0], location) for match in dday_matches] + ddays = [] + for match in dday_matches: + try: + ddays.append(DesignDay.from_idf(match[0], location)) + except Exception: + pass # probably a design day that has been commented out finally: ddywin.close() diff --git a/tests/assets/ddy/tokyo.ddy b/tests/assets/ddy/tokyo.ddy index 22db114f..0e091e81 100644 --- a/tests/assets/ddy/tokyo.ddy +++ b/tests/assets/ddy/tokyo.ddy @@ -15,11 +15,11 @@ ! Using Design Conditions from "Climate Design Data 2009 ASHRAE Handbook" ! TOKYO HYAKURI_JPN Extreme Annual Wind Speeds, 1%=9.7m/s, 2.5%=8.3m/s, 5%=7.3m/s - ! TOKYO HYAKURI_JPN Extreme Annual Temperatures, Max Drybulb=-9.5°C Min Drybulb=34.1°C + ! TOKYO HYAKURI_JPN Extreme Annual Temperatures, Max Drybulb=-9.5�C Min Drybulb=34.1�C ! TOKYO HYAKURI_JPN Annual Heating Design Conditions Wind Speed=1.1m/s Wind Dir=0 ! Coldest Month=JAN - ! TOKYO HYAKURI_JPN Annual Heating 99.6%, MaxDB=-6.9°C + ! TOKYO HYAKURI_JPN Annual Heating 99.6%, MaxDB=-6.9�C SizingPeriod:DesignDay, TOKYO HYAKURI Ann Htg 99.6% Condns DB, !- Name 1, !- Month @@ -48,36 +48,36 @@ , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) 0.00; !- Clearness {0.0 to 1.1} - ! TOKYO HYAKURI_JPN Annual Heating 99%, MaxDB=-5.1°C - SizingPeriod:DesignDay, - TOKYO HYAKURI Ann Htg 99% Condns DB, !- Name - 1, !- Month - 21, !- Day of Month - WinterDesignDay,!- Day Type - -5.1, !- Maximum Dry-Bulb Temperature {C} - 0.0, !- Daily Dry-Bulb Temperature Range {C} - DefaultMultipliers, !- Dry-Bulb Temperature Range Modifier Type - , !- Dry-Bulb Temperature Range Modifier Schedule Name - Wetbulb, !- Humidity Condition Type - -5.1, !- Wetbulb at Maximum Dry-Bulb {C} - , !- Humidity Indicating Day Schedule Name - , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir} - , !- Enthalpy at Maximum Dry-Bulb {J/kg} - , !- Daily Wet-Bulb Temperature Range {deltaC} - 100905., !- Barometric Pressure {Pa} - 1.1, !- Wind Speed {m/s} design conditions vs. traditional 6.71 m/s (15 mph) - 0, !- Wind Direction {Degrees; N=0, S=180} - No, !- Rain {Yes/No} - No, !- Snow on ground {Yes/No} - No, !- Daylight Savings Time Indicator - ASHRAEClearSky, !- Solar Model Indicator - , !- Beam Solar Day Schedule Name - , !- Diffuse Solar Day Schedule Name - , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) - , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) - 0.00; !- Clearness {0.0 to 1.1} + ! TOKYO HYAKURI_JPN Annual Heating 99%, MaxDB=-5.1�C + !SizingPeriod:DesignDay, + ! TOKYO HYAKURI Ann Htg 99% Condns DB, !- Name + ! 1, !- Month + ! 21, !- Day of Month + ! WinterDesignDay,!- Day Type + ! -5.1, !- Maximum Dry-Bulb Temperature {C} + ! 0.0, !- Daily Dry-Bulb Temperature Range {C} + !DefaultMultipliers, !- Dry-Bulb Temperature Range Modifier Type + ! , !- Dry-Bulb Temperature Range Modifier Schedule Name + ! Wetbulb, !- Humidity Condition Type + ! -5.1, !- Wetbulb at Maximum Dry-Bulb {C} + ! , !- Humidity Indicating Day Schedule Name + ! , !- Humidity Ratio at Maximum Dry-Bulb {kgWater/kgDryAir} + ! , !- Enthalpy at Maximum Dry-Bulb {J/kg} + ! , !- Daily Wet-Bulb Temperature Range {deltaC} + ! 100905., !- Barometric Pressure {Pa} + ! 1.1, !- Wind Speed {m/s} design conditions vs. traditional 6.71 m/s (15 mph) + ! 0, !- Wind Direction {Degrees; N=0, S=180} + ! No, !- Rain {Yes/No} + ! No, !- Snow on ground {Yes/No} + ! No, !- Daylight Savings Time Indicator + ! ASHRAEClearSky, !- Solar Model Indicator + ! , !- Beam Solar Day Schedule Name + ! , !- Diffuse Solar Day Schedule Name + ! , !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) + ! , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) + ! 0.00; !- Clearness {0.0 to 1.1} - ! TOKYO HYAKURI_JPN Annual Humidification 99.6% Design Conditions DP=>MCDB, DP=-12.8°C + ! TOKYO HYAKURI_JPN Annual Humidification 99.6% Design Conditions DP=>MCDB, DP=-12.8�C SizingPeriod:DesignDay, TOKYO HYAKURI Ann Hum_n 99.6% Condns DP=>MCDB, !- Name 1, !- Month @@ -106,7 +106,7 @@ , !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) 0.00; !- Clearness {0.0 to 1.1} - ! TOKYO HYAKURI_JPN Annual Humidification 99% Design Conditions DP=>MCDB, DP=-11.1°C + ! TOKYO HYAKURI_JPN Annual Humidification 99% Design Conditions DP=>MCDB, DP=-11.1�C SizingPeriod:DesignDay, TOKYO HYAKURI Ann Hum_n 99% Condns DP=>MCDB, !- Name 1, !- Month @@ -195,7 +195,7 @@ ! TOKYO HYAKURI Annual Cooling Design Conditions Wind Speed=4.8m/s Wind Dir=210 ! Hottest Month=AUG - ! TOKYO HYAKURI_JPN Annual Cooling (DB=>MWB) .4%, MaxDB=32.1°C MWB=26°C + ! TOKYO HYAKURI_JPN Annual Cooling (DB=>MWB) .4%, MaxDB=32.1�C MWB=26�C SizingPeriod:DesignDay, TOKYO HYAKURI Ann Clg .4% Condns DB=>MWB, !- Name 8, !- Month @@ -223,7 +223,7 @@ 0.546, !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) 1.827; !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) - ! TOKYO HYAKURI_JPN Annual Cooling (DB=>MWB) 1%, MaxDB=30.9°C MWB=25.8°C + ! TOKYO HYAKURI_JPN Annual Cooling (DB=>MWB) 1%, MaxDB=30.9�C MWB=25.8�C SizingPeriod:DesignDay, TOKYO HYAKURI Ann Clg 1% Condns DB=>MWB, !- Name 8, !- Month @@ -251,7 +251,7 @@ 0.546, !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) 1.827; !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) - ! TOKYO HYAKURI_JPN Annual Cooling (DB=>MWB) 2%, MaxDB=29.2°C MWB=24.8°C + ! TOKYO HYAKURI_JPN Annual Cooling (DB=>MWB) 2%, MaxDB=29.2�C MWB=24.8�C SizingPeriod:DesignDay, TOKYO HYAKURI Ann Clg 2% Condns DB=>MWB, !- Name 8, !- Month @@ -279,7 +279,7 @@ 0.546, !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) 1.827; !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) - ! TOKYO HYAKURI_JPN Annual Cooling (WB=>MDB) .4%, MDB=30.6°C WB=26.8°C + ! TOKYO HYAKURI_JPN Annual Cooling (WB=>MDB) .4%, MDB=30.6�C WB=26.8�C SizingPeriod:DesignDay, TOKYO HYAKURI Ann Clg .4% Condns WB=>MDB, !- Name 8, !- Month @@ -307,7 +307,7 @@ 0.546, !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) 1.827; !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) - ! TOKYO HYAKURI_JPN Annual Cooling (WB=>MDB) 1%, MDB=29.6°C WB=26.1°C + ! TOKYO HYAKURI_JPN Annual Cooling (WB=>MDB) 1%, MDB=29.6�C WB=26.1�C SizingPeriod:DesignDay, TOKYO HYAKURI Ann Clg 1% Condns WB=>MDB, !- Name 8, !- Month @@ -335,7 +335,7 @@ 0.546, !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) 1.827; !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) - ! TOKYO HYAKURI_JPN Annual Cooling (WB=>MDB) 2%, MDB=28.7°C WB=25.5°C + ! TOKYO HYAKURI_JPN Annual Cooling (WB=>MDB) 2%, MDB=28.7�C WB=25.5�C SizingPeriod:DesignDay, TOKYO HYAKURI Ann Clg 2% Condns WB=>MDB, !- Name 8, !- Month @@ -363,7 +363,7 @@ 0.546, !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) 1.827; !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) - ! TOKYO HYAKURI_JPN Annual Cooling (DP=>MDB) .4%, MDB=29.3°C DP=26°C HR=0.0214 + ! TOKYO HYAKURI_JPN Annual Cooling (DP=>MDB) .4%, MDB=29.3�C DP=26�C HR=0.0214 SizingPeriod:DesignDay, TOKYO HYAKURI Ann Clg .4% Condns DP=>MDB, !- Name 8, !- Month @@ -391,7 +391,7 @@ 0.546, !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) 1.827; !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) - ! TOKYO HYAKURI_JPN Annual Cooling (DP=>MDB) 1%, MDB=28.3°C DP=25.1°C HR=0.0203 + ! TOKYO HYAKURI_JPN Annual Cooling (DP=>MDB) 1%, MDB=28.3�C DP=25.1�C HR=0.0203 SizingPeriod:DesignDay, TOKYO HYAKURI Ann Clg 1% Condns DP=>MDB, !- Name 8, !- Month @@ -419,7 +419,7 @@ 0.546, !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) 1.827; !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) - ! TOKYO HYAKURI_JPN Annual Cooling (DP=>MDB) 2%, MDB=27.1°C DP=24.2°C HR=0.0192 + ! TOKYO HYAKURI_JPN Annual Cooling (DP=>MDB) 2%, MDB=27.1�C DP=24.2�C HR=0.0192 SizingPeriod:DesignDay, TOKYO HYAKURI Ann Clg 2% Condns DP=>MDB, !- Name 8, !- Month @@ -447,7 +447,7 @@ 0.546, !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) 1.827; !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) - ! TOKYO HYAKURI_JPN Annual Cooling (Enthalpy=>MDB) .4%, MDB=30.6°C Enthalpy=84800.0J/kg + ! TOKYO HYAKURI_JPN Annual Cooling (Enthalpy=>MDB) .4%, MDB=30.6�C Enthalpy=84800.0J/kg SizingPeriod:DesignDay, TOKYO HYAKURI Ann Clg .4% Condns Enth=>MDB, !- Name 8, !- Month @@ -475,7 +475,7 @@ 0.546, !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) 1.827; !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) - ! TOKYO HYAKURI_JPN Annual Cooling (Enthalpy=>MDB) 1%, MDB=29.6°C Enthalpy=81400.0J/kg + ! TOKYO HYAKURI_JPN Annual Cooling (Enthalpy=>MDB) 1%, MDB=29.6�C Enthalpy=81400.0J/kg SizingPeriod:DesignDay, TOKYO HYAKURI Ann Clg 1% Condns Enth=>MDB, !- Name 8, !- Month @@ -503,7 +503,7 @@ 0.546, !- ASHRAE Clear Sky Optical Depth for Beam Irradiance (taub) 1.827; !- ASHRAE Clear Sky Optical Depth for Diffuse Irradiance (taud) - ! TOKYO HYAKURI_JPN Annual Cooling (Enthalpy=>MDB) 2%, MDB=28.6°C Enthalpy=78400.0J/kg + ! TOKYO HYAKURI_JPN Annual Cooling (Enthalpy=>MDB) 2%, MDB=28.6�C Enthalpy=78400.0J/kg SizingPeriod:DesignDay, TOKYO HYAKURI Ann Clg 2% Condns Enth=>MDB, !- Name 8, !- Month diff --git a/tests/ddy_test.py b/tests/ddy_test.py index 0244c4c1..2315a032 100644 --- a/tests/ddy_test.py +++ b/tests/ddy_test.py @@ -73,7 +73,7 @@ def test_standard_ddy_properties(): assert ddy.location.time_zone == 9 assert ddy.location.elevation == 35 - assert len(ddy.design_days) == 18 + assert len(ddy.design_days) == 17 for des_day in ddy.design_days: assert isinstance(des_day, DesignDay) assert len(ddy.filter_by_keyword('.4%')) == 4 From 4a1f2f1171afd66bce6373ac680e2f49387cdd4c Mon Sep 17 00:00:00 2001 From: Chris Mackey Date: Mon, 31 Aug 2026 12:34:43 -0700 Subject: [PATCH 3/3] fix(deps): Bump click for security patches Resolves https://github.com/ladybug-tools/ladybug/issues/661 --- .github/workflows/ci.yaml | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index a5fa5d0c..e69292ed 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -9,7 +9,7 @@ jobs: name: Unit tests strategy: matrix: - python-version: ['3.10', '3.12'] + python-version: ['3.10', '3.13'] os: [macos-latest, ubuntu-latest, windows-latest] runs-on: ${{ matrix.os }} diff --git a/requirements.txt b/requirements.txt index d1ed967a..8d0ebb04 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ ladybug-geometry==1.35.4 click==7.1.2;python_version<'3.8' -click==8.1.7;python_version>='3.8' +click==8.3.3;python_version>='3.8'