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-0.2.1.tar.gz (43.0 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-0.2.1-py3-none-any.whl (44.3 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for abja_utils-0.2.1.tar.gz
Algorithm Hash digest
SHA256 0872a076f74b8ac0df980c4cc8cf4ceae8b993baed86a8da521b61dc3a125dd1
MD5 b8e86afdbc23a5cf844f4c6a85b724a6
BLAKE2b-256 e6dbbe1b780ef3cf2a2fe8c86346d7cf00616190e5e31052c64439051446d137

See more details on using hashes here.

File details

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

File metadata

  • Download URL: abja_utils-0.2.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-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 34d5c930b43ffab5f1a3a97dc05a4187153442136ae9a5baf65c0b1adc21f006
MD5 21566968ded994c00f7bde4c91954c2b
BLAKE2b-256 75ec721a6119ec263ba14419badb9cecd2df4769a1ee1b8966fd2846eb7f7054

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