示例#1
0
 def _is_valid(self, *args, **kwargs):
     warn_netcdf(args[0])
     try:
         from netCDF4 import Dataset
         filename = args[0]
         with Dataset(filename) as f:
             f.variables['connect1']
         return True
     except:
         pass
示例#2
0
 def _is_valid(self, *args, **kwargs):
     warn_netcdf(args[0])
     try:
         from netCDF4 import Dataset
         filename = args[0]
         # We use keepweakref here to avoid holding onto the file handle
         # which can interfere with other is_valid calls.
         with Dataset(filename, keepweakref=True) as f:
             f.variables['connect1']
         return True
     except Exception: pass
示例#3
0
    def _is_valid(cls, filename, *args, **kwargs):
        # This accepts a filename or a set of arguments and returns True or
        # False depending on if the file is of the type requested.

        warn_netcdf(filename)
        try:
            nc4_file = NetCDF4FileHandler(filename)
            with nc4_file.open_ds(keepweakref=True) as _handle:
                is_cm1_lofs = hasattr(_handle, "cm1_lofs_version")
                is_cm1 = hasattr(_handle,
                                 "cm1 version")  # not a typo, it is a space...

                # ensure coordinates of each variable array exists in the dataset
                coords = _handle.dimensions  # get the dataset wide coordinates
                failed_vars = []  # list of failed variables
                for var in _handle.variables:  # iterate over the variables
                    vcoords = _handle[
                        var].dimensions  # get the dims for the variable
                    ncoords = len(vcoords)  # number of coordinates in variable
                    # number of coordinates that pass for a variable
                    coordspassed = sum(vc in coords for vc in vcoords)
                    if coordspassed != ncoords:
                        failed_vars.append(var)

                if failed_vars:
                    mylog.warning(
                        "Trying to load a cm1_lofs netcdf file but the "
                        "coordinates of the following fields do not match the "
                        "coordinates of the dataset: %s",
                        failed_vars,
                    )
                    return False

            if not is_cm1_lofs:
                if is_cm1:
                    mylog.warning(
                        "It looks like you are trying to load a cm1 netcdf file, "
                        "but at present yt only supports cm1_lofs output. Until"
                        " support is added, you can likely use"
                        " yt.load_uniform_grid() to load your cm1 file manually."
                    )
                return False
        except (OSError, AttributeError, ImportError):
            return False

        return True
示例#4
0
    def _is_valid(cls, filename, *args, **kwargs):
        # This accepts a filename or a set of arguments and returns True or
        # False depending on if the file is of the type requested.

        warn_netcdf(filename)
        is_cfrad = False
        try:
            # note that we use the NetCDF4FileHandler here to avoid some
            # issues with xarray opening datasets it cannot handle. Once
            # a dataset is as identified as a CFRadialDataset, xarray is used
            # for opening. See https://github.com/yt-project/yt/issues/3987
            nc4_file = NetCDF4FileHandler(filename)
            with nc4_file.open_ds(keepweakref=True) as ds:
                con = "Conventions"  # the attribute to check for file conventions
                cons = ""  # the value of the Conventions attribute
                for c in [con, con.lower()]:
                    if hasattr(ds, c):
                        cons += getattr(ds, c)
                is_cfrad = "CF/Radial" in cons
        except (OSError, AttributeError, ImportError):
            return False

        return is_cfrad