Source code for kadlu

import os
import logging

LOGLEVEL = os.environ.get('LOGLEVEL', 'INFO')
logging.basicConfig(format='%(message)s',
                    level=LOGLEVEL,
                    datefmt='%Y-%m-%d %I:%M:%S')

from .index import index, parallelindex

# data utils
from .geospatial.data_sources.data_util import (
    database_cfg,
    dt_2_epoch,
    epoch_2_dt,
    ext,
    index_arr,
    reshape_2D,
    reshape_3D,
    storage_cfg,
    verbosity,
)
from .geospatial.data_sources.source_map import source_map
from .geospatial.data_sources.source_map import default_val as defaults
from .geospatial.data_sources.load_from_file import load_netcdf, load_raster

# data sources
from .geospatial.data_sources.era5 import Era5 as era5, era5_cfg
from .geospatial.data_sources.gebco import Gebco as gebco
from .geospatial.data_sources.hycom import Hycom as hycom
from .geospatial.data_sources.wwiii import Wwiii as wwiii
from .geospatial.data_sources.source_map import load_map

# acoustic and environmental processing
from .geospatial.ocean import Ocean
from .sound.geophony import *
from .sound.parabolic_equation import *
from .sound.sound_speed import *

# file testing for files in kadlu_data/testfiles/
from .tests.geospatial.data_sources.test_files import test_files

# plotting tools
from .plot_util import (
    #        animate,
    #        plot2D,
    plot_transm_loss_horiz,
    plot_transm_loss_vert,
)


[docs]def load(source, var, **kwargs): """ automated fetching and loading from web sources args source: string view the list of available sources and variables with ``print(kadlu.source_map)`` var: string view the list of available sources and variables with ``print(kadlu.source_map)`` kwargs: dictionary dict containing boundary coordinates. example: ``kwargs=dict(south=44.25, west=-64.5, north=44.70, east=-63.33, top=0, bottom=5000, start=datetime(2015, 3, 1), end=datetime(2015, 3, 1, 12))`` returns: np.ndarray numpy arrays containing data ordered by val, lat, lon, [time, depth]. times are in epoch format """ source, var = source.lower(), var.lower() if var == 'bathy' or var == 'depth' or var == 'elevation': var = 'bathymetry' if var == 'temp': var = 'temperature' loadkey = f'{var}_{source}' assert loadkey in load_map.keys(), f'error: invalid source or variable. valid options include: \n\n'\ f'{list(f.rsplit("_", 1)[::-1] for f in load_map.keys())}\n\n'\ f'for more info, print(kadlu.source_map)' return load_map[loadkey](**kwargs)
[docs]def load_file(filepath, **kwargs): """ loading from local files. currently supports geotiff raster formats as well as certain netcdf databases args filepath: string full path directory and filename of data to load kwargs: dictionary dict containing coordinate bounds, e.g. north, south, east, west, top, bottom, start, end note that times are in datetime format returns an ND numpy array. arrays ordered by: val, lat, lon, [time, depth] times are in epoch format """ assert os.path.isfile(filepath), f'error: could not find {filepath}' if ext(filepath, ('.nc', )): return load_netcdf(filepath, **kwargs) elif ext(filepath, ( '.tif', '.tiff', '.gtiff', )): return load_raster(filepath, **kwargs) else: assert False, f'error {filepath}: unknown file format - currently only .nc and .tif formats are accepted'