From 05990348b4bbf9c5f3c38c6335d0dcef3fda0a02 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 30 Dec 2024 15:01:51 -0500 Subject: [PATCH 01/39] MAINT: updated version aquisition Updated the way that the version is set in the code to make releases easier. --- apexpy/__init__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apexpy/__init__.py b/apexpy/__init__.py index 1895213f..fa5b0d50 100644 --- a/apexpy/__init__.py +++ b/apexpy/__init__.py @@ -1,3 +1,5 @@ +"""Conversion functions between geodetic and apex magnetic coordinates.""" +from importlib import metadata from sys import stderr # Below try..catch required for autodoc to work on readthedocs @@ -12,5 +14,5 @@ from apexpy import helpers # noqa F401 # Define the global variables -__version__ = "2.0.1" +__version__ = metadata.version('apexpy') __all__ = ['Apex', 'fortranapex', 'helpers', 'ApexHeightError'] From 01b8518d3fd5679873c3021213dd77326cbc6184 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 30 Dec 2024 15:02:09 -0500 Subject: [PATCH 02/39] DOC: set target release date Updated the changelog to have a target release date. --- CHANGELOG.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index e79124ea..8cfd34ac 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -2,7 +2,7 @@ Changelog ========= -2.1.0 (2024-12-XX) +2.1.0 (2024-12-31) ------------------ * Adapted codebase to read IRGF coefficients from a file (updated to IGRF-14) * Updated docs to reflect missing command-line executable From 8c5118e95968a62e11cd57aed2cadb74e7b6b2eb Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 30 Dec 2024 15:03:02 -0500 Subject: [PATCH 03/39] MAINT: updated doc conf.py Updated the documentation configuration to: - have a docstring, - get the version from the pyproject.toml file, and - update the project year. --- docs/conf.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 2994989d..72652500 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -1,7 +1,8 @@ # -*- coding: utf-8 -*- - +"""Configuration for apexpy documentation.""" import json import os +from pyproject_parser import PyProject import re extensions = ['sphinx.ext.autodoc', @@ -13,22 +14,18 @@ 'sphinx.ext.extlinks', 'autoapi.extension'] -# Define common elements +# General information about the project. +info = PyProject.load("../pyproject.toml") +# Define common elements source_suffix = '.rst' master_doc = 'index' project = 'ApexPy' -year = '2022' +year = '2024' zenodo = json.loads(open('../.zenodo.json').read()) author = ' and '.join([zcreator['name'] for zcreator in zenodo['creators']]) copyright = ', '.join([year, author]) - -# Get version number from __init__.py -regex = r"(?<=__version__..\s)\S+" -with open('../apexpy/__init__.py', 'r') as fin: - text = fin.read() -match = re.findall(regex, text) -version = release = match[0].strip("'") +version = release = info.project['version'].base_version # Configure autoapi autoapi_type = 'python' From 06f0968b46bfc69247b378b4c60bb4a932ed584a Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 30 Dec 2024 15:04:16 -0500 Subject: [PATCH 04/39] REL: updated version in pyproject.toml Updated version and docs dependencies. --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 7ae99480..f9f342e5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,6 +11,7 @@ requires = [ [project] name = "apexpy" +version = "2.1.0" license = {file = "LICENSE"} description = "A Python wrapper for Apex coordinates" maintainers = [ @@ -56,7 +57,6 @@ classifiers = [ "Operating System :: Unix", "Operating System :: MacOS", ] -dynamic = ['version'] [tool.project.scripts] apexpy = {reference = 'apexpy.__main__:main', type = 'console'} @@ -69,7 +69,7 @@ test = [ "pytest-cov", "pytest-xdist" ] -doc = ["sphinx>=1.3", "sphinx-rtd-theme"] +doc = ["pyproject_parser", "sphinx>=1.3", "sphinx-rtd-theme"] [project.urls] source = "https://github.com/aburrell/apexpy" From f6a945ee581f56869a2974964a60a6e0d2c0b3c7 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 30 Dec 2024 15:04:38 -0500 Subject: [PATCH 05/39] REL: updated version Updated the version number in the meson.build and setup.cfg files. --- meson.build | 2 +- setup.cfg | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/meson.build b/meson.build index 97351f7b..0c616536 100644 --- a/meson.build +++ b/meson.build @@ -1,6 +1,6 @@ project( 'apexpy', 'c', # Note that the git commit hash cannot be added dynamically here - version: '2.0.2', + version: '2.1.0', license: 'MIT', meson_version: '>= 0.63.0', default_options: [ diff --git a/setup.cfg b/setup.cfg index abe424c1..6fc09cab 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = apexpy -version = 2.0.2 +version = 2.1.0 license = MIT description = "A Python wrapper for Apex coordinates" long_description = file: README.rst, CHANGELOG.rst From 65dd72f7bee223507bcfe0216636fd8fd28c6a6a Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 30 Dec 2024 15:15:44 -0500 Subject: [PATCH 06/39] STY: remove old import Remove the 're' package, which is no longer used. --- docs/conf.py | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index 72652500..7df53ae2 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -3,7 +3,6 @@ import json import os from pyproject_parser import PyProject -import re extensions = ['sphinx.ext.autodoc', 'sphinx.ext.autosummary', From 55a9695b392d7e57c58a7907d91fd4d89d985b0a Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 30 Dec 2024 15:21:33 -0500 Subject: [PATCH 07/39] BUG: added missing yaml variable Added the numpy version variable name to the Mac runs. --- .github/workflows/main.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index e88a6880..bf50388f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -24,12 +24,16 @@ jobs: # Support different GA Mac environmnets - python-version: "3.9" os: "macos-13" + numpy_ver: "latest" - python-version: "3.10" os: "macos-13" + numpy_ver: "latest" - python-version: "3.11" os: "macos-latest" + numpy_ver: "latest" - python-version: "3.12" os: "macos-latest" + numpy_ver: "latest" # NEP29 compliance settings - python-version: "3.10" numpy_ver: "1.25" From 271a291d68702269821caf2fafdd4c297aecb5bc Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 30 Dec 2024 15:26:53 -0500 Subject: [PATCH 08/39] BUG: fix doc test install Change the doc test installation to use pyproject.toml. Also updated the docs requirements file. --- .github/workflows/docs.yml | 2 +- docs/requirements.txt | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index d302093b..5485d7b3 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -31,7 +31,7 @@ jobs: run: | pip install build python -m build . - pip install -r docs/requirements.txt + pip install .[doc] - name: Check documentation build run: sphinx-build -E -b html docs dist/docs diff --git a/docs/requirements.txt b/docs/requirements.txt index 470e42f3..7abacb21 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,3 +1,4 @@ +pyproject_parser sphinx>=1.3 sphinx-autoapi sphinx_rtd_theme From 42f97a41557d76d44fd5f0689e082378afbba99c Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 30 Dec 2024 15:31:40 -0500 Subject: [PATCH 09/39] BUG: fix doc imports Fixed the pyproject.toml doc imports. --- pyproject.toml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index f9f342e5..a15f2fd0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -69,7 +69,12 @@ test = [ "pytest-cov", "pytest-xdist" ] -doc = ["pyproject_parser", "sphinx>=1.3", "sphinx-rtd-theme"] +doc = [ + "pyproject_parser", + "sphinx>=1.3", + "sphinx-autoapi", + "sphinx-rtd-theme" +] [project.urls] source = "https://github.com/aburrell/apexpy" From 03c76c097f791c6ef46f241387682dbb474a30c0 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 30 Dec 2024 16:26:05 -0500 Subject: [PATCH 10/39] BUG: fixed README link Fixed the README link, as tested on TestPyPi. --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index e12808f5..47e59293 100644 --- a/README.rst +++ b/README.rst @@ -143,5 +143,5 @@ Badges .. |doi| image:: https://www.zenodo.org/badge/doi/10.5281/zenodo.4585641.svg :target: https://doi.org/10.5281/zenodo.1214206 -.. |logo| image:: https://github.com/aburrell/apexpy/blob/main/docs/apexpy.png +.. |logo| image:: https://github.com/aburrell/apexpy/blob/main/docs/apexpy.png?raw=true :alt: ApexPy logo: yellow magnetic field lines surrounding the Earth's surface, which is blue From a0c5acdffb22bb3de2b143270cca7fbffb5a3a21 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 30 Dec 2024 16:37:41 -0500 Subject: [PATCH 11/39] MAINT: update manifest Ensure coefficient dat file is included. --- MANIFEST.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MANIFEST.in b/MANIFEST.in index ed533e15..d5274d60 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -2,7 +2,7 @@ graft docs graft fortranapex graft .github -recursive-include apexpy *.txt meson.build +recursive-include apexpy *.txt apexsh.dat meson.build include *.rst include *.md From 691aee15463db3f9159f1242ec2c91b39ea7ba11 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 30 Dec 2024 16:39:29 -0500 Subject: [PATCH 12/39] MAINT: update pyproject.toml Update the pyproject.toml to include coverage calls, update the script call, and include the package data. --- pyproject.toml | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index a15f2fd0..9e3b2206 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -58,8 +58,8 @@ classifiers = [ "Operating System :: MacOS", ] -[tool.project.scripts] -apexpy = {reference = 'apexpy.__main__:main', type = 'console'} +[project.scripts] +apexpy = 'apexpy.__main__:main' [project.optional-dependencies] test = [ @@ -81,3 +81,19 @@ source = "https://github.com/aburrell/apexpy" documentation = "https://apexpy.readthedocs.io/en/latest/" tracker = "https://github.com/aburrell/apexpy/issues" download = "https://github.com/aburrell/apexpy/releases" + +[tool.setuptools.package-data] +mypkg = [ + "apexsh.dat", + "igrf14coeffs.txt" +] + +[tool.coverage.run] +branch = true +relative_files = true +parallel = true +include = "*/site-packages/apexpy/*" + +[tool.coverage.report] +show_missing = true +precision = 2 From 962d58ad38943f67eb3d289c501a48f93d350e4a Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 30 Dec 2024 16:40:30 -0500 Subject: [PATCH 13/39] MAINT: remove migrated lines Remove lines migrated to the pyproject.toml file. --- setup.cfg | 62 ------------------------------------------------------- 1 file changed, 62 deletions(-) diff --git a/setup.cfg b/setup.cfg index 6fc09cab..f9ef6760 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,68 +1,6 @@ [metadata] name = apexpy version = 2.1.0 -license = MIT -description = "A Python wrapper for Apex coordinates" -long_description = file: README.rst, CHANGELOG.rst -long_description_content_type = text/x-rst -url = https://github.com/aburrell/apexpy -keywords = - apex - modified apex - quasi-dipole - quasi dipole - coordinates - magnetic coordinates - mlt - magnetic local time - conversion - converting -classifiers = - Development Status :: 5 - Production/Stable - Intended Audience :: Science/Research - License :: OSI Approved :: MIT License - Operating System :: Unix - Operating System :: POSIX - Operating System :: Microsoft :: Windows - Operating System :: MacOS :: MacOS X - Programming Language :: Python - Programming Language :: Python :: 3 - Programming Language :: Python :: 3.9 - Programming Language :: Python :: 3.10 - Programming Language :: Python :: 3.11 - Programming Language :: Python :: 3.12 - Programming Language :: Python :: Implementation :: CPython - Topic :: Scientific/Engineering :: Physics - Topic :: Utilities - -[options] -zip_safe = False -install_requires = numpy -include_package_data = True -include_entry_points = True - -[options.entry_points] -console_scripts = - apexpy = apexpy.__main__:main - -[options.package_data] -apexpy = - apexsh.dat - igrf14coeffs.txt - -[aliases] -release = register clean --all sdist - -[coverage:run] -branch = True -relative_files = True -parallel = True -include = */site-packages/apexpy/* - -[coverage:report] -show_missing = True -precision = 2 -omit = *migrations* [flake8] max-line-length = 80 From a9d91162b31a49d3e8a79cc74621f878b9f3091b Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 30 Dec 2024 17:08:16 -0500 Subject: [PATCH 14/39] BUG: fixed CLI write issue Fixed the interface between the argparse structure and the numpy file output creation. --- apexpy/__main__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apexpy/__main__.py b/apexpy/__main__.py index 45b5e2e0..0019b9b8 100644 --- a/apexpy/__main__.py +++ b/apexpy/__main__.py @@ -64,7 +64,7 @@ def main(): args.dest, args.height, datetime=in_time) # Save the output to a file - np.savetxt(args.file_out, np.column_stack((lats, lons)), fmt='%.8f') + np.savetxt(args.file_out.name, np.column_stack((lats, lons)), fmt='%.8f') return From 22c960c65edbb45c32cb2ab06b2dde8266baf82c Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 30 Dec 2024 17:09:18 -0500 Subject: [PATCH 15/39] DOC: updated API instructions Changing the pyproject.toml allowed the ``apexpy`` command to be created, addressing issue #113. --- docs/api.rst | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/docs/api.rst b/docs/api.rst index cc867bc3..d3c54051 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -30,11 +30,9 @@ Command-line interface .. highlight:: none When you install this package you used to get a command called ``apexpy``, which -is an interface to the :py:meth:`~apexpy.Apex.convert` method. This interface is -currently missing (see Issue -`#113 `_). Until this issue is -addressed, you may follow the below examples by prefacing the command with -``python -m``, as shown below. +is an interface to the :py:meth:`~apexpy.Apex.convert` method. If this +interface is missing (may be caused by the installation path not being a part +of your path), you may use ``python -m apexpy`` instead. See the documentation for this method for a more thorough explanation of arguments and behaviour. From 10349b3f5e8b66dce1219097148a2d06dac59962 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 30 Dec 2024 17:25:55 -0500 Subject: [PATCH 16/39] BUG: fixed stdout handling Fixed the input for stdout. --- apexpy/__main__.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/apexpy/__main__.py b/apexpy/__main__.py index 0019b9b8..24f8a0d2 100644 --- a/apexpy/__main__.py +++ b/apexpy/__main__.py @@ -63,8 +63,12 @@ def main(): lats, lons = apex_obj.convert(arg_array[:, 0], arg_array[:, 1], args.source, args.dest, args.height, datetime=in_time) - # Save the output to a file - np.savetxt(args.file_out.name, np.column_stack((lats, lons)), fmt='%.8f') + # Save the output to a file. Use the name for non-stdout inputs + if args.file_out.name.lower().find('stdout') >= 0: + fout_name = args.file_out + else: + fout_name = args.file_out.name + np.savetxt(fout_name, np.column_stack((lats, lons)), fmt='%.8f') return From d27749867cc08c80f07379d37974b2c3bd57415a Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 30 Dec 2024 17:41:36 -0500 Subject: [PATCH 17/39] BUG: added windows catch Added a windows catch for the version definition using metadata. --- apexpy/__init__.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apexpy/__init__.py b/apexpy/__init__.py index fa5b0d50..942918db 100644 --- a/apexpy/__init__.py +++ b/apexpy/__init__.py @@ -14,5 +14,9 @@ from apexpy import helpers # noqa F401 # Define the global variables -__version__ = metadata.version('apexpy') +try: + __version__ = metadata.version('apexpy') +except metadata.PackageNotFoundError: + # Windows installation is not finding the version automatically + __version__ = "2.1.0" __all__ = ['Apex', 'fortranapex', 'helpers', 'ApexHeightError'] From e0df47b329f9f549df9cba92600edccae2d6d181 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 30 Dec 2024 18:18:58 -0500 Subject: [PATCH 18/39] DOC: updated header Updated this section header to be more obvious as to the contents. --- docs/api.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/api.rst b/docs/api.rst index d3c54051..d0232c80 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -1,5 +1,5 @@ -Reference -========= +PackageStructure +================ The :py:class:`apexpy.Apex` class is used for all the main functionality (converting between coordinate systems, field line mapping, and calculating @@ -41,7 +41,7 @@ You can get help on the command by running ``python -m apexpy -h``. .. code:: - $ python -m apexpy -h + $ apexpy -h usage: apexpy [-h] [--height HEIGHT] [--refh REFH] [-i FILE_IN] [-o FILE_OUT] SOURCE DEST DATE From 753196d17ab740afca8d2496e0da8735efa1fcbf Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 30 Dec 2024 18:19:47 -0500 Subject: [PATCH 19/39] ENH: added support function for arrays Array handling has changed in newer versions of numpy, added a function to update the array data type if the input is a numpy array and leave it alone otherwise. --- apexpy/helpers.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/apexpy/helpers.py b/apexpy/helpers.py index e67cac5e..5bd85bcd 100644 --- a/apexpy/helpers.py +++ b/apexpy/helpers.py @@ -7,6 +7,28 @@ import time +def set_array_float(in_val): + """Set array data type to float. + + Parameters + ---------- + in_val : any + Input value, only modified if it has the `dtype` attribute. + + Returns + ------- + out_val : any + Output value, if `in_val` was an array, `out_val` will be an array of + type `np.float64`. + + """ + + if hasattr(in_val, 'dtype'): + out_val = in_val.astype(np.float64) + + return out_val + + def checklat(lat, name='lat'): """Makes sure the latitude is inside [-90, 90], clipping close values (tolerance 1e-4). From 196b25c497686777489a5cc40708a45464b842f1 Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 30 Dec 2024 18:20:58 -0500 Subject: [PATCH 20/39] MAINT: reduced deprecation warnings Reduced deprecation warnings by: - replacing `resource.path` calls with `resource.files` and - using the new helper function to cast array types when necessary. --- apexpy/apex.py | 35 ++++++++++++++++++++++++-------- apexpy/tests/test_fortranapex.py | 3 ++- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/apexpy/apex.py b/apexpy/apex.py index 494acad7..ed5a879a 100644 --- a/apexpy/apex.py +++ b/apexpy/apex.py @@ -101,8 +101,7 @@ def __init__(self, date=None, refh=0, datafile=None, fortranlib=None): # If datafile is not specified, use the package default, otherwise # check that the provided file exists if datafile is None: - datafile = str(resources.path(__package__, - 'apexsh.dat').__enter__()) + datafile = os.path.join(resources.files(__package__), 'apexsh.dat') else: if not os.path.isfile(datafile): raise IOError('Data file does not exist: {}'.format(datafile)) @@ -120,8 +119,8 @@ def __init__(self, date=None, refh=0, datafile=None, fortranlib=None): self.fortranlib = fortranlib # Set the IGRF coefficient text file name - self.igrf_fn = str(resources.path(__package__, - 'igrf14coeffs.txt').__enter__()) + self.igrf_fn = os.path.join(resources.files(__package__), + 'igrf14coeffs.txt') # Update the Fortran epoch using the year defined above self.set_epoch(self.year) @@ -565,7 +564,10 @@ def geo2apex(self, glat, glon, height): alat[alat == -9999] = np.nan # If array is returned, dtype is object, so convert to float - return np.float64(alat), np.float64(alon) + alat = helpers.set_array_float(alat) + alon = helpers.set_array_float(np.float64) + + return alat, alon def apex2geo(self, alat, alon, height, precision=1e-10): """Converts modified apex to geodetic coordinates. @@ -634,6 +636,9 @@ def geo2qd(self, glat, glon, height): qlat, qlon = self._geo2qd(glat, glon, height) # If array is returned, dtype is object, so convert to float + qlat = helpers.set_array_float(qlat) + qlon = helpers.set_array_float(qlon) + return np.float64(qlat), np.float64(qlon) def qd2geo(self, qlat, qlon, height, precision=1e-10): @@ -674,7 +679,11 @@ def qd2geo(self, qlat, qlon, height, precision=1e-10): glat, glon, error = self._qd2geo(qlat, qlon, height, precision) # If array is returned, dtype is object, so convert to float - return np.float64(glat), np.float64(glon), np.float64(error) + glat = helpers.set_array_float(glat) + glon = helpers.set_array_float(glon) + error = helpers.set_array_float(error) + + return glat, glon, error def apex2qd(self, alat, alon, height): """Converts modified apex to quasi-dipole coordinates. @@ -706,7 +715,10 @@ def apex2qd(self, alat, alon, height): qlat, qlon = self._apex2qd(alat, alon, height) # If array is returned, the dtype is object, so convert to float - return np.float64(qlat), np.float64(qlon) + qlat = helpers.set_array_float(qlat) + qlon = helpers.set_array_float(qlon) + + return qlat, qlon def qd2apex(self, qlat, qlon, height): """Converts quasi-dipole to modified apex coordinates. @@ -737,7 +749,10 @@ def qd2apex(self, qlat, qlon, height): alat, alon = self._qd2apex(qlat, qlon, height) # If array is returned, the dtype is object, so convert to float - return np.float64(alat), np.float64(alon) + alat = helpers.set_array_float(alat) + alon = helpers.set_array_float(alon) + + return alat, alon def mlon2mlt(self, mlon, dtime, ssheight=318550): """Computes the magnetic local time at the specified magnetic longitude @@ -1264,7 +1279,9 @@ def get_babs(self, glat, glon, height): babs = self._get_babs(glat, glon, height) # If array is returned, the dtype is object, so convert to float - return np.float64(babs) + babs = helpers.set_array_float(babs) + + return babs def bvectors_apex(self, lat, lon, height, coords='geo', precision=1e-10): """Returns the magnetic field vectors in apex coordinates. diff --git a/apexpy/tests/test_fortranapex.py b/apexpy/tests/test_fortranapex.py index 33fc97de..d3c503ca 100644 --- a/apexpy/tests/test_fortranapex.py +++ b/apexpy/tests/test_fortranapex.py @@ -14,6 +14,7 @@ from numpy.testing import assert_allclose from importlib import resources +import os import pytest import apexpy @@ -25,7 +26,7 @@ class TestFortranApex(object): def setup_method(self): """Initialize each test.""" - datafile = str(resources.path(apexpy, 'apexsh.dat').__enter__()) + datafile = os.path.join(resources.files(apexpy), 'apexsh.dat') fa.loadapxsh(datafile, 2000) # Set the inputs From 9376855ba28e06adb44fe162b437fa993ad6df1e Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 30 Dec 2024 18:21:18 -0500 Subject: [PATCH 21/39] TST: added array casting tests Added unit tests for the array casting function. --- apexpy/tests/test_helpers.py | 38 ++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/apexpy/tests/test_helpers.py b/apexpy/tests/test_helpers.py index b270810f..6e4fd3bc 100644 --- a/apexpy/tests/test_helpers.py +++ b/apexpy/tests/test_helpers.py @@ -68,6 +68,44 @@ def eval_output(self, rtol=1e-7, atol=0.0): assert np.asarray(self.calc_val).shape == self.in_shape return + @pytest.mark.parametrize('val', [90, np.nan, None, [20.0], True]) + def test_check_set_array_float_no_modify(self, val): + """Test `set_array_float` with inputs that won't be modified. + + Parameters + ---------- + val : any but np.array + Value without a 'dtype' attribute + + """ + self.calc_val = helpers.set_array_float(val) + + if np.isnan(val): + assert np.isnan(self.calc_val) + else: + assert self.calc_val == val + return + + @pytest.mark.parametrize('dtype', [int, float, bool, str, object]) + def test_check_set_array_float_success(self, dtype): + """Test `set_array_float` modifies array inputs. + + Parameters + ---------- + dtype : dtype + Data type to use when creating input array + + """ + self.test_val = np.ones(shape=(2,), dtype=dtype) + self.calc_val = helpers.set_array_float(self.test_val) + + # Test that the output dtype is as expected + assert self.calc_val.dtype == np.float64 + + # Validate values + self.eval_output() + return + @pytest.mark.parametrize('lat', [90, 0, -90, np.nan]) def test_checklat_scalar(self, lat): """Test good latitude check with scalars. From 1cb6da0c3e06a6ae5aae6312587a1273f655f42f Mon Sep 17 00:00:00 2001 From: "Angeline G. Burrell" Date: Mon, 30 Dec 2024 18:46:24 -0500 Subject: [PATCH 22/39] BUG: partial bugfixes Partial bugfixes for corrections to deprecated behaviour. --- apexpy/apex.py | 16 ++++++++-------- apexpy/helpers.py | 6 ++++-- apexpy/tests/test_helpers.py | 17 ++++++++++------- 3 files changed, 22 insertions(+), 17 deletions(-) diff --git a/apexpy/apex.py b/apexpy/apex.py index ed5a879a..eeec7002 100644 --- a/apexpy/apex.py +++ b/apexpy/apex.py @@ -565,7 +565,7 @@ def geo2apex(self, glat, glon, height): # If array is returned, dtype is object, so convert to float alat = helpers.set_array_float(alat) - alon = helpers.set_array_float(np.float64) + alon = helpers.set_array_float(alon) return alat, alon @@ -639,7 +639,7 @@ def geo2qd(self, glat, glon, height): qlat = helpers.set_array_float(qlat) qlon = helpers.set_array_float(qlon) - return np.float64(qlat), np.float64(qlon) + return qlat, qlon def qd2geo(self, qlat, qlon, height, precision=1e-10): """Converts quasi-dipole to geodetic coordinates. @@ -792,8 +792,8 @@ def mlon2mlt(self, mlon, dtime, ssheight=318550): _, ssalon = self.geo2apex(ssglat, ssglon, ssheight) # Calculate the magnetic local time (0-24 h range) from apex longitude. - # np.float64 will ensure lists are converted to arrays - mlt = (180 + np.float64(mlon) - ssalon) / 15 % 24 + # Ensure lists are converted to arrays + mlt = (180 + np.asarray(mlon) - ssalon) / 15 % 24 return mlt @@ -833,8 +833,8 @@ def mlt2mlon(self, mlt, dtime, ssheight=318550): _, ssalon = self.geo2apex(ssglat, ssglon, ssheight) # Calculate the magnetic longitude (0-360 h range) from MLT. - # np.float64 will ensure lists are converted to arrays - mlon = (15 * np.float64(mlt) - 180 + ssalon + 360) % 360 + # Ensure lists are converted to arrays + mlon = (15 * np.asarray(mlt) - 180 + ssalon + 360) % 360 return mlon @@ -1145,10 +1145,10 @@ def basevectors_apex(self, lat, lon, height, coords='geo', precision=1e-10): k_unit = np.array([0, 0, 1], dtype=np.float64).reshape((3, 1)) # Calculate the remaining quasi-dipole base vectors - g1 = ((self.RE + np.float64(height)) + g1 = ((self.RE + np.asarray(height)) / (self.RE + self.refh)) ** (3 / 2) * d1 / F_scalar g2 = -1.0 / (2.0 * F_scalar * np.tan(np.radians(qlat))) * ( - k_unit + ((self.RE + np.float64(height)) + k_unit + ((self.RE + np.asarray(height)) / (self.RE + self.refh)) * d2 / cos_mag_inc) g3 = k_unit * F_scalar f3 = np.cross(g1.T, g2.T).T diff --git a/apexpy/helpers.py b/apexpy/helpers.py index 5bd85bcd..013811e9 100644 --- a/apexpy/helpers.py +++ b/apexpy/helpers.py @@ -13,7 +13,7 @@ def set_array_float(in_val): Parameters ---------- in_val : any - Input value, only modified if it has the `dtype` attribute. + Input value, only modified if it is a np.ndarray Returns ------- @@ -23,8 +23,10 @@ def set_array_float(in_val): """ - if hasattr(in_val, 'dtype'): + if isinstance(in_val, np.ndarray): out_val = in_val.astype(np.float64) + else: + out_val = in_val return out_val diff --git a/apexpy/tests/test_helpers.py b/apexpy/tests/test_helpers.py index 6e4fd3bc..68ded850 100644 --- a/apexpy/tests/test_helpers.py +++ b/apexpy/tests/test_helpers.py @@ -61,8 +61,7 @@ def teardown_method(self): del self.in_shape, self.calc_val, self.test_val def eval_output(self, rtol=1e-7, atol=0.0): - """Evaluate the values and shape of the calculated and expected output. - """ + """Evaluate the values and shape of the calced and expected output.""" np.testing.assert_allclose(self.calc_val, self.test_val, rtol=rtol, atol=atol) assert np.asarray(self.calc_val).shape == self.in_shape @@ -80,13 +79,15 @@ def test_check_set_array_float_no_modify(self, val): """ self.calc_val = helpers.set_array_float(val) - if np.isnan(val): + if val is None: + assert self.calc_val is None + elif np.isnan(val): assert np.isnan(self.calc_val) else: assert self.calc_val == val return - @pytest.mark.parametrize('dtype', [int, float, bool, str, object]) + @pytest.mark.parametrize('dtype', [int, float, bool, object]) def test_check_set_array_float_success(self, dtype): """Test `set_array_float` modifies array inputs. @@ -96,13 +97,15 @@ def test_check_set_array_float_success(self, dtype): Data type to use when creating input array """ - self.test_val = np.ones(shape=(2,), dtype=dtype) - self.calc_val = helpers.set_array_float(self.test_val) + self.in_shape = (2,) + self.calc_val = helpers.set_array_float( + np.ones(shape=self.in_shape, dtype=dtype)) # Test that the output dtype is as expected assert self.calc_val.dtype == np.float64 - # Validate values + # Ensure values are unity + self.test_val = np.ones(shape=self.in_shape, dtype=np.float64) self.eval_output() return From 63eda9d3225bc18cf7beaeb79fe37116e2d60844 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 31 Dec 2024 09:05:36 -0500 Subject: [PATCH 23/39] STY: remove blank space Remove the blank space before the module docstring. --- apexpy/helpers.py | 1 - 1 file changed, 1 deletion(-) diff --git a/apexpy/helpers.py b/apexpy/helpers.py index 013811e9..ca60a2c8 100644 --- a/apexpy/helpers.py +++ b/apexpy/helpers.py @@ -1,5 +1,4 @@ # -*- coding: utf-8 -*- - """This module contains helper functions used by :class:`~apexpy.Apex`.""" import datetime as dt From 5f6b851898accc632c3a82eb7d1866f5cd1f4dc6 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 31 Dec 2024 09:05:59 -0500 Subject: [PATCH 24/39] DOC: update IGRF reference Update the IGRF reference in the Authors file. --- AUTHORS.rst | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/AUTHORS.rst b/AUTHORS.rst index 97a80dea..03025017 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -15,7 +15,10 @@ This python wrapper is made by: Fortran code by Emmert et al. [2010] [1]_. Quasi-dipole and modified apex coordinates are defined by Richmond [1995] [2]_. The code uses -IGRF-12 with coefficients valid through 2020 [Thébault et al., 2015] [3]_. +IGRF-14 with coefficients valid through 2030. A special issue on IGRF-14 is +currently accepting +`submissions `_. A reference +for IGRF-12 is [Thébault et al., 2015] [3]_. .. [1] Emmert, J. T., A. D. Richmond, and D. P. Drob (2010), A computationally compact representation of Magnetic-Apex From bd641ef03e0f1ac49232412f08ca9133bb7526ac Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 31 Dec 2024 09:06:20 -0500 Subject: [PATCH 25/39] STY: add reference to doc Added a reference tag to the authors section in the docs. --- docs/authors.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/authors.rst b/docs/authors.rst index e122f914..a887eee3 100644 --- a/docs/authors.rst +++ b/docs/authors.rst @@ -1 +1,3 @@ +.. _authors: + .. include:: ../AUTHORS.rst From 70760ee2b29495546c83a881cc3a213c9c31d84f Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 31 Dec 2024 09:08:04 -0500 Subject: [PATCH 26/39] DOC: added citation guide Added a citation guide for apexpy. --- docs/citing.rst | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 docs/citing.rst diff --git a/docs/citing.rst b/docs/citing.rst new file mode 100644 index 00000000..9c3aad4d --- /dev/null +++ b/docs/citing.rst @@ -0,0 +1,29 @@ +Citations +========= + +When referring to this software package, please be sure to include the package +and specify which version you used ``_. +Note that this DOI will always point to the latest version of the code. A list +of DOIs for all versions can be found at the Zenodo page above. The version can +by found by printing :py:attr:`apexpy.__version__`. We also recommend citing a +reference to the coordinate system you use. More relevant references can be +found in :ref:`authors`. + +Example for citation in BibTex for a generalized version: + +.. code:: + + @misc{apexpy, + author = {van der Meeren, Christer and + Laundal, Karl M. and + Burrell, Angeline G. and + Lamarche, Leslie and + Starr, Gregory and + Reimer, Ashton and + Morschhauser, Achim and + Michaelis, Ingo}, + title = {ApexPy vX.Y.Z}, + year = 2024, + doi = {10.5281/zenodo.1214206}, + url = {https://github.com/aburrell/apexpy} + } From 9ed86d3e2a1c1472eb1887288c70748ac334955b Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 31 Dec 2024 09:16:13 -0500 Subject: [PATCH 27/39] STY: ensure output type Ensure float inputs yield float outputs in mlon/mlt functions. Also updated a docstring to be more informative. --- apexpy/apex.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/apexpy/apex.py b/apexpy/apex.py index eeec7002..37b3e362 100644 --- a/apexpy/apex.py +++ b/apexpy/apex.py @@ -795,6 +795,9 @@ def mlon2mlt(self, mlon, dtime, ssheight=318550): # Ensure lists are converted to arrays mlt = (180 + np.asarray(mlon) - ssalon) / 15 % 24 + if mlt.shape == (): + mlt = np.float64(mlt) + return mlt def mlt2mlon(self, mlt, dtime, ssheight=318550): @@ -836,6 +839,9 @@ def mlt2mlon(self, mlt, dtime, ssheight=318550): # Ensure lists are converted to arrays mlon = (15 * np.asarray(mlt) - 180 + ssalon + 360) % 360 + if mlon.shape == (): + mlon = np.float64(mlon) + return mlon def map_to_height(self, glat, glon, height, newheight, conjugate=False, @@ -1169,7 +1175,7 @@ def basevectors_apex(self, lat, lon, height, coords='geo', precision=1e-10): return out def get_apex(self, lat, height=None): - """ Calculate apex height + """Calculate the apex height along a field line. Parameters ---------- From d2790bbe5ec86c1ba919e47c3bc58e94e7bd237e Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 31 Dec 2024 09:16:32 -0500 Subject: [PATCH 28/39] DOC: expanded changelog Expanded the changelog to include more of the changes implemented. --- CHANGELOG.rst | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 8cfd34ac..c570e2cd 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -5,10 +5,14 @@ Changelog 2.1.0 (2024-12-31) ------------------ * Adapted codebase to read IRGF coefficients from a file (updated to IGRF-14) -* Updated docs to reflect missing command-line executable * Updated package to be compliant and installable with numpy 2.0+ * Added tests for Python 3.12 and NEP29 * Fixed link to logo in the README +* Updated pyproject.toml to include most metadata instead of setup.cfg +* Added a citation section to the docs +* Fixed the command-line executable +* Updated code to address deprecation warnings around np.float64 use +* Updated code to remove use of datetime `utcnow` 2.0.2 (2024-11-12) ------------------ From 77a63b9ee29587c11427d639199f741d84521bba Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 31 Dec 2024 09:18:30 -0500 Subject: [PATCH 29/39] DOC: Update docs/api.rst Added a missing space between words. --- docs/api.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/api.rst b/docs/api.rst index d0232c80..26cab95c 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -1,5 +1,5 @@ -PackageStructure -================ +Package Structure +================= The :py:class:`apexpy.Apex` class is used for all the main functionality (converting between coordinate systems, field line mapping, and calculating From fb9284d9c7f90140c015780169c2e46d5a0bf164 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 31 Dec 2024 09:21:43 -0500 Subject: [PATCH 30/39] DOC: added citation guide to docs index Added the citation guide to the docs index. --- docs/index.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/index.rst b/docs/index.rst index 7357dcb7..f7733ea3 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -12,6 +12,7 @@ Contents contributing maintenance authors + citing changelog Indices and tables From 24285cefab2a8e090327aca8b49a8ec15a64f5b5 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Thu, 2 Jan 2025 12:00:31 -0500 Subject: [PATCH 31/39] MAINT: Update pyproject.toml Removed unneeded dependency. --- pyproject.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 9e3b2206..0f348842 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,6 @@ requires = [ "meson-python>=0.12.0", "setuptools<60.0", # Do not increase, 60.0 enables vendored distutils "Cython>=0.29.21", - "python-dev-tools", "numpy" ] From 3941a751fc9aeac31619fb839929954eb5793c2c Mon Sep 17 00:00:00 2001 From: Jeff Klenzing <19592220+jklenzing@users.noreply.github.com> Date: Thu, 2 Jan 2025 12:13:55 -0500 Subject: [PATCH 32/39] BUG: include ninja in build --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index 0f348842..57ecc673 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,6 +5,7 @@ requires = [ "meson-python>=0.12.0", "setuptools<60.0", # Do not increase, 60.0 enables vendored distutils "Cython>=0.29.21", + "ninja", "numpy" ] From 063abb13476d74ae8dceb0642a0c4ad2d763e3d0 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing <19592220+jklenzing@users.noreply.github.com> Date: Thu, 2 Jan 2025 12:22:21 -0500 Subject: [PATCH 33/39] STY: white space --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 57ecc673..80eec3b0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ requires = [ "meson-python>=0.12.0", "setuptools<60.0", # Do not increase, 60.0 enables vendored distutils "Cython>=0.29.21", - "ninja", + "ninja", "numpy" ] From 2b3746ebe1cc18197b07ed6de31548cb982f3d6a Mon Sep 17 00:00:00 2001 From: Jeff Klenzing <19592220+jklenzing@users.noreply.github.com> Date: Thu, 2 Jan 2025 12:22:33 -0500 Subject: [PATCH 34/39] DOC: update authors --- .zenodo.json | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/.zenodo.json b/.zenodo.json index 15317e3f..c0101126 100644 --- a/.zenodo.json +++ b/.zenodo.json @@ -1,28 +1,28 @@ { "license": { "id": "MIT" - }, + }, "notes": "When referencing this package, please cite both the package DOI and the Apex Coordinates journal article: Emmert, J. T., A. D. Richmond, and D. P. Drob (2010), A computationally compact representation of Magnetic-Apex and Quasi-Dipole coordinates with smooth base vectors, J. Geophys. Res., 115(A8), A08322, doi:10.1029/2010JA015326.", "references": [ "Emmert, J. T., A. D. Richmond, and D. P. Drob (2010), A computationally compact representation of Magnetic-Apex and Quasi-Dipole coordinates with smooth base vectors, J. Geophys. Res., 115(A8), A08322, doi:10.1029/2010JA015326.", "Richmond, A. D. (1995), Ionospheric Electrodynamics Using Magnetic Apex Coordinates, Journal of geomagnetism and geoelectricity, 47(2), 191–212, doi:10.5636/jgg.47.191." - ], + ], "keywords": [ "Magnetic Apex Coordinates", "Quasi Dipole Coordinates", - "MLT", - "Magnetic Local Time", - "Conversion", - "Coordinate Conversion", - "Converting", - "Ionosphere", - "Magnetic Field", - "Space Physics", + "MLT", + "Magnetic Local Time", + "Conversion", + "Coordinate Conversion", + "Converting", + "Ionosphere", + "Magnetic Field", + "Space Physics", "Heliophysics" - ], + ], "creators": [ { - "orcid": "0000-0002-8043-0953", + "orcid": "0000-0002-8043-0953", "name": "van der Meeren, Christer" }, { @@ -30,8 +30,8 @@ "name": "Laundal, Karl M." }, { - "orcid": "0000-0001-8875-9326", - "affiliation": "Naval Research Laboratory", + "orcid": "0000-0001-8875-9326", + "affiliation": "Naval Research Laboratory", "name": "Burrell, Angeline G." }, { @@ -55,6 +55,11 @@ "orcid": "0000-0001-9741-4063", "affiliation": "GFZ German Research Centre for Geosciences", "name": "Michaelis, Ingo" + }, + { + "orcid": "0000-0001-8321-6074", + "affiliation": "Goddard Space Flight Center", + "name": "Klenzing, Jeff" } - ] +] } From cb280daf0a5625b5adf2f40f05b58f0659f5ec93 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing <19592220+jklenzing@users.noreply.github.com> Date: Thu, 2 Jan 2025 12:24:01 -0500 Subject: [PATCH 35/39] DOC: update authors --- AUTHORS.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.rst b/AUTHORS.rst index 03025017..37791a04 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -12,6 +12,7 @@ This python wrapper is made by: * Ashton Reimer * Achim Morschhauser * Ingo Michaelis +* Jeff Klenzing Fortran code by Emmert et al. [2010] [1]_. Quasi-dipole and modified apex coordinates are defined by Richmond [1995] [2]_. The code uses From 979a02077414309b3ca837154829446d1f2d5081 Mon Sep 17 00:00:00 2001 From: Jeff Klenzing <19592220+jklenzing@users.noreply.github.com> Date: Thu, 2 Jan 2025 12:25:35 -0500 Subject: [PATCH 36/39] DOC: update changelog --- CHANGELOG.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index c570e2cd..4b2184bf 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -13,6 +13,7 @@ Changelog * Fixed the command-line executable * Updated code to address deprecation warnings around np.float64 use * Updated code to remove use of datetime `utcnow` +* Updated meson build requirements to include ninja for Windows builds 2.0.2 (2024-11-12) ------------------ From 627bdd0d42652d9bcc55d5b49eda96414c1ff12e Mon Sep 17 00:00:00 2001 From: Jeff Klenzing <19592220+jklenzing@users.noreply.github.com> Date: Thu, 2 Jan 2025 12:38:27 -0500 Subject: [PATCH 37/39] STY: whitespace --- .zenodo.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.zenodo.json b/.zenodo.json index c0101126..49051aa2 100644 --- a/.zenodo.json +++ b/.zenodo.json @@ -61,5 +61,5 @@ "affiliation": "Goddard Space Flight Center", "name": "Klenzing, Jeff" } -] + ] } From 6e0fc8bf6aafe8c17e3491a3f3abcba43d8e7278 Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Thu, 2 Jan 2025 13:19:30 -0500 Subject: [PATCH 38/39] DOC: Update CHANGELOG.rst Expanded changelog line to be more informative. --- CHANGELOG.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 4b2184bf..f11127bc 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -13,7 +13,7 @@ Changelog * Fixed the command-line executable * Updated code to address deprecation warnings around np.float64 use * Updated code to remove use of datetime `utcnow` -* Updated meson build requirements to include ninja for Windows builds +* Updated meson build requirements to include ninja for Windows builds instead of python-dev-tools 2.0.2 (2024-11-12) ------------------ From db6311fd28e0861d293d42360772b66b889c66cb Mon Sep 17 00:00:00 2001 From: Angeline Burrell Date: Tue, 7 Jan 2025 11:05:29 -0500 Subject: [PATCH 39/39] DOC: Update CHANGELOG.rst Fixed the release date. --- CHANGELOG.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index f11127bc..632a8e26 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -2,7 +2,7 @@ Changelog ========= -2.1.0 (2024-12-31) +2.1.0 (2025-01-07) ------------------ * Adapted codebase to read IRGF coefficients from a file (updated to IGRF-14) * Updated package to be compliant and installable with numpy 2.0+