Skip to content

Commit

Permalink
ENH: add _load_requirements class attribute to Dataset classes
Browse files Browse the repository at this point in the history
  • Loading branch information
neutrinoceros committed Dec 29, 2022
1 parent fe04289 commit 7c81940
Show file tree
Hide file tree
Showing 30 changed files with 77 additions and 4 deletions.
9 changes: 8 additions & 1 deletion yt/data_objects/static_output.py
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ def ireq(self, value):


class Dataset(abc.ABC):

_load_requirements: List[str] = []
default_fluid_type = "gas"
default_field = ("gas", "density")
fluid_types: Tuple[FieldType, ...] = ("gas", "deposit", "index")
Expand Down Expand Up @@ -346,6 +346,13 @@ def force_periodicity(self, val=True):
raise TypeError("force_periodicity expected a boolean.")
self._force_periodicity = val

@classmethod
def _missing_extra_requirements(cls) -> List[str]:
# return a list of optional dependencies that are
# needed for the present class to function, but currently missing.
# returning an empty list means that all requirements are met
return [name for name in cls._load_requirements if not find_spec(name)]

# abstract methods require implementation in subclasses
@classmethod
@abc.abstractmethod
Expand Down
4 changes: 4 additions & 0 deletions yt/frontends/_skeleton/data_structures.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import os
import weakref
from typing import List

import numpy as np

Expand Down Expand Up @@ -76,6 +77,9 @@ class SkeletonDataset(Dataset):
_index_class = SkeletonHierarchy
_field_info_class = SkeletonFieldInfo

# names of additional modules that may be required to load data from disk
_load_requirements: List[str] = []

def __init__(
self,
filename,
Expand Down
1 change: 1 addition & 0 deletions yt/frontends/arepo/data_structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@


class ArepoHDF5Dataset(GadgetHDF5Dataset):
_load_requirements = ["h5py"]
_field_info_class = ArepoFieldInfo

def __init__(
Expand Down
1 change: 1 addition & 0 deletions yt/frontends/cf_radial/data_structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ def _populate_grid_objects(self):


class CFRadialDataset(Dataset):
_load_requirements = ["xarray", "pyart"]
_index_class = CFRadialHierarchy
_field_info_class = CFRadialFieldInfo

Expand Down
1 change: 1 addition & 0 deletions yt/frontends/chimera/data_structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,7 @@ def _setup_data_io(self):


class ChimeraDataset(Dataset):
_load_requirements = ["h5py"]
_index_class = ChimeraUNSIndex # ChimeraHierarchy
_field_info_class = ChimeraFieldInfo

Expand Down
1 change: 1 addition & 0 deletions yt/frontends/cholla/data_structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ def _populate_grid_objects(self):


class ChollaDataset(Dataset):
_load_requirements = ["h5py"]
_index_class = ChollaHierarchy
_field_info_class = ChollaFieldInfo

Expand Down
5 changes: 3 additions & 2 deletions yt/frontends/chombo/data_structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,7 @@ def _reconstruct_parent_child(self):


class ChomboDataset(Dataset):
_load_requirements = ["h5py"]
_index_class = ChomboHierarchy
_field_info_class: Type[FieldInfoContainer] = ChomboFieldInfo

Expand Down Expand Up @@ -641,7 +642,7 @@ def _read_particles(self):


class Orion2Dataset(ChomboDataset):

_load_requirements = ["h5py"]
_index_class = Orion2Hierarchy
_field_info_class = Orion2FieldInfo

Expand Down Expand Up @@ -759,7 +760,7 @@ def __init__(self, ds, dataset_type="chombo_hdf5"):


class ChomboPICDataset(ChomboDataset):

_load_requirements = ["h5py"]
_index_class = ChomboPICHierarchy
_field_info_class = ChomboPICFieldInfo3D

Expand Down
2 changes: 2 additions & 0 deletions yt/frontends/eagle/data_structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@


class EagleDataset(GadgetHDF5Dataset):
_load_requirements = ["h5py"]
_particle_mass_name = "Mass"
_field_info_class: Type[FieldInfoContainer] = OWLSFieldInfo
_time_readin_ = "Time"
Expand Down Expand Up @@ -71,6 +72,7 @@ def _is_valid(cls, filename, *args, **kwargs):


class EagleNetworkDataset(EagleDataset):
_load_requirements = ["h5py"]
_particle_mass_name = "Mass"
_field_info_class = EagleNetworkFieldInfo
_time_readin = "Time"
Expand Down
1 change: 1 addition & 0 deletions yt/frontends/enzo/data_structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -668,6 +668,7 @@ class EnzoDataset(Dataset):
Enzo-specific output, set at a fixed time.
"""

_load_requirements = ["h5py", "libconf"]
_index_class = EnzoHierarchy
_field_info_class = EnzoFieldInfo

Expand Down
1 change: 1 addition & 0 deletions yt/frontends/enzo_e/data_structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -286,6 +286,7 @@ class EnzoEDataset(Dataset):
Enzo-E-specific output, set at a fixed time.
"""

_load_requirements = ["h5py", "libconf"]
refine_by = 2
_index_class = EnzoEHierarchy
_field_info_class = EnzoEFieldInfo
Expand Down
1 change: 1 addition & 0 deletions yt/frontends/exodus_ii/data_structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ def _detect_output_fields(self):


class ExodusIIDataset(Dataset):
_load_requirements = ["netCDF4"]
_index_class = ExodusIIUnstructuredIndex
_field_info_class = ExodusIIFieldInfo

Expand Down
5 changes: 5 additions & 0 deletions yt/frontends/fits/data_structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -315,6 +315,7 @@ def check_sky_coords(filename, ndim):


class FITSDataset(Dataset):
_load_requirements = ["astropy"]
_index_class = FITSHierarchy
_field_info_class: Type[FieldInfoContainer] = FITSFieldInfo
_dataset_type = "fits"
Expand Down Expand Up @@ -573,6 +574,7 @@ def find_axes(axis_names, prefixes):


class YTFITSDataset(FITSDataset):
_load_requirements = ["astropy"]
_field_info_class = YTFITSFieldInfo

def _parse_parameter_file(self):
Expand Down Expand Up @@ -655,6 +657,7 @@ def _is_valid(cls, filename, *args, **kwargs):


class SkyDataFITSDataset(FITSDataset):
_load_requirements = ["astropy"]
_field_info_class = WCSFITSFieldInfo

def _determine_wcs(self):
Expand Down Expand Up @@ -741,6 +744,7 @@ def _domain_decomp(self):


class SpectralCubeFITSDataset(SkyDataFITSDataset):
_load_requirements = ["astropy"]
_index_class = SpectralCubeFITSHierarchy

def __init__(
Expand Down Expand Up @@ -860,6 +864,7 @@ def _parse_index(self):


class EventsFITSDataset(SkyDataFITSDataset):
_load_requirements = ["astropy"]
_index_class = EventsFITSHierarchy

def __init__(
Expand Down
2 changes: 2 additions & 0 deletions yt/frontends/flash/data_structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,7 @@ def _populate_grid_objects(self):


class FLASHDataset(Dataset):
_load_requirements = ["h5py"]
_index_class: Type[Index] = FLASHHierarchy
_field_info_class = FLASHFieldInfo
_handle = None
Expand Down Expand Up @@ -484,6 +485,7 @@ class FLASHParticleFile(ParticleFile):


class FLASHParticleDataset(FLASHDataset):
_load_requirements = ["h5py"]
_index_class = ParticleIndex
filter_bbox = False
_file_class = FLASHParticleFile
Expand Down
1 change: 1 addition & 0 deletions yt/frontends/gadget/data_structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -574,6 +574,7 @@ class GadgetHDF5File(ParticleFile):


class GadgetHDF5Dataset(GadgetDataset):
_load_requirements = ["h5py"]
_file_class = GadgetHDF5File
_index_class = SPHParticleIndex
_field_info_class: Type[FieldInfoContainer] = GadgetFieldInfo
Expand Down
1 change: 1 addition & 0 deletions yt/frontends/gadget_fof/data_structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,7 @@ def _read_particle_positions(self, ptype, f=None):


class GadgetFOFDataset(ParticleDataset):
_load_requirements = ["h5py"]
_index_class = GadgetFOFParticleIndex
_file_class = GadgetFOFHDF5File
_field_info_class = GadgetFOFFieldInfo
Expand Down
1 change: 1 addition & 0 deletions yt/frontends/gamer/data_structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,7 @@ def _validate_parent_children_relationship(self):


class GAMERDataset(Dataset):
_load_requirements = ["h5py"]
_index_class = GAMERHierarchy
_field_info_class = GAMERFieldInfo
_handle = None
Expand Down
1 change: 1 addition & 0 deletions yt/frontends/gdf/data_structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,7 @@ def _get_grid_children(self, grid):


class GDFDataset(Dataset):
_load_requirements = ["h5py"]
_index_class = GDFHierarchy
_field_info_class = GDFFieldInfo

Expand Down
1 change: 1 addition & 0 deletions yt/frontends/gizmo/data_structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@


class GizmoDataset(GadgetHDF5Dataset):
_load_requirements = ["h5py"]
_field_info_class = GizmoFieldInfo

@classmethod
Expand Down
1 change: 1 addition & 0 deletions yt/frontends/halo_catalog/data_structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ class YTHaloCatalogDataset(SavedDataset):
in yt_astro_analysis.
"""

_load_requirements = ["h5py"]
_index_class = ParticleIndex
_file_class = YTHaloCatalogFile
_field_info_class = YTHaloCatalogFieldInfo
Expand Down
1 change: 1 addition & 0 deletions yt/frontends/http_stream/data_structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ class HTTPParticleFile(ParticleFile):


class HTTPStreamDataset(ParticleDataset):
_load_requirements = ["requests"]
_index_class = ParticleIndex
_file_class = HTTPParticleFile
_field_info_class = SPHFieldInfo
Expand Down
1 change: 1 addition & 0 deletions yt/frontends/moab/data_structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ def _count_grids(self):


class MoabHex8Dataset(Dataset):
_load_requirements = ["h5py"]
_index_class = MoabHex8Hierarchy
_field_info_class = MoabFieldInfo
periodicity = (False, False, False)
Expand Down
1 change: 1 addition & 0 deletions yt/frontends/nc4_cm1/data_structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ def _populate_grid_objects(self):


class CM1Dataset(Dataset):
_load_requirements = ["netCDF4"]
_index_class = CM1Hierarchy
_field_info_class = CM1FieldInfo

Expand Down
2 changes: 2 additions & 0 deletions yt/frontends/open_pmd/data_structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -431,6 +431,7 @@ class OpenPMDDataset(Dataset):
- particle and mesh positions are *absolute* with respect to the simulation origin.
"""

_load_requirements = ["h5py"]
_index_class = OpenPMDHierarchy
_field_info_class = OpenPMDFieldInfo

Expand Down Expand Up @@ -656,6 +657,7 @@ def _load(self, it, **kwargs):


class OpenPMDGroupBasedDataset(Dataset):
_load_requirements = ["h5py"]
_index_class = OpenPMDHierarchy
_field_info_class = OpenPMDFieldInfo

Expand Down
1 change: 1 addition & 0 deletions yt/frontends/owls/data_structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@


class OWLSDataset(GadgetHDF5Dataset):
_load_requirements = ["h5py"]
_particle_mass_name = "Mass"
_field_info_class = OWLSFieldInfo
_time_readin = "Time_GYR"
Expand Down
1 change: 1 addition & 0 deletions yt/frontends/owls_subfind/data_structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ def __init__(self, ds, io, filename, file_id, bounds):


class OWLSSubfindDataset(ParticleDataset):
_load_requirements = ["h5py"]
_index_class = OWLSSubfindParticleIndex
_file_class = OWLSSubfindHDF5File
_field_info_class = OWLSSubfindFieldInfo
Expand Down
1 change: 1 addition & 0 deletions yt/frontends/ramses/data_structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -697,6 +697,7 @@ def print_stats(self):


class RAMSESDataset(Dataset):
_load_requirements = ["f90nml"]
_index_class = RAMSESIndex
_field_info_class = RAMSESFieldInfo
gamma = 1.4 # This will get replaced on hydro_fn open
Expand Down
1 change: 1 addition & 0 deletions yt/frontends/sdf/data_structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ class SDFFile(ParticleFile):


class SDFDataset(ParticleDataset):
_load_requirements = ["requests"]
_index_class = ParticleIndex
_file_class = SDFFile
_field_info_class = SDFFieldInfo
Expand Down
1 change: 1 addition & 0 deletions yt/frontends/swift/data_structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ class SwiftParticleFile(ParticleFile):


class SwiftDataset(SPHDataset):
_load_requirements = ["h5py"]
_index_class = SPHParticleIndex
_field_info_class = SPHFieldInfo
_file_class = SwiftParticleFile
Expand Down
9 changes: 9 additions & 0 deletions yt/frontends/ytdata/data_structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,7 @@ def __init__(self, ds, io, filename, file_id, range):
class YTDataContainerDataset(YTDataset):
"""Dataset for saved geometric data containers."""

_load_requirements = ["h5py"]
_index_class = ParticleIndex
_file_class = YTDataHDF5File
_field_info_class: Type[FieldInfoContainer] = YTDataContainerFieldInfo
Expand Down Expand Up @@ -316,6 +317,8 @@ def _is_valid(cls, filename, *args, **kwargs):
class YTDataLightRayDataset(YTDataContainerDataset):
"""Dataset for saved LightRay objects."""

_load_requirements = ["h5py"]

def _parse_parameter_file(self):
super()._parse_parameter_file()
self._restore_light_ray_solution()
Expand Down Expand Up @@ -357,6 +360,7 @@ def _is_valid(cls, filename, *args, **kwargs):
class YTSpatialPlotDataset(YTDataContainerDataset):
"""Dataset for saved slices and projections."""

_load_requirements = ["h5py"]
_field_info_class = YTGridFieldInfo

def __init__(self, *args, **kwargs):
Expand Down Expand Up @@ -477,6 +481,7 @@ def _populate_grid_objects(self):
class YTGridDataset(YTDataset):
"""Dataset for saved covering grids, arbitrary grids, and FRBs."""

_load_requirements = ["h5py"]
_index_class: Type[Index] = YTGridHierarchy
_field_info_class = YTGridFieldInfo
_dataset_type = "ytgridhdf5"
Expand Down Expand Up @@ -709,6 +714,7 @@ def _read_fluid_fields(self, fields, dobj, chunk=None):
class YTNonspatialDataset(YTGridDataset):
"""Dataset for general array data."""

_load_requirements = ["h5py"]
_index_class = YTNonspatialHierarchy
_field_info_class = YTGridFieldInfo
_dataset_type = "ytnonspatialhdf5"
Expand Down Expand Up @@ -777,6 +783,7 @@ def _is_valid(cls, filename, *args, **kwargs):
class YTProfileDataset(YTNonspatialDataset):
"""Dataset for saved profile objects."""

_load_requirements = ["h5py"]
fluid_types = ("data", "gas", "standard_deviation")

def __init__(self, filename, unit_system="cgs"):
Expand Down Expand Up @@ -926,6 +933,8 @@ def __getitem__(self, field):
class YTClumpTreeDataset(YTNonspatialDataset):
"""Dataset for saved clump-finder data."""

_load_requirements = ["h5py"]

def __init__(self, filename, unit_system="cgs"):
super().__init__(filename, unit_system=unit_system)
self._load_tree()
Expand Down
Loading

0 comments on commit 7c81940

Please sign in to comment.