Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
6754419
update Om3
rhaegar325 Jun 19, 2025
80a0baf
update for tests and test data
rhaegar325 Jul 1, 2025
b447464
update comment
rhaegar325 Jul 1, 2025
5c86673
update comment
rhaegar325 Jul 1, 2025
68ee3af
update comment
rhaegar325 Jul 1, 2025
3810a0d
Merge branch 'v2' into update_OM3
rhaegar325 Jul 1, 2025
bc7158c
fix format
rhaegar325 Jul 1, 2025
04c987a
fix format
rhaegar325 Jul 1, 2025
4a4595a
fix format
rhaegar325 Jul 1, 2025
76f9cbd
fix format
rhaegar325 Jul 1, 2025
a53d24b
fix format
rhaegar325 Jul 1, 2025
85fd1b8
fix format
rhaegar325 Jul 1, 2025
30518f6
fix format
rhaegar325 Jul 1, 2025
90514c6
fix format
rhaegar325 Jul 1, 2025
116f22e
fix format
rhaegar325 Jul 1, 2025
c52562e
fix format
rhaegar325 Jul 1, 2025
6e10179
split supergrid file
rhaegar325 Jul 2, 2025
475174c
fix format
rhaegar325 Jul 3, 2025
4179c26
update cmor version in ci
rhaegar325 Jul 3, 2025
d36eb99
update dealing with missing values
rhaegar325 Jul 3, 2025
cdce34b
update dealing with missing values
rhaegar325 Jul 3, 2025
1bd2024
update dealing with missing values
rhaegar325 Jul 3, 2025
3fc8655
fill Nan
rhaegar325 Jul 4, 2025
0a70d00
fill Nan
rhaegar325 Jul 4, 2025
4fc2815
fill Nan
rhaegar325 Jul 4, 2025
2db6254
Fill Nan
rhaegar325 Jul 8, 2025
22f43ec
fix format
rhaegar325 Jul 8, 2025
05bef33
fix format
rhaegar325 Jul 8, 2025
96ab7f7
add esmvaltool.cmor_check in test
rhaegar325 Jul 8, 2025
f7da0cc
add esmvaltool.cmor_check in test
rhaegar325 Jul 8, 2025
5361ba3
add esmvaltool.cmor_check in test
rhaegar325 Jul 8, 2025
f7bb12e
add esmvaltool.cmor_check in test
rhaegar325 Jul 8, 2025
764fd5c
add esmvaltool.cmor_check in test
rhaegar325 Jul 8, 2025
c6f61f0
fix format
rhaegar325 Jul 8, 2025
8e7449a
fix format
rhaegar325 Jul 8, 2025
86f4563
fix format
rhaegar325 Jul 8, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ __pycache__/
build/
*.csv
*.yaml
*.json
localdata/
src/access_mopper.egg-info
MOPPeR_outputs
2 changes: 1 addition & 1 deletion ci/environment-3.11.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ channels:
dependencies:
- python==3.11
- xarray
- cmor
- cmor==3.9.*
- numpy
- dask
- pyyaml
Expand Down
159 changes: 96 additions & 63 deletions src/access_mopper/_version.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

# This file helps to compute a version number in source trees obtained from
# git-archive tarball (such as those provided by githubs download-from-tag
# feature). Distribution tarballs (built by setup.py sdist) and build
Expand All @@ -12,12 +11,12 @@
"""Git implementation of _version.py."""

import errno
import functools
import os
import re
import subprocess
import sys
from typing import Any, Callable, Dict, List, Optional, Tuple
import functools


def get_keywords() -> Dict[str, str]:
Expand Down Expand Up @@ -68,12 +67,14 @@ class NotThisMethod(Exception):

def register_vcs_handler(vcs: str, method: str) -> Callable: # decorator
"""Create decorator to mark a method as the handler of a VCS."""

def decorate(f: Callable) -> Callable:
"""Store f in HANDLERS[vcs][method]."""
if vcs not in HANDLERS:
HANDLERS[vcs] = {}
HANDLERS[vcs][method] = f
return f

return decorate


Expand All @@ -100,10 +101,14 @@ def run_command(
try:
dispcmd = str([command] + args)
# remember shell=False, so use git.cmd on windows, not just git
process = subprocess.Popen([command] + args, cwd=cwd, env=env,
stdout=subprocess.PIPE,
stderr=(subprocess.PIPE if hide_stderr
else None), **popen_kwargs)
process = subprocess.Popen(
[command] + args,
cwd=cwd,
env=env,
stdout=subprocess.PIPE,
stderr=(subprocess.PIPE if hide_stderr else None),
**popen_kwargs,
)
break
except OSError as e:
if e.errno == errno.ENOENT:
Expand Down Expand Up @@ -141,15 +146,21 @@ def versions_from_parentdir(
for _ in range(3):
dirname = os.path.basename(root)
if dirname.startswith(parentdir_prefix):
return {"version": dirname[len(parentdir_prefix):],
"full-revisionid": None,
"dirty": False, "error": None, "date": None}
return {
"version": dirname[len(parentdir_prefix) :],
"full-revisionid": None,
"dirty": False,
"error": None,
"date": None,
}
rootdirs.append(root)
root = os.path.dirname(root) # up a level

if verbose:
print("Tried directories %s but none started with prefix %s" %
(str(rootdirs), parentdir_prefix))
print(
"Tried directories %s but none started with prefix %s"
% (str(rootdirs), parentdir_prefix)
)
raise NotThisMethod("rootdir doesn't start with parentdir_prefix")


Expand Down Expand Up @@ -212,7 +223,7 @@ def git_versions_from_keywords(
# starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of
# just "foo-1.0". If we see a "tag: " prefix, prefer those.
TAG = "tag: "
tags = {r[len(TAG):] for r in refs if r.startswith(TAG)}
tags = {r[len(TAG) :] for r in refs if r.startswith(TAG)}
if not tags:
# Either we're using git < 1.8.3, or there really are no tags. We use
# a heuristic: assume all version tags have a digit. The old git %d
Expand All @@ -221,40 +232,44 @@ def git_versions_from_keywords(
# between branches and tags. By ignoring refnames without digits, we
# filter out many common branch names like "release" and
# "stabilization", as well as "HEAD" and "master".
tags = {r for r in refs if re.search(r'\d', r)}
tags = {r for r in refs if re.search(r"\d", r)}
if verbose:
print("discarding '%s', no digits" % ",".join(refs - tags))
if verbose:
print("likely tags: %s" % ",".join(sorted(tags)))
for ref in sorted(tags):
# sorting will prefer e.g. "2.0" over "2.0rc1"
if ref.startswith(tag_prefix):
r = ref[len(tag_prefix):]
r = ref[len(tag_prefix) :]
# Filter out refs that exactly match prefix or that don't start
# with a number once the prefix is stripped (mostly a concern
# when prefix is '')
if not re.match(r'\d', r):
if not re.match(r"\d", r):
continue
if verbose:
print("picking %s" % r)
return {"version": r,
"full-revisionid": keywords["full"].strip(),
"dirty": False, "error": None,
"date": date}
return {
"version": r,
"full-revisionid": keywords["full"].strip(),
"dirty": False,
"error": None,
"date": date,
}
# no suitable tags, so version is "0+unknown", but full hex is still there
if verbose:
print("no suitable tags, using unknown + full revision id")
return {"version": "0+unknown",
"full-revisionid": keywords["full"].strip(),
"dirty": False, "error": "no suitable tags", "date": None}
return {
"version": "0+unknown",
"full-revisionid": keywords["full"].strip(),
"dirty": False,
"error": "no suitable tags",
"date": None,
}


@register_vcs_handler("git", "pieces_from_vcs")
def git_pieces_from_vcs(
tag_prefix: str,
root: str,
verbose: bool,
runner: Callable = run_command
tag_prefix: str, root: str, verbose: bool, runner: Callable = run_command
) -> Dict[str, Any]:
"""Get version from 'git describe' in the root of the source tree.

Expand All @@ -273,19 +288,27 @@ def git_pieces_from_vcs(
env.pop("GIT_DIR", None)
runner = functools.partial(runner, env=env)

_, rc = runner(GITS, ["rev-parse", "--git-dir"], cwd=root,
hide_stderr=not verbose)
_, rc = runner(GITS, ["rev-parse", "--git-dir"], cwd=root, hide_stderr=not verbose)
if rc != 0:
if verbose:
print("Directory %s not under git control" % root)
raise NotThisMethod("'git rev-parse --git-dir' returned error")

# if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty]
# if there isn't one, this yields HEX[-dirty] (no NUM)
describe_out, rc = runner(GITS, [
"describe", "--tags", "--dirty", "--always", "--long",
"--match", f"{tag_prefix}[[:digit:]]*"
], cwd=root)
describe_out, rc = runner(
GITS,
[
"describe",
"--tags",
"--dirty",
"--always",
"--long",
"--match",
f"{tag_prefix}[[:digit:]]*",
],
cwd=root,
)
# --long was added in git-1.5.5
if describe_out is None:
raise NotThisMethod("'git describe' failed")
Expand All @@ -300,8 +323,7 @@ def git_pieces_from_vcs(
pieces["short"] = full_out[:7] # maybe improved later
pieces["error"] = None

branch_name, rc = runner(GITS, ["rev-parse", "--abbrev-ref", "HEAD"],
cwd=root)
branch_name, rc = runner(GITS, ["rev-parse", "--abbrev-ref", "HEAD"], cwd=root)
# --abbrev-ref was added in git-1.6.3
if rc != 0 or branch_name is None:
raise NotThisMethod("'git rev-parse --abbrev-ref' returned error")
Expand Down Expand Up @@ -341,17 +363,16 @@ def git_pieces_from_vcs(
dirty = git_describe.endswith("-dirty")
pieces["dirty"] = dirty
if dirty:
git_describe = git_describe[:git_describe.rindex("-dirty")]
git_describe = git_describe[: git_describe.rindex("-dirty")]

# now we have TAG-NUM-gHEX or HEX

if "-" in git_describe:
# TAG-NUM-gHEX
mo = re.search(r'^(.+)-(\d+)-g([0-9a-f]+)$', git_describe)
mo = re.search(r"^(.+)-(\d+)-g([0-9a-f]+)$", git_describe)
if not mo:
# unparsable. Maybe git-describe is misbehaving?
pieces["error"] = ("unable to parse git-describe output: '%s'"
% describe_out)
pieces["error"] = "unable to parse git-describe output: '%s'" % describe_out
return pieces

# tag
Expand All @@ -360,10 +381,12 @@ def git_pieces_from_vcs(
if verbose:
fmt = "tag '%s' doesn't start with prefix '%s'"
print(fmt % (full_tag, tag_prefix))
pieces["error"] = ("tag '%s' doesn't start with prefix '%s'"
% (full_tag, tag_prefix))
pieces["error"] = "tag '%s' doesn't start with prefix '%s'" % (
full_tag,
tag_prefix,
)
return pieces
pieces["closest-tag"] = full_tag[len(tag_prefix):]
pieces["closest-tag"] = full_tag[len(tag_prefix) :]

# distance: number of commits since tag
pieces["distance"] = int(mo.group(2))
Expand Down Expand Up @@ -412,8 +435,7 @@ def render_pep440(pieces: Dict[str, Any]) -> str:
rendered += ".dirty"
else:
# exception #1
rendered = "0+untagged.%d.g%s" % (pieces["distance"],
pieces["short"])
rendered = "0+untagged.%d.g%s" % (pieces["distance"], pieces["short"])
if pieces["dirty"]:
rendered += ".dirty"
return rendered
Expand Down Expand Up @@ -442,8 +464,7 @@ def render_pep440_branch(pieces: Dict[str, Any]) -> str:
rendered = "0"
if pieces["branch"] != "master":
rendered += ".dev0"
rendered += "+untagged.%d.g%s" % (pieces["distance"],
pieces["short"])
rendered += "+untagged.%d.g%s" % (pieces["distance"], pieces["short"])
if pieces["dirty"]:
rendered += ".dirty"
return rendered
Expand Down Expand Up @@ -604,11 +625,13 @@ def render_git_describe_long(pieces: Dict[str, Any]) -> str:
def render(pieces: Dict[str, Any], style: str) -> Dict[str, Any]:
"""Render the given version pieces into the requested style."""
if pieces["error"]:
return {"version": "unknown",
"full-revisionid": pieces.get("long"),
"dirty": None,
"error": pieces["error"],
"date": None}
return {
"version": "unknown",
"full-revisionid": pieces.get("long"),
"dirty": None,
"error": pieces["error"],
"date": None,
}

if not style or style == "default":
style = "pep440" # the default
Expand All @@ -632,9 +655,13 @@ def render(pieces: Dict[str, Any], style: str) -> Dict[str, Any]:
else:
raise ValueError("unknown style '%s'" % style)

return {"version": rendered, "full-revisionid": pieces["long"],
"dirty": pieces["dirty"], "error": None,
"date": pieces.get("date")}
return {
"version": rendered,
"full-revisionid": pieces["long"],
"dirty": pieces["dirty"],
"error": None,
"date": pieces.get("date"),
}


def get_versions() -> Dict[str, Any]:
Expand All @@ -648,8 +675,7 @@ def get_versions() -> Dict[str, Any]:
verbose = cfg.verbose

try:
return git_versions_from_keywords(get_keywords(), cfg.tag_prefix,
verbose)
return git_versions_from_keywords(get_keywords(), cfg.tag_prefix, verbose)
except NotThisMethod:
pass

Expand All @@ -658,13 +684,16 @@ def get_versions() -> Dict[str, Any]:
# versionfile_source is the relative path from the top of the source
# tree (where the .git directory might live) to this file. Invert
# this to find the root from __file__.
for _ in cfg.versionfile_source.split('/'):
for _ in cfg.versionfile_source.split("/"):
root = os.path.dirname(root)
except NameError:
return {"version": "0+unknown", "full-revisionid": None,
"dirty": None,
"error": "unable to find root of source tree",
"date": None}
return {
"version": "0+unknown",
"full-revisionid": None,
"dirty": None,
"error": "unable to find root of source tree",
"date": None,
}

try:
pieces = git_pieces_from_vcs(cfg.tag_prefix, root, verbose)
Expand All @@ -678,6 +707,10 @@ def get_versions() -> Dict[str, Any]:
except NotThisMethod:
pass

return {"version": "0+unknown", "full-revisionid": None,
"dirty": None,
"error": "unable to compute version", "date": None}
return {
"version": "0+unknown",
"full-revisionid": None,
"dirty": None,
"error": "unable to compute version",
"date": None,
}
12 changes: 8 additions & 4 deletions src/access_mopper/calc_seaice.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,8 +103,10 @@ def get_grid_cell_length(self, xy):
elif xy == "x":
L = self.gridfile.hue / 100 # grid cell length in m (from cm)
else:
raise Exception("""Need to supply value either 'x' or 'y'
for ice Transports""")
raise Exception(
"""Need to supply value either 'x' or 'y'
for ice Transports"""
)

return L

Expand Down Expand Up @@ -159,8 +161,10 @@ def transAcrossLine(self, var, i_start, i_end, j_start, j_end):

return trans
else:
raise Exception("""ERROR: Transport across a line needs to
be calculated for a single value of i or j""")
raise Exception(
"""ERROR: Transport across a line needs to
be calculated for a single value of i or j"""
)

def lineTransports(self, tx_trans, ty_trans):
"""
Expand Down
Loading
Loading