Skip to content

Commit

Permalink
solving checkoutofbounds
Browse files Browse the repository at this point in the history
  • Loading branch information
uriii3 committed Feb 18, 2025
1 parent e25cc1f commit ba9a2af
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 51 deletions.
12 changes: 0 additions & 12 deletions copernicusmarine/catalogue_parser/request_structure.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,6 @@ class DatasetTimeAndSpaceSubset:
maximum_depth: Optional[float] = None
start_datetime: Optional[datetime] = None
end_datetime: Optional[datetime] = None
minimum_x: Optional[float] = None
maximum_x: Optional[float] = None
minimum_y: Optional[float] = None
maximum_y: Optional[float] = None


@dataclass
Expand All @@ -67,10 +63,6 @@ class SubsetRequest:
vertical_axis: VerticalAxis = DEFAULT_VERTICAL_AXIS
start_datetime: Optional[datetime] = None
end_datetime: Optional[datetime] = None
minimum_x: Optional[float] = None
maximum_x: Optional[float] = None
minimum_y: Optional[float] = None
maximum_y: Optional[float] = None
coordinates_selection_method: CoordinatesSelectionMethod = (
DEFAULT_COORDINATES_SELECTION_METHOD
)
Expand Down Expand Up @@ -138,10 +130,6 @@ def get_time_and_space_subset(
maximum_depth=self.maximum_depth,
start_datetime=self.start_datetime,
end_datetime=self.end_datetime,
minimum_x=self.minimum_x,
maximum_x=self.maximum_x,
minimum_y=self.minimum_y,
maximum_y=self.maximum_y,
)

def from_file(self, filepath: pathlib.Path):
Expand Down
90 changes: 51 additions & 39 deletions copernicusmarine/download_functions/subset_xarray.py
Original file line number Diff line number Diff line change
Expand Up @@ -694,51 +694,63 @@ def check_dataset_subset_bounds(
else:
raise ServiceNotSupported(service_name)

for coordinate_label in COORDINATES_LABEL["latitude"]:
if coordinate_label in dataset.sizes:
latitudes = dataset_coordinates[coordinate_label].values
if (
"y" in coordinates_name_and_axis.keys()
): # latitude and y are the same, simple
coordinate_label = coordinates_name_and_axis["y"]
latitudes = dataset_coordinates[coordinate_label].values
user_minimum_coordinate_value = (
dataset_subset.minimum_latitude
if dataset_subset.minimum_latitude is not None
else latitudes.min()
)
user_maximum_coordinate_value = (
dataset_subset.maximum_latitude
if dataset_subset.maximum_latitude is not None
else latitudes.max()
)
_check_coordinate_overlap(
dimension=coordinate_label,
user_minimum_coordinate_value=user_minimum_coordinate_value,
user_maximum_coordinate_value=user_maximum_coordinate_value,
dataset_minimum_coordinate_value=latitudes.min(),
dataset_maximum_coordinate_value=latitudes.max(),
is_strict=coordinates_selection_method == "strict-inside",
)
if "x" in coordinates_name_and_axis.keys():
coordinate_label = coordinates_name_and_axis["x"]
longitudes = dataset_coordinates[coordinate_label].values
if coordinate_label == "longitude":
# longitude apply moduli if longitude
user_minimum_coordinate_value = (
dataset_subset.minimum_latitude
if dataset_subset.minimum_latitude is not None
else latitudes.min()
longitude_modulus(dataset_subset.minimum_longitude)
if dataset_subset.minimum_longitude is not None
else longitudes.min()
)
user_maximum_coordinate_value = (
dataset_subset.maximum_latitude
if dataset_subset.maximum_latitude is not None
else latitudes.max()
longitude_modulus_upper_bound(dataset_subset.maximum_longitude)
if dataset_subset.maximum_longitude is not None
else longitudes.max()
)
_check_coordinate_overlap(
dimension="latitude",
user_minimum_coordinate_value=user_minimum_coordinate_value,
user_maximum_coordinate_value=user_maximum_coordinate_value,
dataset_minimum_coordinate_value=latitudes.min(),
dataset_maximum_coordinate_value=latitudes.max(),
is_strict=coordinates_selection_method == "strict-inside",
else: # don't aplpy moduli if x
user_minimum_coordinate_value = (
dataset_subset.minimum_longitude
if dataset_subset.minimum_longitude is not None
else longitudes.min()
)
for coordinate_label in COORDINATES_LABEL["longitude"]:
if (
coordinate_label in dataset.sizes
and coordinate_label == coordinates_name_and_axis["x"]
):
longitudes = dataset_coordinates[coordinate_label].values
_check_coordinate_overlap(
dimension="longitude",
user_minimum_coordinate_value=(
longitude_modulus(dataset_subset.minimum_longitude)
if dataset_subset.minimum_longitude is not None
else longitudes.min()
),
user_maximum_coordinate_value=(
longitude_modulus_upper_bound(
dataset_subset.maximum_longitude
)
if dataset_subset.maximum_longitude is not None
else longitudes.max()
),
dataset_minimum_coordinate_value=longitudes.min(),
dataset_maximum_coordinate_value=longitudes.max(),
is_strict=coordinates_selection_method == "strict-inside",
user_maximum_coordinate_value = (
dataset_subset.maximum_longitude
if dataset_subset.maximum_longitude is not None
else longitudes.max()
)
_check_coordinate_overlap(
dimension=coordinate_label,
user_minimum_coordinate_value=user_minimum_coordinate_value,
user_maximum_coordinate_value=user_maximum_coordinate_value,
dataset_minimum_coordinate_value=longitudes.min(),
dataset_maximum_coordinate_value=longitudes.max(),
is_strict=coordinates_selection_method == "strict-inside",
)
for coordinate_label in COORDINATES_LABEL["time"]:
if coordinate_label in dataset.sizes:
times = dataset_coordinates[coordinate_label].values
Expand Down

0 comments on commit ba9a2af

Please sign in to comment.