Skip to content

Commit 49a5708

Browse files
authored
Merge pull request #41 from quantifyearth/mwd-misc
Small misc fixes
2 parents 18ac9b8 + 1b7ff6a commit 49a5708

File tree

5 files changed

+46
-30
lines changed

5 files changed

+46
-30
lines changed

CHANGES.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,14 @@
1+
## v1.1.2 (12/01/2026)
2+
3+
### Changed
4+
5+
* Changed highest supported GDAL from 3.11.x to 3.12.x.
6+
* Clean up species info data when exporting it.
7+
8+
### Fixed
9+
10+
* Instruct mypy to ignore GDAL for typing.
11+
112
## v1.1.1 (02/12/2025)
213

314
### Changed

aoh/aohcalc.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ def aohcalc(
6161

6262
# We drop the geometry as that's a lot of data, more than the raster often
6363
species_info = filtered_species_info.drop('geometry', axis=1)
64-
manifest = {k: v[0] for (k, v) in species_info.items()}
64+
manifest = {k: v[0].item() if hasattr(v[0], 'item') else v[0] for (k, v) in species_info.items()}
6565

6666
species_id = filtered_species_info.id_no.values[0]
6767
try:

aoh/cleaning.py

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -15,40 +15,40 @@ def tidy_data(
1515
"""Tidy up the data as per Daniele Busana et al"""
1616

1717
# Lower elevation higher than upper elevation
18-
if not pd.isna(row.elevation_lower) and not pd.isna(row.elevation_upper):
19-
if row.elevation_lower > row.elevation_upper:
20-
row.elevation_lower = elevation_min
21-
row.elevation_upper = elevation_max
18+
if not pd.isna(row['elevation_lower']) and not pd.isna(row['elevation_upper']):
19+
if row['elevation_lower'] > row['elevation_upper']:
20+
row['elevation_lower'] = elevation_min
21+
row['elevation_upper'] = elevation_max
2222

2323
# Missing lower and/or upper elevation
24-
if pd.isna(row.elevation_lower):
25-
row.elevation_lower = elevation_min
26-
if not pd.isna(row.elevation_upper) and row.elevation_upper < elevation_min:
27-
row.elevation_upper = elevation_max
28-
if pd.isna(row.elevation_upper):
29-
row.elevation_upper = elevation_max
30-
if row.elevation_lower > elevation_max:
31-
row.elevation_lower = elevation_min
24+
if pd.isna(row['elevation_lower']):
25+
row['elevation_lower'] = elevation_min
26+
if not pd.isna(row['elevation_upper']) and row['elevation_upper'] < elevation_min:
27+
row['elevation_upper'] = elevation_max
28+
if pd.isna(row['elevation_upper']):
29+
row['elevation_upper'] = elevation_max
30+
if row['elevation_lower'] > elevation_max:
31+
row['elevation_lower'] = elevation_min
3232

3333
# Lower elevation < -500 and/or upper elevation > 9000
34-
row.elevation_lower = max(elevation_min, row.elevation_lower)
35-
row.elevation_upper = min(elevation_max, row.elevation_upper)
34+
row['elevation_lower'] = max(elevation_min, row['elevation_lower'])
35+
row['elevation_upper'] = min(elevation_max, row['elevation_upper'])
3636

3737
# Small difference (<50m) between lower and upper elevation
38-
elevation_diff = row.elevation_upper - row.elevation_lower
38+
elevation_diff = row['elevation_upper'] - row['elevation_lower']
3939
if elevation_diff < elevation_seperation:
4040
spare = elevation_seperation - elevation_diff
4141
adjust = math.ceil(spare / 2)
42-
row.elevation_lower -= adjust
43-
row.elevation_upper += adjust
44-
45-
if row.elevation_lower < elevation_min:
46-
adjust = elevation_min - row.elevation_lower
47-
row.elevation_lower += adjust
48-
row.elevation_upper += adjust
49-
elif row.elevation_upper > elevation_max:
50-
adjust = row.elevation_upper - elevation_max
51-
row.elevation_lower -= adjust
52-
row.elevation_upper -= adjust
42+
row['elevation_lower'] -= adjust
43+
row['elevation_upper'] += adjust
44+
45+
if row['elevation_lower'] < elevation_min:
46+
adjust = elevation_min - row['elevation_lower']
47+
row['elevation_lower'] += adjust
48+
row['elevation_upper'] += adjust
49+
elif row['elevation_upper'] > elevation_max:
50+
adjust = row['elevation_upper'] - elevation_max
51+
row['elevation_lower'] -= adjust
52+
row['elevation_upper'] -= adjust
5353

5454
return row

aoh/validation/validate_map_prevalence.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
import argparse
55
from pathlib import Path
6+
from typing import cast
67

78
import pandas as pd
89

@@ -22,7 +23,7 @@ def generate_results_summary(aoh_df: pd.DataFrame, outliers: pd.DataFrame) -> st
2223
)
2324

2425
# Count species by class
25-
class_counts = aoh_df.groupby('class_name').size().to_dict()
26+
class_counts = cast(dict[str,int], aoh_df.groupby('class_name').size().to_dict())
2627
outlier_counts = outliers.groupby('class_name').size().to_dict()
2728

2829
for class_name in sorted(class_counts.keys()):

pyproject.toml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "aoh"
7-
version = "1.1.1"
7+
version = "1.1.2"
88
description = "A library for calculating Area of Habitat for species distribution mapping"
99
authors = [
1010
{name = "Michael Dales", email = "mwd24@cam.ac.uk"}
@@ -32,7 +32,7 @@ dependencies = [
3232
"yirgacheffe>=1.11.1,<2.0",
3333
"zenodo_search",
3434
"pandas>=2.0,<3.0",
35-
"gdal[numpy]>=3.8,<3.12",
35+
"gdal[numpy]>=3.8,<3.13",
3636
"tomli",
3737
]
3838

@@ -83,3 +83,7 @@ packages = ["aoh", "aoh.summaries", "aoh.validation"]
8383

8484
[tool.setuptools.package-data]
8585
aoh = ["py.typed"]
86+
87+
[[tool.mypy.overrides]]
88+
module = "osgeo.*"
89+
ignore_missing_imports = true

0 commit comments

Comments
 (0)