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.
Files changed (177) hide show
  1. pygcpm-0.2.0/.github/workflows/ci.yml +311 -0
  2. pygcpm-0.2.0/.github/workflows/release.yml +86 -0
  3. pygcpm-0.2.0/.gitignore +133 -0
  4. pygcpm-0.2.0/CMakeLists.txt +38 -0
  5. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PKG-INFO +15 -14
  6. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/_CFunctions.py +11 -20
  7. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/libgcpm.c +1 -1
  8. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__init__.py +1 -1
  9. {PyGCPM-0.1.0 → pygcpm-0.2.0}/README.md +7 -2
  10. pygcpm-0.2.0/pyproject.toml +54 -0
  11. pygcpm-0.2.0/tests/test_gcpm.py +28 -0
  12. pygcpm-0.2.0/wheelhouse/pygcpm-0.2.0-py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl +0 -0
  13. PyGCPM-0.1.0/MANIFEST.in +0 -2
  14. PyGCPM-0.1.0/PyGCPM/__data/libgcpm/libgcpm.o +0 -0
  15. PyGCPM-0.1.0/PyGCPM.egg-info/PKG-INFO +0 -123
  16. PyGCPM-0.1.0/PyGCPM.egg-info/SOURCES.txt +0 -168
  17. PyGCPM-0.1.0/PyGCPM.egg-info/dependency_links.txt +0 -1
  18. PyGCPM-0.1.0/PyGCPM.egg-info/requires.txt +0 -3
  19. PyGCPM-0.1.0/PyGCPM.egg-info/top_level.txt +0 -1
  20. PyGCPM-0.1.0/setup.cfg +0 -4
  21. PyGCPM-0.1.0/setup.py +0 -79
  22. {PyGCPM-0.1.0 → pygcpm-0.2.0}/LICENSE +0 -0
  23. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/GCPM.py +0 -0
  24. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/PlotEqSlice.py +0 -0
  25. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/PlotMLTSlice.py +0 -0
  26. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/PlotPlanet.py +0 -0
  27. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/bulge.for +0 -0
  28. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/equatorial_view.pro +0 -0
  29. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/fieldaligned_view.pro +0 -0
  30. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24.for +0 -0
  31. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_equatorial.jpg +0 -0
  32. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_fieldaligned.jpg +0 -0
  33. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_00h_12h_kp1p0.bin +0 -0
  34. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_00h_12h_kp1p0.jpg +0 -0
  35. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_01h_13h_kp1p0.bin +0 -0
  36. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_01h_13h_kp1p0.jpg +0 -0
  37. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_02h_14h_kp1p0.bin +0 -0
  38. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_02h_14h_kp1p0.jpg +0 -0
  39. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_03h_15h_kp1p0.bin +0 -0
  40. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_03h_15h_kp1p0.jpg +0 -0
  41. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_04h_16h_kp1p0.bin +0 -0
  42. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_04h_16h_kp1p0.jpg +0 -0
  43. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_05h_17h_kp1p0.bin +0 -0
  44. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_05h_17h_kp1p0.jpg +0 -0
  45. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_06h_18h_kp1p0.bin +0 -0
  46. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_06h_18h_kp1p0.jpg +0 -0
  47. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_07h_19h_kp1p0.bin +0 -0
  48. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_07h_19h_kp1p0.jpg +0 -0
  49. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_08h_20h_kp1p0.bin +0 -0
  50. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_08h_20h_kp1p0.jpg +0 -0
  51. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_09h_21h_kp1p0.bin +0 -0
  52. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_09h_21h_kp1p0.jpg +0 -0
  53. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_10h_22h_kp1p0.bin +0 -0
  54. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_10h_22h_kp1p0.jpg +0 -0
  55. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_11h_23h_kp1p0.bin +0 -0
  56. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/gcpm_v24_meridian_11h_23h_kp1p0.jpg +0 -0
  57. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/iri_ps_bridge.for +0 -0
  58. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/iri_ps_eq_bridge.for +0 -0
  59. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/iri_sm.for +0 -0
  60. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/makefile +0 -0
  61. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/meridian_view.pro +0 -0
  62. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/ne_inner_ps_trough.for +0 -0
  63. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/ne_iri_cap.for +0 -0
  64. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/ne_iri_ps_trough.for +0 -0
  65. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/ne_iri_ps_trough_eq.for +0 -0
  66. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/pp_profile.for +0 -0
  67. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/radial_profile.pro +0 -0
  68. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/switchon.for +0 -0
  69. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/test_equatorial.bin +0 -0
  70. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/test_fieldaligned.txt +0 -0
  71. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/test_radial.txt +0 -0
  72. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/tests/test2D_gcpm_V24_equatorial_slice.for +0 -0
  73. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/tests/test2D_gcpm_V24_meridianal_slice.for +0 -0
  74. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/tests/test_gcpm_V24_fieldaligned.for +0 -0
  75. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm/tests/test_gcpm_V24_radialline.for +0 -0
  76. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/gcpm.py +0 -0
  77. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/00readme.txt +0 -0
  78. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/IMAZ/00readme_imaz.txt +0 -0
  79. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/IMAZ/chapman.prn +0 -0
  80. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/IMAZ/imaztest.for +0 -0
  81. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/IMAZ/iri_imaz.for +0 -0
  82. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/IMAZ/press_60deg.txt +0 -0
  83. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/IMAZ/press_70deg.txt +0 -0
  84. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/Te-plasmasphere-akebono/akebono_te.for +0 -0
  85. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ap.dat +0 -0
  86. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ccir11.asc +0 -0
  87. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ccir12.asc +0 -0
  88. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ccir13.asc +0 -0
  89. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ccir14.asc +0 -0
  90. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ccir15.asc +0 -0
  91. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ccir16.asc +0 -0
  92. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ccir17.asc +0 -0
  93. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ccir18.asc +0 -0
  94. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ccir19.asc +0 -0
  95. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ccir20.asc +0 -0
  96. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ccir21.asc +0 -0
  97. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ccir22.asc +0 -0
  98. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/cira.for +0 -0
  99. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/dgrf00.dat +0 -0
  100. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/dgrf45.dat +0 -0
  101. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/dgrf50.dat +0 -0
  102. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/dgrf55.dat +0 -0
  103. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/dgrf60.dat +0 -0
  104. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/dgrf65.dat +0 -0
  105. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/dgrf70.dat +0 -0
  106. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/dgrf75.dat +0 -0
  107. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/dgrf80.dat +0 -0
  108. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/dgrf85.dat +0 -0
  109. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/dgrf90.dat +0 -0
  110. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/dgrf95.dat +0 -0
  111. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ig_rz.dat +0 -0
  112. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/igrf.for +0 -0
  113. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/igrf05.dat +0 -0
  114. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/igrf05s.dat +0 -0
  115. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/iridreg.for +0 -0
  116. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/irifun.for +0 -0
  117. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/irisub.for +0 -0
  118. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/iritec.for +0 -0
  119. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/makefile +0 -0
  120. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/test/iritest.for +0 -0
  121. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ursi11.asc +0 -0
  122. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ursi12.asc +0 -0
  123. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ursi13.asc +0 -0
  124. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ursi14.asc +0 -0
  125. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ursi15.asc +0 -0
  126. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ursi16.asc +0 -0
  127. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ursi17.asc +0 -0
  128. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ursi18.asc +0 -0
  129. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ursi19.asc +0 -0
  130. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ursi20.asc +0 -0
  131. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ursi21.asc +0 -0
  132. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/iri/ursi22.asc +0 -0
  133. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/libgcpm.h +0 -0
  134. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/makefile +0 -0
  135. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/Cart_to_pol.for +0 -0
  136. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GEI_TO_GSM.FOR +0 -0
  137. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GEI_TO_MAG.FOR +0 -0
  138. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GEI_TO_SM.FOR +0 -0
  139. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GEO_TO_GEI.FOR +0 -0
  140. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GEO_TO_GSE.FOR +0 -0
  141. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GEO_TO_GSM.FOR +0 -0
  142. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GEO_TO_MAG.FOR +0 -0
  143. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GEO_TO_SM.FOR +0 -0
  144. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GSE_TO_GEI.FOR +0 -0
  145. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GSE_TO_GEO.FOR +0 -0
  146. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GSE_TO_GSM.FOR +0 -0
  147. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GSE_TO_MAG.FOR +0 -0
  148. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GSE_TO_SM.FOR +0 -0
  149. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GSM_TO_GEI.FOR +0 -0
  150. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GSM_TO_GEO.FOR +0 -0
  151. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GSM_TO_GSE.FOR +0 -0
  152. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GSM_TO_MAG.FOR +0 -0
  153. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/GSM_TO_SM.FOR +0 -0
  154. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/Gei_TO_gse.for +0 -0
  155. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/Gei_to_geo.for +0 -0
  156. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/Get_q_c.for +0 -0
  157. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/MAG_TO_GEI.FOR +0 -0
  158. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/MAG_TO_GEO.FOR +0 -0
  159. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/MAG_TO_GSE.FOR +0 -0
  160. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/MAG_TO_GSM.FOR +0 -0
  161. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/MAG_TO_SM.FOR +0 -0
  162. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/POL_TO_CART.FOR +0 -0
  163. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/Rotate_x.for +0 -0
  164. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/Rotate_y.for +0 -0
  165. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/Rotate_z.for +0 -0
  166. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/SM_TO_GEI.FOR +0 -0
  167. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/SM_TO_GEO.FOR +0 -0
  168. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/SM_TO_GSE.FOR +0 -0
  169. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/SM_TO_GSM.FOR +0 -0
  170. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/SM_TO_MAG.FOR +0 -0
  171. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/T0.for +0 -0
  172. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/T1.for +0 -0
  173. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/T2.for +0 -0
  174. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/T3.for +0 -0
  175. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/T4.for +0 -0
  176. {PyGCPM-0.1.0 → pygcpm-0.2.0}/PyGCPM/__data/libgcpm/xform/T5.for +0 -0
  177. {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/' }}
@@ -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
1
+ Metadata-Version: 2.4
2
2
  Name: PyGCPM
3
- Version: 0.1.0
3
+ Version: 0.2.0
4
4
  Summary: Python wrapper for the Global Core Plasma Model
5
- Home-page: https://github.com/mattkjames7/PyGCPM
6
- Author: Matthew Knight James
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
- Classifier: License :: OSI Approved :: GNU General Public License (GPL)
12
- Classifier: Operating System :: POSIX
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 setup.py install --user
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 = os.path.dirname(__file__)+"/__data/libgcpm/"
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
- #let's try and import the module
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);
@@ -1,4 +1,4 @@
1
- __version__ = "0.1.0"
1
+ __version__ = "0.2.0"
2
2
 
3
3
  from . import _CFunctions
4
4
  from .GCPM import GCPM