PyGCPM 0.1.0__tar.gz → 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pygcpm-0.2.0/.github/workflows/ci.yml +311 -0
- pygcpm-0.2.0/.github/workflows/release.yml +86 -0
- pygcpm-0.2.0/.gitignore +133 -0
- pygcpm-0.2.0/CMakeLists.txt +38 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PKG-INFO +15 -14
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/_CFunctions.py +11 -20
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/libgcpm.c +1 -1
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__init__.py +1 -1
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/README.md +7 -2
- pygcpm-0.2.0/pyproject.toml +54 -0
- pygcpm-0.2.0/tests/test_gcpm.py +28 -0
- pygcpm-0.2.0/wheelhouse/pygcpm-0.2.0-py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl +0 -0
- PyGCPM-0.1.0/MANIFEST.in +0 -2
- PyGCPM-0.1.0/PyGCPM/__data/libgcpm/libgcpm.o +0 -0
- PyGCPM-0.1.0/PyGCPM.egg-info/PKG-INFO +0 -123
- PyGCPM-0.1.0/PyGCPM.egg-info/SOURCES.txt +0 -168
- PyGCPM-0.1.0/PyGCPM.egg-info/dependency_links.txt +0 -1
- PyGCPM-0.1.0/PyGCPM.egg-info/requires.txt +0 -3
- PyGCPM-0.1.0/PyGCPM.egg-info/top_level.txt +0 -1
- PyGCPM-0.1.0/setup.cfg +0 -4
- PyGCPM-0.1.0/setup.py +0 -79
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/LICENSE +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/GCPM.py +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/PlotEqSlice.py +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/PlotMLTSlice.py +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/PlotPlanet.py +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/bulge.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/equatorial_view.pro +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/fieldaligned_view.pro +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_equatorial.jpg +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_fieldaligned.jpg +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_00h_12h_kp1p0.bin +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_00h_12h_kp1p0.jpg +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_01h_13h_kp1p0.bin +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_01h_13h_kp1p0.jpg +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_02h_14h_kp1p0.bin +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_02h_14h_kp1p0.jpg +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_03h_15h_kp1p0.bin +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_03h_15h_kp1p0.jpg +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_04h_16h_kp1p0.bin +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_04h_16h_kp1p0.jpg +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_05h_17h_kp1p0.bin +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_05h_17h_kp1p0.jpg +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_06h_18h_kp1p0.bin +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_06h_18h_kp1p0.jpg +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_07h_19h_kp1p0.bin +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_07h_19h_kp1p0.jpg +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_08h_20h_kp1p0.bin +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_08h_20h_kp1p0.jpg +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_09h_21h_kp1p0.bin +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_09h_21h_kp1p0.jpg +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_10h_22h_kp1p0.bin +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_10h_22h_kp1p0.jpg +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_11h_23h_kp1p0.bin +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_11h_23h_kp1p0.jpg +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/iri_ps_bridge.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/iri_ps_eq_bridge.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/iri_sm.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/makefile +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/meridian_view.pro +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/ne_inner_ps_trough.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/ne_iri_cap.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/ne_iri_ps_trough.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/ne_iri_ps_trough_eq.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/pp_profile.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/radial_profile.pro +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/switchon.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/test_equatorial.bin +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/test_fieldaligned.txt +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/test_radial.txt +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/tests/test2D_gcpm_V24_equatorial_slice.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/tests/test2D_gcpm_V24_meridianal_slice.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/tests/test_gcpm_V24_fieldaligned.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/tests/test_gcpm_V24_radialline.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm.py +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/00readme.txt +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/IMAZ/00readme_imaz.txt +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/IMAZ/chapman.prn +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/IMAZ/imaztest.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/IMAZ/iri_imaz.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/IMAZ/press_60deg.txt +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/IMAZ/press_70deg.txt +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/Te-plasmasphere-akebono/akebono_te.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ap.dat +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ccir11.asc +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ccir12.asc +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ccir13.asc +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ccir14.asc +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ccir15.asc +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ccir16.asc +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ccir17.asc +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ccir18.asc +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ccir19.asc +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ccir20.asc +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ccir21.asc +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ccir22.asc +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/cira.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/dgrf00.dat +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/dgrf45.dat +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/dgrf50.dat +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/dgrf55.dat +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/dgrf60.dat +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/dgrf65.dat +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/dgrf70.dat +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/dgrf75.dat +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/dgrf80.dat +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/dgrf85.dat +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/dgrf90.dat +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/dgrf95.dat +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ig_rz.dat +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/igrf.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/igrf05.dat +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/igrf05s.dat +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/iridreg.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/irifun.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/irisub.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/iritec.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/makefile +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/test/iritest.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ursi11.asc +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ursi12.asc +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ursi13.asc +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ursi14.asc +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ursi15.asc +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ursi16.asc +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ursi17.asc +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ursi18.asc +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ursi19.asc +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ursi20.asc +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ursi21.asc +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ursi22.asc +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/libgcpm.h +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/makefile +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/Cart_to_pol.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GEI_TO_GSM.FOR +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GEI_TO_MAG.FOR +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GEI_TO_SM.FOR +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GEO_TO_GEI.FOR +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GEO_TO_GSE.FOR +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GEO_TO_GSM.FOR +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GEO_TO_MAG.FOR +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GEO_TO_SM.FOR +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GSE_TO_GEI.FOR +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GSE_TO_GEO.FOR +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GSE_TO_GSM.FOR +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GSE_TO_MAG.FOR +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GSE_TO_SM.FOR +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GSM_TO_GEI.FOR +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GSM_TO_GEO.FOR +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GSM_TO_GSE.FOR +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GSM_TO_MAG.FOR +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GSM_TO_SM.FOR +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/Gei_TO_gse.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/Gei_to_geo.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/Get_q_c.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/MAG_TO_GEI.FOR +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/MAG_TO_GEO.FOR +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/MAG_TO_GSE.FOR +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/MAG_TO_GSM.FOR +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/MAG_TO_SM.FOR +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/POL_TO_CART.FOR +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/Rotate_x.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/Rotate_y.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/Rotate_z.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/SM_TO_GEI.FOR +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/SM_TO_GEO.FOR +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/SM_TO_GSE.FOR +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/SM_TO_GSM.FOR +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/SM_TO_MAG.FOR +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/T0.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/T1.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/T2.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/T3.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/T4.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/T5.for +0 -0
- {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/makefile +0 -0
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
workflow_dispatch:
|
|
6
|
+
inputs:
|
|
7
|
+
linux_x86_64:
|
|
8
|
+
description: Build for Linux x86_64
|
|
9
|
+
type: boolean
|
|
10
|
+
default: true
|
|
11
|
+
linux_aarch64:
|
|
12
|
+
description: Build for Linux ARM64
|
|
13
|
+
type: boolean
|
|
14
|
+
default: false
|
|
15
|
+
macos_arm64:
|
|
16
|
+
description: Build for macOS ARM64
|
|
17
|
+
type: boolean
|
|
18
|
+
default: true
|
|
19
|
+
macos_x86_64:
|
|
20
|
+
description: Build for macOS x86_64
|
|
21
|
+
type: boolean
|
|
22
|
+
default: false
|
|
23
|
+
windows_x86_64:
|
|
24
|
+
description: Build for Windows x86_64
|
|
25
|
+
type: boolean
|
|
26
|
+
default: true
|
|
27
|
+
windows_arm64:
|
|
28
|
+
description: Build for Windows ARM64
|
|
29
|
+
type: boolean
|
|
30
|
+
default: false
|
|
31
|
+
upload_artifacts:
|
|
32
|
+
description: Upload wheels and one source distribution
|
|
33
|
+
type: boolean
|
|
34
|
+
default: false
|
|
35
|
+
workflow_call:
|
|
36
|
+
inputs:
|
|
37
|
+
linux_x86_64:
|
|
38
|
+
description: Build for Linux x86_64
|
|
39
|
+
type: boolean
|
|
40
|
+
default: true
|
|
41
|
+
linux_aarch64:
|
|
42
|
+
description: Build for Linux ARM64
|
|
43
|
+
type: boolean
|
|
44
|
+
default: false
|
|
45
|
+
macos_arm64:
|
|
46
|
+
description: Build for macOS ARM64
|
|
47
|
+
type: boolean
|
|
48
|
+
default: true
|
|
49
|
+
macos_x86_64:
|
|
50
|
+
description: Build for macOS x86_64
|
|
51
|
+
type: boolean
|
|
52
|
+
default: false
|
|
53
|
+
windows_x86_64:
|
|
54
|
+
description: Build for Windows x86_64
|
|
55
|
+
type: boolean
|
|
56
|
+
default: true
|
|
57
|
+
windows_arm64:
|
|
58
|
+
description: Build for Windows ARM64
|
|
59
|
+
type: boolean
|
|
60
|
+
default: false
|
|
61
|
+
upload_artifacts:
|
|
62
|
+
description: Upload wheels and one source distribution
|
|
63
|
+
type: boolean
|
|
64
|
+
default: false
|
|
65
|
+
|
|
66
|
+
permissions:
|
|
67
|
+
contents: read
|
|
68
|
+
|
|
69
|
+
jobs:
|
|
70
|
+
linux:
|
|
71
|
+
if: github.event_name == 'pull_request' || inputs.linux_x86_64 || inputs.linux_aarch64
|
|
72
|
+
strategy:
|
|
73
|
+
fail-fast: false
|
|
74
|
+
matrix:
|
|
75
|
+
include: ${{ fromJSON(
|
|
76
|
+
github.event_name == 'pull_request' &&
|
|
77
|
+
'[{"arch":"x86_64","runner":"ubuntu-latest","python_arch":"x64","primary":true}]' ||
|
|
78
|
+
inputs.linux_x86_64 && inputs.linux_aarch64 &&
|
|
79
|
+
'[{"arch":"x86_64","runner":"ubuntu-latest","python_arch":"x64","primary":true},{"arch":"aarch64","runner":"ubuntu-24.04-arm","python_arch":"arm64","primary":false}]' ||
|
|
80
|
+
inputs.linux_x86_64 &&
|
|
81
|
+
'[{"arch":"x86_64","runner":"ubuntu-latest","python_arch":"x64","primary":true}]' ||
|
|
82
|
+
'[{"arch":"aarch64","runner":"ubuntu-24.04-arm","python_arch":"arm64","primary":true}]'
|
|
83
|
+
) }}
|
|
84
|
+
name: linux-${{ matrix.arch }}
|
|
85
|
+
runs-on: ${{ matrix.runner }}
|
|
86
|
+
|
|
87
|
+
steps:
|
|
88
|
+
- name: Check out repository
|
|
89
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
90
|
+
with:
|
|
91
|
+
submodules: recursive
|
|
92
|
+
|
|
93
|
+
- name: Set up Python
|
|
94
|
+
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
95
|
+
with:
|
|
96
|
+
python-version: "3.14"
|
|
97
|
+
architecture: ${{ matrix.python_arch }}
|
|
98
|
+
|
|
99
|
+
- name: Build manylinux wheel
|
|
100
|
+
env:
|
|
101
|
+
CIBW_ARCHS_LINUX: ${{ matrix.arch }}
|
|
102
|
+
CIBW_BEFORE_ALL_LINUX: yum install -y gcc-gfortran
|
|
103
|
+
CIBW_BUILD: cp314-manylinux*
|
|
104
|
+
run: |
|
|
105
|
+
python -m pip install cibuildwheel==3.3.0
|
|
106
|
+
python -m cibuildwheel --platform linux --output-dir wheelhouse
|
|
107
|
+
|
|
108
|
+
- name: Build source distribution
|
|
109
|
+
if: inputs.upload_artifacts && matrix.primary
|
|
110
|
+
run: |
|
|
111
|
+
python -m pip install build
|
|
112
|
+
python -m build --sdist .
|
|
113
|
+
|
|
114
|
+
- name: Install wheel into test environment
|
|
115
|
+
run: |
|
|
116
|
+
python -m venv "$RUNNER_TEMP/pygcpm-test-venv"
|
|
117
|
+
"$RUNNER_TEMP/pygcpm-test-venv/bin/python" -m pip install wheelhouse/*.whl pytest
|
|
118
|
+
|
|
119
|
+
- name: Run installed-package tests
|
|
120
|
+
working-directory: ${{ runner.temp }}
|
|
121
|
+
env:
|
|
122
|
+
MPLCONFIGDIR: ${{ runner.temp }}/matplotlib
|
|
123
|
+
run: |
|
|
124
|
+
"$RUNNER_TEMP/pygcpm-test-venv/bin/python" -m pytest "$GITHUB_WORKSPACE/tests"
|
|
125
|
+
|
|
126
|
+
- name: Upload wheel
|
|
127
|
+
if: inputs.upload_artifacts
|
|
128
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
129
|
+
with:
|
|
130
|
+
name: wheel-linux-${{ matrix.arch }}
|
|
131
|
+
path: wheelhouse/*.whl
|
|
132
|
+
if-no-files-found: error
|
|
133
|
+
|
|
134
|
+
- name: Upload source distribution
|
|
135
|
+
if: inputs.upload_artifacts && matrix.primary
|
|
136
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
137
|
+
with:
|
|
138
|
+
name: source-distribution
|
|
139
|
+
path: dist/*.tar.gz
|
|
140
|
+
if-no-files-found: error
|
|
141
|
+
|
|
142
|
+
macos:
|
|
143
|
+
if: github.event_name == 'pull_request' || inputs.macos_arm64 || inputs.macos_x86_64
|
|
144
|
+
strategy:
|
|
145
|
+
fail-fast: false
|
|
146
|
+
matrix:
|
|
147
|
+
include: ${{ fromJSON(
|
|
148
|
+
github.event_name == 'pull_request' &&
|
|
149
|
+
'[{"arch":"arm64","runner":"macos-14","python_arch":"arm64","deployment_target":"14.0","wheel_platform":"macosx_14_0_arm64","primary":true}]' ||
|
|
150
|
+
inputs.macos_arm64 && inputs.macos_x86_64 &&
|
|
151
|
+
'[{"arch":"arm64","runner":"macos-14","python_arch":"arm64","deployment_target":"14.0","wheel_platform":"macosx_14_0_arm64","primary":true},{"arch":"x86_64","runner":"macos-15-intel","python_arch":"x64","deployment_target":"15.0","wheel_platform":"macosx_15_0_x86_64","primary":false}]' ||
|
|
152
|
+
inputs.macos_arm64 &&
|
|
153
|
+
'[{"arch":"arm64","runner":"macos-14","python_arch":"arm64","deployment_target":"14.0","wheel_platform":"macosx_14_0_arm64","primary":true}]' ||
|
|
154
|
+
'[{"arch":"x86_64","runner":"macos-15-intel","python_arch":"x64","deployment_target":"15.0","wheel_platform":"macosx_15_0_x86_64","primary":true}]'
|
|
155
|
+
) }}
|
|
156
|
+
name: macos-${{ matrix.arch }}
|
|
157
|
+
runs-on: ${{ matrix.runner }}
|
|
158
|
+
env:
|
|
159
|
+
MACOSX_DEPLOYMENT_TARGET: ${{ matrix.deployment_target }}
|
|
160
|
+
|
|
161
|
+
steps:
|
|
162
|
+
- name: Check out repository
|
|
163
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
164
|
+
with:
|
|
165
|
+
submodules: recursive
|
|
166
|
+
|
|
167
|
+
- name: Set up Python
|
|
168
|
+
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
169
|
+
with:
|
|
170
|
+
python-version: "3.14"
|
|
171
|
+
architecture: ${{ matrix.python_arch }}
|
|
172
|
+
|
|
173
|
+
- name: Install GNU Fortran
|
|
174
|
+
run: |
|
|
175
|
+
brew install gcc
|
|
176
|
+
runtime=$(dirname "$(gfortran --print-file-name libgfortran.dylib)")
|
|
177
|
+
echo "REPAIR_LIBRARY_PATH=$runtime" >> "$GITHUB_ENV"
|
|
178
|
+
|
|
179
|
+
- name: Build wheel
|
|
180
|
+
env:
|
|
181
|
+
CIBW_ARCHS_MACOS: ${{ matrix.arch }}
|
|
182
|
+
CIBW_BUILD: cp314-*
|
|
183
|
+
CIBW_ENVIRONMENT_MACOS: FC=gfortran MACOSX_DEPLOYMENT_TARGET=${{ matrix.deployment_target }}
|
|
184
|
+
CIBW_REPAIR_WHEEL_COMMAND_MACOS: >-
|
|
185
|
+
DYLD_LIBRARY_PATH=$REPAIR_LIBRARY_PATH
|
|
186
|
+
delocate-wheel --require-archs {delocate_archs}
|
|
187
|
+
-w {dest_dir} -v {wheel}
|
|
188
|
+
run: |
|
|
189
|
+
python -m pip install cibuildwheel==3.3.0
|
|
190
|
+
python -m cibuildwheel --platform macos --output-dir dist
|
|
191
|
+
|
|
192
|
+
- name: Build source distribution
|
|
193
|
+
if: inputs.upload_artifacts && matrix.primary && !inputs.linux_x86_64 && !inputs.linux_aarch64
|
|
194
|
+
run: |
|
|
195
|
+
python -m pip install build
|
|
196
|
+
python -m build --sdist .
|
|
197
|
+
|
|
198
|
+
- name: Install wheel into test environment
|
|
199
|
+
run: |
|
|
200
|
+
python -m venv "$RUNNER_TEMP/pygcpm-test-venv"
|
|
201
|
+
"$RUNNER_TEMP/pygcpm-test-venv/bin/python" -m pip install dist/*.whl pytest
|
|
202
|
+
|
|
203
|
+
- name: Run installed-package tests
|
|
204
|
+
working-directory: ${{ runner.temp }}
|
|
205
|
+
env:
|
|
206
|
+
MPLCONFIGDIR: ${{ runner.temp }}/matplotlib
|
|
207
|
+
run: |
|
|
208
|
+
"$RUNNER_TEMP/pygcpm-test-venv/bin/python" -m pytest "$GITHUB_WORKSPACE/tests"
|
|
209
|
+
|
|
210
|
+
- name: Upload wheel
|
|
211
|
+
if: inputs.upload_artifacts
|
|
212
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
213
|
+
with:
|
|
214
|
+
name: wheel-macos-${{ matrix.arch }}
|
|
215
|
+
path: dist/*.whl
|
|
216
|
+
if-no-files-found: error
|
|
217
|
+
|
|
218
|
+
- name: Upload source distribution
|
|
219
|
+
if: inputs.upload_artifacts && matrix.primary && !inputs.linux_x86_64 && !inputs.linux_aarch64
|
|
220
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
221
|
+
with:
|
|
222
|
+
name: source-distribution
|
|
223
|
+
path: dist/*.tar.gz
|
|
224
|
+
if-no-files-found: error
|
|
225
|
+
|
|
226
|
+
windows:
|
|
227
|
+
if: github.event_name == 'pull_request' || inputs.windows_x86_64 || inputs.windows_arm64
|
|
228
|
+
strategy:
|
|
229
|
+
fail-fast: false
|
|
230
|
+
matrix:
|
|
231
|
+
include: ${{ fromJSON(
|
|
232
|
+
github.event_name == 'pull_request' &&
|
|
233
|
+
'[{"arch":"x86_64","runner":"windows-latest","python_arch":"x64","primary":true}]' ||
|
|
234
|
+
inputs.windows_x86_64 && inputs.windows_arm64 &&
|
|
235
|
+
'[{"arch":"x86_64","runner":"windows-latest","python_arch":"x64","primary":true},{"arch":"arm64","runner":"windows-11-arm","python_arch":"arm64","primary":false}]' ||
|
|
236
|
+
inputs.windows_x86_64 &&
|
|
237
|
+
'[{"arch":"x86_64","runner":"windows-latest","python_arch":"x64","primary":true}]' ||
|
|
238
|
+
'[{"arch":"arm64","runner":"windows-11-arm","python_arch":"arm64","primary":true}]'
|
|
239
|
+
) }}
|
|
240
|
+
name: windows-${{ matrix.arch }}
|
|
241
|
+
runs-on: ${{ matrix.runner }}
|
|
242
|
+
|
|
243
|
+
steps:
|
|
244
|
+
- name: Check out repository
|
|
245
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
246
|
+
with:
|
|
247
|
+
submodules: recursive
|
|
248
|
+
|
|
249
|
+
- name: Set up Python
|
|
250
|
+
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
251
|
+
with:
|
|
252
|
+
python-version: "3.14"
|
|
253
|
+
architecture: ${{ matrix.python_arch }}
|
|
254
|
+
|
|
255
|
+
- name: Build wheel
|
|
256
|
+
env:
|
|
257
|
+
CIBW_ARCHS_WINDOWS: ${{ matrix.arch == 'x86_64' && 'AMD64' || 'ARM64' }}
|
|
258
|
+
CIBW_BEFORE_ALL_WINDOWS: choco install mingw -y
|
|
259
|
+
CIBW_BEFORE_BUILD_WINDOWS: python -m pip install delvewheel==1.12.0
|
|
260
|
+
CIBW_BUILD: cp314-*
|
|
261
|
+
CIBW_ENVIRONMENT_WINDOWS: >-
|
|
262
|
+
CMAKE_GENERATOR=Ninja
|
|
263
|
+
CC=gcc
|
|
264
|
+
FC=gfortran
|
|
265
|
+
CMAKE_ARGS="-DCMAKE_C_COMPILER=gcc -DCMAKE_Fortran_COMPILER=gfortran"
|
|
266
|
+
CIBW_REPAIR_WHEEL_COMMAND_WINDOWS: >-
|
|
267
|
+
delvewheel repair --analyze-existing -v
|
|
268
|
+
-w {dest_dir} {wheel}
|
|
269
|
+
run: |
|
|
270
|
+
python -m pip install cibuildwheel==3.3.0
|
|
271
|
+
python -m cibuildwheel --platform windows --output-dir dist
|
|
272
|
+
|
|
273
|
+
- name: Build source distribution
|
|
274
|
+
if: inputs.upload_artifacts && matrix.primary && !inputs.linux_x86_64 && !inputs.linux_aarch64 && !inputs.macos_arm64 && !inputs.macos_x86_64
|
|
275
|
+
run: |
|
|
276
|
+
python -m pip install build
|
|
277
|
+
python -m build --sdist .
|
|
278
|
+
|
|
279
|
+
- name: Install wheel into test environment
|
|
280
|
+
shell: pwsh
|
|
281
|
+
run: |
|
|
282
|
+
$venv = Join-Path $env:RUNNER_TEMP "pygcpm-test-venv"
|
|
283
|
+
python -m venv $venv
|
|
284
|
+
$python = Join-Path $venv "Scripts/python.exe"
|
|
285
|
+
$wheel = Get-ChildItem "dist/*.whl" | Select-Object -First 1
|
|
286
|
+
& $python -m pip install $wheel.FullName pytest
|
|
287
|
+
|
|
288
|
+
- name: Run installed-package tests
|
|
289
|
+
shell: pwsh
|
|
290
|
+
working-directory: ${{ runner.temp }}
|
|
291
|
+
env:
|
|
292
|
+
MPLCONFIGDIR: ${{ runner.temp }}/matplotlib
|
|
293
|
+
run: |
|
|
294
|
+
$python = Join-Path $env:RUNNER_TEMP "pygcpm-test-venv/Scripts/python.exe"
|
|
295
|
+
& $python -m pytest "$env:GITHUB_WORKSPACE/tests"
|
|
296
|
+
|
|
297
|
+
- name: Upload wheel
|
|
298
|
+
if: inputs.upload_artifacts
|
|
299
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
300
|
+
with:
|
|
301
|
+
name: wheel-windows-${{ matrix.arch }}
|
|
302
|
+
path: dist/*.whl
|
|
303
|
+
if-no-files-found: error
|
|
304
|
+
|
|
305
|
+
- name: Upload source distribution
|
|
306
|
+
if: inputs.upload_artifacts && matrix.primary && !inputs.linux_x86_64 && !inputs.linux_aarch64 && !inputs.macos_arm64 && !inputs.macos_x86_64
|
|
307
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
308
|
+
with:
|
|
309
|
+
name: source-distribution
|
|
310
|
+
path: dist/*.tar.gz
|
|
311
|
+
if-no-files-found: error
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
name: Release Package
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_dispatch:
|
|
5
|
+
inputs:
|
|
6
|
+
test:
|
|
7
|
+
description: Publish to TestPyPI instead of PyPI
|
|
8
|
+
type: boolean
|
|
9
|
+
default: false
|
|
10
|
+
|
|
11
|
+
permissions:
|
|
12
|
+
contents: write
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
get-version:
|
|
16
|
+
runs-on: ubuntu-latest
|
|
17
|
+
outputs:
|
|
18
|
+
version: ${{ steps.version.outputs.version }}
|
|
19
|
+
steps:
|
|
20
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
21
|
+
- id: version
|
|
22
|
+
shell: python
|
|
23
|
+
run: |
|
|
24
|
+
import os, tomllib
|
|
25
|
+
from pathlib import Path
|
|
26
|
+
version = tomllib.loads(Path("pyproject.toml").read_text())["project"]["version"]
|
|
27
|
+
with open(os.environ["GITHUB_OUTPUT"], "a") as output:
|
|
28
|
+
output.write(f"version=v{version}\n")
|
|
29
|
+
|
|
30
|
+
tag:
|
|
31
|
+
needs: get-version
|
|
32
|
+
runs-on: ubuntu-latest
|
|
33
|
+
steps:
|
|
34
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
35
|
+
with:
|
|
36
|
+
fetch-depth: 0
|
|
37
|
+
- name: Create and push tag
|
|
38
|
+
run: |
|
|
39
|
+
git config user.name github-actions
|
|
40
|
+
git config user.email github-actions@github.com
|
|
41
|
+
git tag "${{ needs.get-version.outputs.version }}"
|
|
42
|
+
git push origin "${{ needs.get-version.outputs.version }}"
|
|
43
|
+
|
|
44
|
+
build:
|
|
45
|
+
needs: tag
|
|
46
|
+
uses: ./.github/workflows/ci.yml
|
|
47
|
+
with:
|
|
48
|
+
linux_x86_64: true
|
|
49
|
+
linux_aarch64: true
|
|
50
|
+
macos_arm64: true
|
|
51
|
+
macos_x86_64: true
|
|
52
|
+
windows_x86_64: true
|
|
53
|
+
windows_arm64: false
|
|
54
|
+
upload_artifacts: true
|
|
55
|
+
secrets: inherit
|
|
56
|
+
|
|
57
|
+
release:
|
|
58
|
+
if: ${{ !inputs.test }}
|
|
59
|
+
needs: [get-version, build]
|
|
60
|
+
runs-on: ubuntu-latest
|
|
61
|
+
steps:
|
|
62
|
+
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
63
|
+
with:
|
|
64
|
+
path: dist
|
|
65
|
+
merge-multiple: true
|
|
66
|
+
- uses: softprops/action-gh-release@b4309332981a82ec1c5618f44dd2e27cc8bfbfda # v3.0.0
|
|
67
|
+
with:
|
|
68
|
+
tag_name: ${{ needs.get-version.outputs.version }}
|
|
69
|
+
name: Release ${{ needs.get-version.outputs.version }}
|
|
70
|
+
files: dist/*
|
|
71
|
+
|
|
72
|
+
publish:
|
|
73
|
+
needs: [build, release]
|
|
74
|
+
if: ${{ always() && needs.build.result == 'success' && (inputs.test || needs.release.result == 'success') }}
|
|
75
|
+
runs-on: ubuntu-latest
|
|
76
|
+
steps:
|
|
77
|
+
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
78
|
+
with:
|
|
79
|
+
path: dist
|
|
80
|
+
merge-multiple: true
|
|
81
|
+
- name: Publish distributions
|
|
82
|
+
uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
|
|
83
|
+
with:
|
|
84
|
+
user: __token__
|
|
85
|
+
password: ${{ inputs.test && secrets.TEST_PYPI_API_TOKEN || secrets.PYPI_API_TOKEN }}
|
|
86
|
+
repository-url: ${{ inputs.test && 'https://test.pypi.org/legacy/' || 'https://upload.pypi.org/legacy/' }}
|
pygcpm-0.2.0/.gitignore
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
*.dylib
|
|
9
|
+
*.dll
|
|
10
|
+
*.o
|
|
11
|
+
fort.*
|
|
12
|
+
|
|
13
|
+
# Distribution / packaging
|
|
14
|
+
.Python
|
|
15
|
+
build/
|
|
16
|
+
develop-eggs/
|
|
17
|
+
dist/
|
|
18
|
+
downloads/
|
|
19
|
+
eggs/
|
|
20
|
+
.eggs/
|
|
21
|
+
lib/
|
|
22
|
+
lib64/
|
|
23
|
+
parts/
|
|
24
|
+
sdist/
|
|
25
|
+
var/
|
|
26
|
+
wheels/
|
|
27
|
+
pip-wheel-metadata/
|
|
28
|
+
share/python-wheels/
|
|
29
|
+
*.egg-info/
|
|
30
|
+
.installed.cfg
|
|
31
|
+
*.egg
|
|
32
|
+
MANIFEST
|
|
33
|
+
|
|
34
|
+
# PyInstaller
|
|
35
|
+
# Usually these files are written by a python script from a template
|
|
36
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
37
|
+
*.manifest
|
|
38
|
+
*.spec
|
|
39
|
+
|
|
40
|
+
# Installer logs
|
|
41
|
+
pip-log.txt
|
|
42
|
+
pip-delete-this-directory.txt
|
|
43
|
+
|
|
44
|
+
# Unit test / coverage reports
|
|
45
|
+
htmlcov/
|
|
46
|
+
.tox/
|
|
47
|
+
.nox/
|
|
48
|
+
.coverage
|
|
49
|
+
.coverage.*
|
|
50
|
+
.cache
|
|
51
|
+
nosetests.xml
|
|
52
|
+
coverage.xml
|
|
53
|
+
*.cover
|
|
54
|
+
*.py,cover
|
|
55
|
+
.hypothesis/
|
|
56
|
+
.pytest_cache/
|
|
57
|
+
|
|
58
|
+
# Translations
|
|
59
|
+
*.mo
|
|
60
|
+
*.pot
|
|
61
|
+
|
|
62
|
+
# Django stuff:
|
|
63
|
+
*.log
|
|
64
|
+
local_settings.py
|
|
65
|
+
db.sqlite3
|
|
66
|
+
db.sqlite3-journal
|
|
67
|
+
|
|
68
|
+
# Flask stuff:
|
|
69
|
+
instance/
|
|
70
|
+
.webassets-cache
|
|
71
|
+
|
|
72
|
+
# Scrapy stuff:
|
|
73
|
+
.scrapy
|
|
74
|
+
|
|
75
|
+
# Sphinx documentation
|
|
76
|
+
docs/_build/
|
|
77
|
+
|
|
78
|
+
# PyBuilder
|
|
79
|
+
target/
|
|
80
|
+
|
|
81
|
+
# Jupyter Notebook
|
|
82
|
+
.ipynb_checkpoints
|
|
83
|
+
|
|
84
|
+
# IPython
|
|
85
|
+
profile_default/
|
|
86
|
+
ipython_config.py
|
|
87
|
+
|
|
88
|
+
# pyenv
|
|
89
|
+
.python-version
|
|
90
|
+
|
|
91
|
+
# pipenv
|
|
92
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
93
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
94
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
95
|
+
# install all needed dependencies.
|
|
96
|
+
#Pipfile.lock
|
|
97
|
+
|
|
98
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
|
|
99
|
+
__pypackages__/
|
|
100
|
+
|
|
101
|
+
# Celery stuff
|
|
102
|
+
celerybeat-schedule
|
|
103
|
+
celerybeat.pid
|
|
104
|
+
|
|
105
|
+
# SageMath parsed files
|
|
106
|
+
*.sage.py
|
|
107
|
+
|
|
108
|
+
# Environments
|
|
109
|
+
.env
|
|
110
|
+
.venv
|
|
111
|
+
env/
|
|
112
|
+
venv/
|
|
113
|
+
ENV/
|
|
114
|
+
env.bak/
|
|
115
|
+
venv.bak/
|
|
116
|
+
|
|
117
|
+
# Spyder project settings
|
|
118
|
+
.spyderproject
|
|
119
|
+
.spyproject
|
|
120
|
+
|
|
121
|
+
# Rope project settings
|
|
122
|
+
.ropeproject
|
|
123
|
+
|
|
124
|
+
# mkdocs documentation
|
|
125
|
+
/site
|
|
126
|
+
|
|
127
|
+
# mypy
|
|
128
|
+
.mypy_cache/
|
|
129
|
+
.dmypy.json
|
|
130
|
+
dmypy.json
|
|
131
|
+
|
|
132
|
+
# Pyre type checker
|
|
133
|
+
.pyre/
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
cmake_minimum_required(VERSION 3.20)
|
|
2
|
+
|
|
3
|
+
project(PyGCPM LANGUAGES C Fortran)
|
|
4
|
+
|
|
5
|
+
set(LIBGCPM_DIR "${CMAKE_CURRENT_SOURCE_DIR}/PyGCPM/__data/libgcpm")
|
|
6
|
+
file(GLOB IRI_SOURCES CONFIGURE_DEPENDS "${LIBGCPM_DIR}/iri/*.for")
|
|
7
|
+
file(GLOB XFORM_SOURCES CONFIGURE_DEPENDS
|
|
8
|
+
"${LIBGCPM_DIR}/xform/*.for"
|
|
9
|
+
"${LIBGCPM_DIR}/xform/*.FOR"
|
|
10
|
+
)
|
|
11
|
+
file(GLOB GCPM_SOURCES CONFIGURE_DEPENDS "${LIBGCPM_DIR}/gcpm/*.for")
|
|
12
|
+
|
|
13
|
+
add_library(gcpm SHARED
|
|
14
|
+
"${LIBGCPM_DIR}/libgcpm.c"
|
|
15
|
+
${IRI_SOURCES}
|
|
16
|
+
${XFORM_SOURCES}
|
|
17
|
+
${GCPM_SOURCES}
|
|
18
|
+
)
|
|
19
|
+
if(UNIX)
|
|
20
|
+
target_link_libraries(gcpm PRIVATE m)
|
|
21
|
+
endif()
|
|
22
|
+
set_target_properties(gcpm PROPERTIES
|
|
23
|
+
OUTPUT_NAME "gcpm"
|
|
24
|
+
PREFIX "lib"
|
|
25
|
+
WINDOWS_EXPORT_ALL_SYMBOLS ON
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
if(CMAKE_Fortran_COMPILER_ID STREQUAL "GNU")
|
|
29
|
+
target_compile_options(gcpm PRIVATE
|
|
30
|
+
$<$<COMPILE_LANGUAGE:Fortran>:-w;-fno-automatic;-std=legacy;-ffixed-line-length-none>
|
|
31
|
+
)
|
|
32
|
+
endif()
|
|
33
|
+
|
|
34
|
+
install(
|
|
35
|
+
TARGETS gcpm
|
|
36
|
+
LIBRARY DESTINATION PyGCPM/__data/libgcpm COMPONENT Python
|
|
37
|
+
RUNTIME DESTINATION PyGCPM/__data/libgcpm COMPONENT Python
|
|
38
|
+
)
|
|
@@ -1,17 +1,15 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: PyGCPM
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Summary: Python wrapper for the Global Core Plasma Model
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
Author-email: mattkjames7@gmail.com
|
|
8
|
-
License: UNKNOWN
|
|
9
|
-
Platform: UNKNOWN
|
|
5
|
+
Author-Email: Matthew Knight James <mattkjames7@gmail.com>
|
|
6
|
+
License-Expression: GPL-3.0-only
|
|
10
7
|
Classifier: Programming Language :: Python :: 3
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
Project-URL: Homepage, https://github.com/mattkjames7/PyGCPM
|
|
9
|
+
Requires-Dist: numpy
|
|
10
|
+
Requires-Dist: DateTimeTools>=0.0.6
|
|
11
|
+
Requires-Dist: matplotlib
|
|
13
12
|
Description-Content-Type: text/markdown
|
|
14
|
-
License-File: LICENSE
|
|
15
13
|
|
|
16
14
|
# PyGCPM
|
|
17
15
|
|
|
@@ -41,14 +39,19 @@ or,
|
|
|
41
39
|
pip3 install PyGCPM --user
|
|
42
40
|
```
|
|
43
41
|
|
|
44
|
-
From this repo:
|
|
42
|
+
From this repo (a C and Fortran compiler are required):
|
|
45
43
|
|
|
46
44
|
```
|
|
47
45
|
git clone https://github.com/mattkjames7/PyGCPM.git
|
|
48
46
|
cd PyGCPM/
|
|
49
|
-
python3
|
|
47
|
+
python3 -m pip install . --user
|
|
50
48
|
```
|
|
51
49
|
|
|
50
|
+
Pull requests build and test wheels for Linux (x86-64 and ARM64), macOS
|
|
51
|
+
(Intel and Apple Silicon), and Windows x86-64. Maintainers can run the release
|
|
52
|
+
workflow to create a version tag, attach all distributions to a GitHub release,
|
|
53
|
+
and publish them to PyPI or TestPyPI.
|
|
54
|
+
|
|
52
55
|
## Usage
|
|
53
56
|
|
|
54
57
|
So far, there are only two working functions - `GCPM` and `PlotEqSlice`,
|
|
@@ -119,5 +122,3 @@ PyGCPM.PlotEqSlice(Date,ut,Parameter='ne',Rmax=10.0,dR=0.5,Kp=1.0,fig=None,
|
|
|
119
122
|
|
|
120
123
|
Gallagher, D. L., Craven, P. D., & Comfort, R. H. (2000, aug). Global core plasma model.
|
|
121
124
|
J. Geophys. Res. Sp. Phys., 105(A8), 18819–18833. doi: 10.1029/1999JA000241
|
|
122
|
-
|
|
123
|
-
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import numpy as np
|
|
2
|
-
import os
|
|
3
2
|
import ctypes as ct
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
import sys
|
|
4
5
|
|
|
5
6
|
#some ctypes
|
|
6
7
|
c_str = ct.c_char_p
|
|
@@ -13,25 +14,15 @@ c_float_ptr = np.ctypeslib.ndpointer(ct.c_float,flags="C_CONTIGUOUS")
|
|
|
13
14
|
c_double_ptr = np.ctypeslib.ndpointer(ct.c_double,flags="C_CONTIGUOUS")
|
|
14
15
|
|
|
15
16
|
#get the path of the library
|
|
16
|
-
libpath =
|
|
17
|
+
libpath = Path(__file__).resolve().parent / "__data" / "libgcpm"
|
|
18
|
+
if sys.platform == "win32":
|
|
19
|
+
library = libpath / "libgcpm.dll"
|
|
20
|
+
elif sys.platform == "darwin":
|
|
21
|
+
library = libpath / "libgcpm.dylib"
|
|
22
|
+
else:
|
|
23
|
+
library = libpath / "libgcpm.so"
|
|
17
24
|
|
|
18
|
-
|
|
19
|
-
try:
|
|
20
|
-
libgcpm = ct.CDLL(libpath+"libgcpm.so")
|
|
21
|
-
except:
|
|
22
|
-
print('importing libgcpm.so failed, attempting to recompile')
|
|
23
|
-
path = os.path.dirname(__file__)
|
|
24
|
-
if '/usr/local/' in path:
|
|
25
|
-
sudo = 'sudo '
|
|
26
|
-
else:
|
|
27
|
-
sudo = ''
|
|
28
|
-
|
|
29
|
-
CWD = os.getcwd()
|
|
30
|
-
os.chdir(libpath)
|
|
31
|
-
os.system(sudo+'make clean')
|
|
32
|
-
os.system(sudo+'make')
|
|
33
|
-
os.chdir(CWD)
|
|
34
|
-
libgcpm = ct.CDLL(libpath+"libgcpm.so")
|
|
25
|
+
libgcpm = ct.CDLL(str(library))
|
|
35
26
|
|
|
36
27
|
|
|
37
28
|
|
|
@@ -58,4 +49,4 @@ _Csetpath = libgcpm.setLibPath
|
|
|
58
49
|
_Csetpath.restype = None
|
|
59
50
|
_Csetpath.argtypes = [c_str]
|
|
60
51
|
|
|
61
|
-
_Csetpath(c_str(libpath.encode("utf-8")))
|
|
52
|
+
_Csetpath(c_str((str(libpath) + "/").encode("utf-8")))
|
|
@@ -4,7 +4,7 @@ void setLibPath(const char *libpath) {
|
|
|
4
4
|
//printf("Setting path %s\n",libpath);
|
|
5
5
|
int l = strlen(libpath);
|
|
6
6
|
if (libgcpm_path == NULL) {
|
|
7
|
-
libgcpm_path = (char*) malloc(sizeof(char)*l);
|
|
7
|
+
libgcpm_path = (char*) malloc(sizeof(char)*(l + 1));
|
|
8
8
|
}
|
|
9
9
|
strcpy(libgcpm_path,libpath);
|
|
10
10
|
//printf("Done: %s\n",libgcpm_path);
|