Skip to main content

abja_utils

A collection of reusable Python utilities for MIKE, FUNWAVE-TVD, and GIS workflows — the tools I reach for across projects, packaged so they install the same way on every machine.

Installation

pip install abja_utils

Optional extras:

pip install "abja_utils[basemap]"   # web-tile basemaps for wind-vector plots
pip install "abja_utils[dev]"       # test dependencies

ArcPy-based helpers (abja_utils.gis.arcpro) require a licensed ArcGIS install; see ArcPy setup below.

What's inside

Subpackage Highlights
abja_utils.mike dfs2/mesh → shapefile, wind-vector plots, MIKE setup packaging
abja_utils.gis concave hulls, bounding-box & snap rasters, NONNA-10 parsing, ArcPy bridge
abja_utils.funwave FUNWAVE-TVD grid generation, depth-file ↔ GeoTIFF
abja_utils.downloader (work in progress) Copernicus / HYCOM downloaders
top level use_style, Colors, subplots — matplotlib styling helpers

Subpackages import lazily, so import abja_utils stays fast; access them as abja_utils.mike, abja_utils.gis, etc.

Quick start

MIKE — dfs2 to shapefile

Export one item at one timestep to a polygon shapefile (with x_index / y_index columns). The item can be given by name or index, and the timestep by index or timestamp string:

import abja_utils as au

au.mike.dfs2_to_shapefile(
    "model.dfs2", "surface.shp",
    item="Surface elevation",     # or an integer index
    timestep="2018-01-01 01:00",  # or an integer index
)

# Or work with the GeoDataFrame directly:
gdf = au.mike.dfs2_to_geodataframe("model.dfs2", item=0, timestep=0)

Convert a mesh to element polygons, or plot true-north wind vectors:

au.mike.mesh2poly("domain.mesh", "domain.shp")
au.mike.plot_wind_vectors("wind.dfs2", u_item=0, v_item=1, timestep=0)

Package a MIKE setup and every linked input into a self-contained zip:

report = au.mike.package_mike_setup("model.m21fm")
print(report.summary())

FUNWAVE — build a grid from a raster

import abja_utils as au

result = au.funwave.generate_grid(
    xmin=-127.0, xmax=-126.0, ymin=48.1, ymax=48.5,
    dphi=30/3600, dtheta=30/3600,
    raster_path="dem.tif", out_txt_path="depth.txt",
    export_shapefile=True, export_clipped_raster=True,
)
au.funwave.txt2tif("depth.txt", "depth.tif", result["Mglob"], result["Nglob"],
                   result["dphi"], result["dtheta"])

GIS

import abja_utils as au

au.gis.bbox2shp(-127, -126, 48, 49, "bbox.shp", epsg=4326)
au.gis.make_snap_raster(-127, -126, 48, 49, epsg=4326, res=0.01,
                        output_fname="snap.tif")
hull = au.gis.concave_hull(points, alpha=2.0, plot=True)

from abja_utils.gis.nonna import parse_file
gdf = parse_file("nonna10.txt")

Plotting style

Importing the package does not change your matplotlib configuration. Opt in when you want the package's defaults (Times New Roman, inward ticks, a curated colour cycle):

import abja_utils as au
au.use_style()
fig, ax = au.subplots(figwidth=16, figheight=12)  # sizes in centimetres
ax.plot(x, y, color=au.Colors.blue2)

ArcPy (optional)

abja_utils.gis.arcpro bridges to a licensed ArcGIS Pro install from a standalone Python (matching major.minor version). Install the bridge with:

from abja_utils.gis import install_arcpy
install_arcpy()   # Windows only

See src/abja_utils/data/README.md for details.

Development

pip install -e ".[dev]"
pytest

License

MIT — see LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

abja_utils-1.0.1.tar.gz (43.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

abja_utils-1.0.1-py3-none-any.whl (44.3 kB view details)

Uploaded Python 3

File details

Details for the file abja_utils-1.0.1.tar.gz.

File metadata

  • Download URL: abja_utils-1.0.1.tar.gz
  • Upload date:
  • Size: 43.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.14

File hashes

Hashes for abja_utils-1.0.1.tar.gz
Algorithm Hash digest
SHA256 4afd8e3bee18854620c09f625b0e3915c5f257e0d55638123106ecf344724ba4
MD5 9c5d7264f7d016ccaf8bb2d9d553bf3c
BLAKE2b-256 0753ab9639123d00a98cfc7aa8e02938a5de2243de1ff7d633bb19444e7e5e35

See more details on using hashes here.

File details

Details for the file abja_utils-1.0.1-py3-none-any.whl.

File metadata

  • Download URL: abja_utils-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 44.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.14

File hashes

Hashes for abja_utils-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 2c3e96e8b6a9509a0082edbbfb05ae625da5eb64ee8acc74eb83ef28a7e0e24c
MD5 a2dee11c7823f01219b0850a0e57b673
BLAKE2b-256 35801b47ef1313f45dcc6b56a65bee7b466e6048abdf7c85dab4b0ee78e833e6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page