pmagpy-cli 4.3.13__tar.gz → 4.6.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 (365) hide show
  1. pmagpy_cli-4.6.0/PKG-INFO +111 -0
  2. pmagpy_cli-4.6.0/README.md +87 -0
  3. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/SPD/lib/leastsq_jacobian.py +1 -3
  4. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/SPD/lib/lib_IZZI_MD.py +0 -1
  5. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/SPD/lib/lib_arai_plot_statistics.py +0 -2
  6. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/SPD/lib/lib_curvature.py +0 -3
  7. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/SPD/lib/lib_directional_statistics.py +1 -2
  8. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/SPD/lib/lib_leastsquares.py +1 -2
  9. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/SPD/lib/lib_tail_check_statistics.py +1 -1
  10. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/SPD/lib/new_lib_curvature.py +0 -1
  11. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/SPD/new_lj_thellier_gui_spd.py +17 -26
  12. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/SPD/spd.py +1 -7
  13. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/command_line_setup.py +5 -5
  14. pmagpy_cli-4.6.0/dialogs/__init__.py +34 -0
  15. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/dialogs/demag_dialogs.py +9 -8
  16. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/dialogs/demag_interpretation_editor.py +10 -4
  17. pmagpy_cli-4.6.0/dialogs/gui_theme.py +256 -0
  18. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/dialogs/magic_grid3.py +3 -3
  19. pmagpy_cli-4.6.0/dialogs/plot_export.py +17 -0
  20. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/dialogs/pmag_gui_dialogs.py +7 -7
  21. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/dialogs/pmag_gui_menu3.py +20 -16
  22. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/dialogs/pmag_menu_dialogs.py +40 -27
  23. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/dialogs/pmag_widgets.py +5 -8
  24. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/dialogs/thellier_consistency_test.py +5 -5
  25. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/dialogs/thellier_gui_dialogs.py +6 -8
  26. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/dialogs/thellier_gui_lib.py +39 -0
  27. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/dialogs/thellier_interpreter.py +2 -2
  28. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/help_files/demag_gui_help.py +7 -1
  29. pmagpy_cli-4.3.13/pmagpy/data_model/controlled_vocabularies_December_10_2018.json → pmagpy_cli-4.6.0/pmagpy/data_model/controlled_vocabularies.json +760 -101
  30. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/pmagpy/data_model/data_model.json +1608 -944
  31. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/pmagpy/data_model/method_codes.json +396 -161
  32. pmagpy_cli-4.3.13/pmagpy/data_model/suggested_vocabularies_December_10_2018.json → pmagpy_cli-4.6.0/pmagpy/data_model/suggested_vocabularies.json +20 -3
  33. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/pmagpy/mapping/map_magic.py +1 -1
  34. pmagpy_cli-4.6.0/pmagpy/test/test_aarm_magic_cli.py +112 -0
  35. pmagpy_cli-4.6.0/pmagpy/test/test_ani_depthplot_cli.py +66 -0
  36. pmagpy_cli-4.6.0/pmagpy/test/test_ani_depthplot_dialog.py +49 -0
  37. pmagpy_cli-4.6.0/pmagpy/test/test_aniso_coordinate_rotation.py +71 -0
  38. pmagpy_cli-4.6.0/pmagpy/test/test_aniso_measurements.py +169 -0
  39. pmagpy_cli-4.6.0/pmagpy/test/test_contribution_builder_propagation.py +150 -0
  40. pmagpy_cli-4.6.0/pmagpy/test/test_convert_cit.py +168 -0
  41. pmagpy_cli-4.6.0/pmagpy/test/test_convert_rs3.py +391 -0
  42. pmagpy_cli-4.6.0/pmagpy/test/test_convert_tdt.py +143 -0
  43. pmagpy_cli-4.6.0/pmagpy/test/test_convert_vftb.py +155 -0
  44. pmagpy_cli-4.6.0/pmagpy/test/test_curie_cli.py +129 -0
  45. pmagpy_cli-4.6.0/pmagpy/test/test_fit_types.py +32 -0
  46. pmagpy_cli-4.6.0/pmagpy/test/test_forc.py +1665 -0
  47. pmagpy_cli-4.6.0/pmagpy/test/test_gui_plot_export.py +61 -0
  48. pmagpy_cli-4.6.0/pmagpy/test/test_gui_theme.py +155 -0
  49. pmagpy_cli-4.6.0/pmagpy/test/test_inclination_only.py +133 -0
  50. pmagpy_cli-4.6.0/pmagpy/test/test_ipmag_ani_depthplot.py +142 -0
  51. pmagpy_cli-4.6.0/pmagpy/test/test_ipmag_aniso_magic.py +280 -0
  52. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/pmagpy/test/test_ipmag_common_mean.py +39 -1
  53. pmagpy_cli-4.6.0/pmagpy/test/test_ipmag_compilation_kent.py +174 -0
  54. pmagpy_cli-4.6.0/pmagpy/test/test_ipmag_dmag_magic.py +115 -0
  55. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/pmagpy/test/test_ipmag_ei.py +52 -0
  56. pmagpy_cli-4.6.0/pmagpy/test/test_ipmag_load_magic_contribution.py +191 -0
  57. pmagpy_cli-4.6.0/pmagpy/test/test_ipmag_plotting.py +545 -0
  58. pmagpy_cli-4.6.0/pmagpy/test/test_ipmag_upload.py +88 -0
  59. pmagpy_cli-4.6.0/pmagpy/test/test_ipmag_zeq.py +96 -0
  60. pmagpy_cli-4.6.0/pmagpy/test/test_magic_validation.py +361 -0
  61. pmagpy_cli-4.6.0/pmagpy/test/test_packaging.py +25 -0
  62. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/pmagpy/test/test_pmag_directions.py +134 -0
  63. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/pmagpy/test/test_pmag_domean.py +116 -1
  64. pmagpy_cli-4.6.0/pmagpy/test/test_pmag_field_models.py +186 -0
  65. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/pmagpy/test/test_pmag_io.py +19 -0
  66. pmagpy_cli-4.6.0/pmagpy/test/test_pmag_pintpars.py +50 -0
  67. pmagpy_cli-4.6.0/pmagpy/test/test_pmag_pintpars_range.py +51 -0
  68. pmagpy_cli-4.6.0/pmagpy/test/test_pmag_sun_compass.py +195 -0
  69. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/pmagpy/test/test_pmag_transforms.py +152 -1
  70. pmagpy_cli-4.6.0/pmagpy/test/test_pmagplotlib_backend.py +70 -0
  71. pmagpy_cli-4.6.0/pmagpy/test/test_pmagplotlib_zij.py +283 -0
  72. pmagpy_cli-4.6.0/pmagpy/test/test_programs_backend.py +307 -0
  73. pmagpy_cli-4.6.0/pmagpy/test/test_programs_output_file.py +51 -0
  74. pmagpy_cli-4.6.0/pmagpy/test/test_retired_dm2_cli.py +23 -0
  75. pmagpy_cli-4.6.0/pmagpy/test/test_rockmag_curie.py +1182 -0
  76. pmagpy_cli-4.6.0/pmagpy/test/test_rockmag_hysteresis.py +2505 -0
  77. pmagpy_cli-4.6.0/pmagpy/test/test_rockmag_unmixing.py +1605 -0
  78. pmagpy_cli-4.6.0/pmagpy/test/test_svei.py +317 -0
  79. pmagpy_cli-4.6.0/pmagpy/test/test_thellier_cooling_rate.py +138 -0
  80. pmagpy_cli-4.6.0/pmagpy/test/test_thellier_gui_layout.py +49 -0
  81. pmagpy_cli-4.6.0/pmagpy_cli.egg-info/PKG-INFO +111 -0
  82. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/pmagpy_cli.egg-info/SOURCES.txt +43 -28
  83. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/pmagpy_cli.egg-info/entry_points.txt +0 -4
  84. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/pmagpy_cli.egg-info/requires.txt +1 -3
  85. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/pmagpy_cli.egg-info/top_level.txt +0 -1
  86. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/__init__.py +5 -10
  87. pmagpy_cli-4.6.0/programs/aarm_magic.py +84 -0
  88. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/angle.py +3 -4
  89. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/ani_depthplot.py +21 -22
  90. pmagpy_cli-4.6.0/programs/aniso_magic.py +124 -0
  91. pmagpy_cli-4.6.0/programs/aniso_magic2.py +19 -0
  92. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/apwp.py +2 -3
  93. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/azdip_magic.py +2 -3
  94. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/b_vdm.py +1 -2
  95. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/bootams.py +1 -3
  96. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/cart_dir.py +3 -3
  97. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/chartmaker.py +2 -4
  98. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/chi_magic.py +2 -3
  99. pmagpy_cli-4.6.0/programs/chi_magic2.py +19 -0
  100. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/common_mean.py +5 -6
  101. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts/cit_magic.py +5 -0
  102. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts/livdb_magic.py +4 -3
  103. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts/sufar4_asc_magic.py +1 -1
  104. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts/tdt_magic.py +4 -3
  105. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts2/_2g_bin_magic2.py +3 -4
  106. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts2/bgc_magic2.py +1 -1
  107. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts2/cit_magic2.py +1 -4
  108. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts2/generic_magic2.py +16 -17
  109. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts2/huji_magic2.py +2 -2
  110. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts2/huji_magic_new2.py +2 -2
  111. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts2/iodp_dscr_magic2.py +1 -2
  112. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts2/iodp_jr6_magic2.py +2 -2
  113. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts2/iodp_srm_magic2.py +1 -2
  114. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts2/jr6_jr6_magic2.py +2 -3
  115. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts2/jr6_txt_magic2.py +1 -1
  116. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts2/ldeo_magic2.py +2 -2
  117. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts2/pmd_magic2.py +1 -1
  118. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts2/sio_magic2.py +2 -3
  119. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts2/tdt_magic2.py +1 -5
  120. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts2/utrecht_magic2.py +1 -3
  121. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/core_depthplot.py +8 -8
  122. pmagpy_cli-4.6.0/programs/curie.py +140 -0
  123. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/dayplot_magic.py +2 -3
  124. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/demag_gui.py +283 -100
  125. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/di_eq.py +2 -2
  126. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/di_geo.py +2 -3
  127. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/di_rot.py +5 -6
  128. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/di_tilt.py +3 -4
  129. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/di_vgp.py +2 -2
  130. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/dia_vgp.py +1 -3
  131. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/dipole_pinc.py +1 -1
  132. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/dipole_plat.py +2 -2
  133. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/dir_cart.py +3 -3
  134. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/dmag_magic.py +6 -5
  135. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/eigs_s.py +2 -3
  136. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/eq_di.py +1 -1
  137. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/eqarea.py +2 -3
  138. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/eqarea_ell.py +2 -4
  139. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/eqarea_magic.py +2 -3
  140. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/find_ei.py +3 -4
  141. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/fisher.py +1 -2
  142. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/fishqq.py +3 -4
  143. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/fishrot.py +1 -2
  144. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/foldtest.py +2 -4
  145. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/foldtest_magic.py +2 -4
  146. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/forc_diagram.py +7 -12
  147. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/gaussian.py +1 -1
  148. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/gobing.py +1 -1
  149. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/gofish.py +2 -2
  150. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/gokent.py +2 -2
  151. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/goprinc.py +2 -2
  152. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/histplot.py +3 -4
  153. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/hysteresis_magic.py +2 -3
  154. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/igrf.py +6 -8
  155. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/incfish.py +3 -3
  156. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/irmaq_magic.py +2 -3
  157. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/k15_s.py +1 -2
  158. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/lnp_magic.py +2 -3
  159. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/lowes.py +1 -4
  160. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/lowrie.py +3 -5
  161. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/lowrie_magic.py +2 -3
  162. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/lsq_redo.py +1 -1
  163. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/magic_gui.py +4 -5
  164. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/make_magic_plots.py +1 -1
  165. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/microwave_magic.py +2 -2
  166. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/plot_2cdfs.py +1 -3
  167. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/plot_cdf.py +3 -4
  168. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/plot_geomagia.py +0 -5
  169. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/plot_magmap.py +5 -6
  170. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/plot_map_pts.py +3 -5
  171. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/plotdi_a.py +2 -3
  172. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/plotdi_e.py +2 -3
  173. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/plotxy.py +3 -5
  174. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/pmag_gui.py +28 -29
  175. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/polemap_magic.py +2 -3
  176. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/program_envs.py +4 -0
  177. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/pt_rot.py +2 -3
  178. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/qqplot.py +3 -4
  179. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/qqunf.py +1 -3
  180. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/quick_hyst.py +1 -3
  181. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/remanence_anisotropy_magic.py +4 -10
  182. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/revtest.py +3 -4
  183. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/revtest_magic.py +2 -3
  184. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/revtest_mm1990.py +1 -4
  185. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/s_eigs.py +2 -4
  186. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/s_geo.py +2 -4
  187. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/s_hext.py +1 -2
  188. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/s_tilt.py +2 -3
  189. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/scalc.py +3 -6
  190. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/site_edit_magic.py +1 -4
  191. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/squish.py +1 -1
  192. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/stats.py +3 -3
  193. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/strip_magic.py +2 -3
  194. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/sundec.py +2 -2
  195. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/thellier_gui.py +196 -156
  196. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/thellier_magic.py +2 -4
  197. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/tk03.py +1 -1
  198. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/unsquish.py +1 -1
  199. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/upload_magic.py +9 -6
  200. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/vdm_b.py +2 -2
  201. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/vector_mean.py +2 -2
  202. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/vgp_di.py +1 -1
  203. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/vgpmap_magic.py +2 -3
  204. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/watsons_v.py +3 -5
  205. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/zeq.py +3 -4
  206. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/zeq_magic.py +2 -4
  207. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/setup.py +5 -2
  208. pmagpy_cli-4.3.13/PKG-INFO +0 -187
  209. pmagpy_cli-4.3.13/README.md +0 -89
  210. pmagpy_cli-4.3.13/dialogs/__init__.py +0 -18
  211. pmagpy_cli-4.3.13/locator/resource.py +0 -0
  212. pmagpy_cli-4.3.13/pmagpy/data_model/MagIC-data-model.txt +0 -1207
  213. pmagpy_cli-4.3.13/pmagpy/data_model/age_methods.txt +0 -1
  214. pmagpy_cli-4.3.13/pmagpy/data_model/all_codes.txt +0 -1
  215. pmagpy_cli-4.3.13/pmagpy/data_model/code_types.txt +0 -1
  216. pmagpy_cli-4.3.13/pmagpy/data_model/controlled_vocabularies2.json +0 -1
  217. pmagpy_cli-4.3.13/pmagpy/data_model/controlled_vocabularies_August_9_2018.json +0 -7808
  218. pmagpy_cli-4.3.13/pmagpy/data_model/controlled_vocabularies_February_6_2017.json +0 -7685
  219. pmagpy_cli-4.3.13/pmagpy/data_model/controlled_vocabularies_October_3_2019.json +0 -19002
  220. pmagpy_cli-4.3.13/pmagpy/data_model/er_methods.txt +0 -1
  221. pmagpy_cli-4.3.13/pmagpy/data_model/pmag_methods.txt +0 -1
  222. pmagpy_cli-4.3.13/pmagpy/data_model/suggested_vocabularies_August_9_2018.json +0 -7173
  223. pmagpy_cli-4.3.13/pmagpy/data_model/suggested_vocabularies_February_6_2017.json +0 -7147
  224. pmagpy_cli-4.3.13/pmagpy/test/test_ipmag_plotting.py +0 -270
  225. pmagpy_cli-4.3.13/pmagpy/test/test_pmag_field_models.py +0 -89
  226. pmagpy_cli-4.3.13/pmagpy_cli.egg-info/PKG-INFO +0 -187
  227. pmagpy_cli-4.3.13/pmagpy_tests/examples/my_project_with_errors/__init__.py +0 -0
  228. pmagpy_cli-4.3.13/programs/aarm_magic.py +0 -79
  229. pmagpy_cli-4.3.13/programs/agm_magic2.py +0 -252
  230. pmagpy_cli-4.3.13/programs/ani_depthplot2.py +0 -121
  231. pmagpy_cli-4.3.13/programs/aniso_magic.py +0 -192
  232. pmagpy_cli-4.3.13/programs/aniso_magic2.py +0 -584
  233. pmagpy_cli-4.3.13/programs/chi_magic2.py +0 -251
  234. pmagpy_cli-4.3.13/programs/curie.py +0 -283
  235. pmagpy_cli-4.3.13/programs/dayplot_magic2.py +0 -146
  236. pmagpy_cli-4.3.13/programs/dmag_magic2.py +0 -168
  237. pmagpy_cli-4.3.13/programs/eqarea_magic2.py +0 -441
  238. pmagpy_cli-4.3.13/programs/foldtest_magic2.py +0 -204
  239. pmagpy_cli-4.3.13/programs/hysteresis_magic2.py +0 -336
  240. pmagpy_cli-4.3.13/programs/irm_unmix.py +0 -606
  241. pmagpy_cli-4.3.13/programs/quick_hyst2.py +0 -251
  242. pmagpy_cli-4.3.13/programs/thellier_magic2.py +0 -729
  243. pmagpy_cli-4.3.13/programs/vgpmap_magic2.py +0 -255
  244. pmagpy_cli-4.3.13/programs/zeq_magic2.py +0 -731
  245. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/MANIFEST.in +0 -0
  246. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/SPD/__init__.py +0 -0
  247. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/SPD/lib/__init__.py +0 -0
  248. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/SPD/lib/lib_additivity_check_statistics.py +0 -0
  249. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/SPD/lib/lib_ptrm_statistics.py +0 -0
  250. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/SPD/run_tests.py +0 -0
  251. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/SPD/test_instance.py +0 -0
  252. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/SPD/tests/__init__.py +0 -0
  253. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/SPD/tests/known_values.py +0 -0
  254. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/SPD/tests/test_additivity_check_statistics.py +0 -0
  255. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/SPD/tests/test_all.py +0 -0
  256. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/SPD/tests/test_arai_plot_statistics.py +0 -0
  257. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/SPD/tests/test_curvature.py +0 -0
  258. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/SPD/tests/test_directional_statistics.py +0 -0
  259. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/SPD/tests/test_ptrm_statistics.py +0 -0
  260. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/SPD/tests/test_tail_check_statistics.py +0 -0
  261. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/bin/ani_depthplot_anaconda +0 -0
  262. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/bin/core_depthplot_anaconda +0 -0
  263. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/bin/demag_gui_anaconda +0 -0
  264. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/bin/magic_gui2_anaconda +0 -0
  265. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/bin/magic_gui_anaconda +0 -0
  266. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/bin/pmag_gui_anaconda +0 -0
  267. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/bin/thellier_gui_anaconda +0 -0
  268. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/dialogs/ErMagicBuilder.py +0 -0
  269. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/dialogs/drop_down_menus3.py +0 -0
  270. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/dialogs/grid_frame3.py +0 -0
  271. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/dialogs/help_files/ErMagicAgeHelp.html +0 -0
  272. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/dialogs/help_files/ErMagicBuilderHelp.html +0 -0
  273. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/dialogs/help_files/ErMagicHeadersHelp.html +0 -0
  274. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/dialogs/help_files/ErMagicLocationHelp.html +0 -0
  275. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/dialogs/help_files/ErMagicSampleHelp.html +0 -0
  276. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/dialogs/help_files/ErMagicSampleHelp1.html +0 -0
  277. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/dialogs/help_files/ErMagicSiteHelp.html +0 -0
  278. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/dialogs/help_files/ErMagicSpecimenHelp.html +0 -0
  279. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/dialogs/help_files/magic_gui.html +0 -0
  280. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/dialogs/magic_grid2.py +0 -0
  281. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/dialogs/pmag_er_magic_dialogs.py +0 -0
  282. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/help_files/__init__.py +0 -0
  283. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/help_files/demag_interpretation_editor_help.py +0 -0
  284. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/pmagpy/field_models/igrf14coeffs.txt +0 -0
  285. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/pmagpy/mapping/__init__.py +0 -0
  286. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/pmagpy/mapping/maps.py +0 -0
  287. {pmagpy_cli-4.3.13/locator → pmagpy_cli-4.6.0/pmagpy/test}/__init__.py +0 -0
  288. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/pmagpy/test/conftest.py +0 -0
  289. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/pmagpy/test/test_igrf.py +0 -0
  290. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/pmagpy/test/test_ipmag_correlation.py +0 -0
  291. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/pmagpy/test/test_ipmag_data_handling.py +0 -0
  292. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/pmagpy/test/test_ipmag_field_tests.py +0 -0
  293. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/pmagpy/test/test_ipmag_random.py +0 -0
  294. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/pmagpy/test/test_ipmag_statistics.py +0 -0
  295. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/pmagpy/test/test_ipmag_vgp.py +0 -0
  296. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/pmagpy/test/test_pmag_anisotropy.py +0 -0
  297. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/pmagpy/test/test_pmag_data_handling.py +0 -0
  298. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/pmagpy/test/test_pmag_kent_bingham.py +0 -0
  299. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/pmagpy/test/test_pmag_projection.py +0 -0
  300. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/pmagpy/test/test_pmag_random.py +0 -0
  301. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/pmagpy/test/test_pmag_statistics.py +0 -0
  302. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/pmagpy/test/test_pmag_utilities.py +0 -0
  303. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/pmagpy/test/test_pmag_vgp.py +0 -0
  304. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/pmagpy/test/test_rotations.py +0 -0
  305. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/pmagpy_cli.egg-info/dependency_links.txt +0 -0
  306. {pmagpy_cli-4.3.13/pmagpy/test → pmagpy_cli-4.6.0/pmagpy_tests/examples}/__init__.py +0 -0
  307. {pmagpy_cli-4.3.13/pmagpy_tests/examples → pmagpy_cli-4.6.0/pmagpy_tests/examples/empty_dir}/__init__.py +0 -0
  308. {pmagpy_cli-4.3.13/pmagpy_tests/examples/empty_dir → pmagpy_cli-4.6.0/pmagpy_tests/examples/my_project}/__init__.py +0 -0
  309. {pmagpy_cli-4.3.13/pmagpy_tests/examples/my_project → pmagpy_cli-4.6.0/pmagpy_tests/examples/my_project_with_errors}/__init__.py +0 -0
  310. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/pmagpy_tests/examples/my_project_with_errors/something.py +0 -0
  311. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/atrm_magic.py +0 -0
  312. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/combine_magic.py +0 -0
  313. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts/_2g_bin_magic.py +0 -0
  314. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts/__init__.py +0 -0
  315. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts/agm_magic.py +0 -0
  316. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts/bgc_magic.py +0 -0
  317. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts/generic_magic.py +0 -0
  318. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts/huji_magic.py +0 -0
  319. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts/huji_sample_magic.py +0 -0
  320. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts/iodp_dscr_magic.py +0 -0
  321. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts/iodp_jr6_magic.py +0 -0
  322. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts/iodp_samples_magic.py +0 -0
  323. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts/iodp_srm_magic.py +0 -0
  324. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts/irm_magic.py +0 -0
  325. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts/jr6_jr6_magic.py +0 -0
  326. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts/jr6_txt_magic.py +0 -0
  327. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts/k15_magic.py +0 -0
  328. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts/kly4s_magic.py +0 -0
  329. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts/ldeo_magic.py +0 -0
  330. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts/magic_geomagia.py +0 -0
  331. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts/mst_magic.py +0 -0
  332. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts/pmd_magic.py +0 -0
  333. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts/run_multi_samples.py +0 -0
  334. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts/s_magic.py +0 -0
  335. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts/sio_magic.py +0 -0
  336. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts/squidm_magic.py +0 -0
  337. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts/template_magic.py +0 -0
  338. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts/utrecht_magic.py +0 -0
  339. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts/xpeem_magic.py +0 -0
  340. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/conversion_scripts2/__init__.py +0 -0
  341. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/convert2unix.py +0 -0
  342. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/dir_redo.py +0 -0
  343. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/download_magic.py +0 -0
  344. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/grab_magic_key.py +0 -0
  345. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/images/PmagPy.ico +0 -0
  346. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/images/PmagPy_16x16.ico +0 -0
  347. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/images/PmagPy_32x32.ico +0 -0
  348. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/images/pmagpy_logo.ico +0 -0
  349. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/magic_select.py +0 -0
  350. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/mk_redo.py +0 -0
  351. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/move_data_files.py +0 -0
  352. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/mst_magic.py +0 -0
  353. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/orientation_magic.py +0 -0
  354. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/pca.py +0 -0
  355. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/pmag_results_extract.py +0 -0
  356. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/pmm_redo.py +0 -0
  357. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/remove_bad_chars.py +0 -0
  358. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/replace_ac_specimens.py +0 -0
  359. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/scalc_magic.py +0 -0
  360. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/sort_specimens.py +0 -0
  361. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/thumbnails.py +0 -0
  362. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/trmaq_magic.py +0 -0
  363. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/uniform.py +0 -0
  364. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/programs/watsons_f.py +0 -0
  365. {pmagpy_cli-4.3.13 → pmagpy_cli-4.6.0}/setup.cfg +0 -0
@@ -0,0 +1,111 @@
1
+ Metadata-Version: 2.4
2
+ Name: pmagpy-cli
3
+ Version: 4.6.0
4
+ Summary: Analysis tools for paleo/rock magnetic data
5
+ Home-page: https://github.com/PmagPy/PmagPy
6
+ Author: PmagPy team
7
+ Author-email: ltauxe@ucsd.edu
8
+ License: BSD-3-Clause
9
+ Keywords: geology paleomagnetism
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: License :: OSI Approved :: BSD License
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3.9
14
+ Classifier: Programming Language :: Python :: 3.10
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Requires-Python: >=3.9
19
+ Description-Content-Type: text/markdown
20
+ Requires-Dist: pmagpy==4.6.0
21
+ Requires-Dist: wxPython
22
+ Requires-Dist: pillow
23
+ Requires-Dist: appdirs
24
+ Provides-Extra: maps
25
+ Requires-Dist: pmagpy[maps]; extra == "maps"
26
+ Dynamic: author
27
+ Dynamic: author-email
28
+ Dynamic: classifier
29
+ Dynamic: description
30
+ Dynamic: description-content-type
31
+ Dynamic: home-page
32
+ Dynamic: keywords
33
+ Dynamic: license
34
+ Dynamic: provides-extra
35
+ Dynamic: requires-dist
36
+ Dynamic: requires-python
37
+ Dynamic: summary
38
+
39
+
40
+ **PmagPy** is a comprehensive set of tools for analyzing paleomagnetic data. It facilitates interpretation of demagnetization data, Thellier-type experimental data and data from other types of rock magnetic experiments. PmagPy can be used to create a wide variety of useful plots and conduct statistical tests. It is designed to work with the MagIC database (https://earthref.org/MagIC), allowing manipulation of downloaded data sets as well as preparation of new contributions for uploading to the MagIC database. Functions within PmagPy can be imported and used in Jupyter notebooks enabling fully documented and nicely illustrated data analysis.
41
+
42
+ ## Citing PmagPy
43
+
44
+ Users of PmagPy should cite the open access article:
45
+
46
+ Tauxe, L., R. Shaar, L. Jonestrask, N. L. Swanson-Hysell, R. Minnett, A. A. P. Koppers, C. G. Constable, N. Jarboe, K. Gaastra, and L. Fairchild (2016), PmagPy: Software package for paleomagnetic data analysis and a bridge to the Magnetics Information Consortium (MagIC) Database, Geochem. Geophys. Geosyst., 17, https://doi.org/10.1002/2016GC006307.
47
+
48
+ ## Main features
49
+
50
+ PmagPy is comprised of:
51
+ - GUI programs for getting data into MagIC database format (pmag\_gui), analyzing demagnetization data (demag\_gui) and analyzing paleointensity data (thellier\_gui). These GUIs are available as part of the python package pmagpy-cli. Alternatively, these GUIs are available for download as standalone applications for [macOS](https://github.com/PmagPy/PmagPy-Standalone-OSX/releases/latest) and [Windows](https://github.com/PmagPy/PmagPy-Standalone-Windows/releases/latest).
52
+ - Command line programs for all sorts of paleomagnetic data analysis and wrangling (contained within the programs folder of the repository and pip installed as pmagpy-cli).
53
+ - The pmagpy function modules for paleomagnetic data analysis (pmagpy.pmag) and plotting (pmagpy.pmagplotlib) as well as a function module that further enables paleomagnetic data analysis within interactive computing environments such as the Jupyter notebook (pmagpy.ipmag). The functions within these modules are at the heart of the GUI and command line programs. With pmagpy installed ([described below](#how-to-get-it)), these modules can be imported (e.g. `from pmagpy import ipmag`).
54
+ - A rock magnetism module (pmagpy.rockmag) for processing and interpreting hysteresis, backfield, FORC, low-temperature, thermomagnetic, and anisotropy experiments, demonstrated in the [RockmagPy notebooks](https://pmagpy.github.io/RockmagPy-notebooks).
55
+ - Example data files that are used in the examples provided in the [PmagPy documentation notebooks](https://pmagpy.github.io/PmagPy-docs/documentation_notebooks/PmagPy_introduction.html)
56
+
57
+ Use of all these features is described in the [PmagPy documentation](https://pmagpy.github.io/PmagPy-docs/) and the underlying science behind the data and code can be explored in the book [Essentials of Paleomagnetism: Third Web Edition](http://earthref.org/MagIC/books/Tauxe/Essentials/). Example Jupyter notebooks using PmagPy can be found in this [repository](https://github.com/PmagPy/2016_Tauxe-et-al_PmagPy_Notebooks)
58
+
59
+ ## How to get it
60
+
61
+ Full instructions for installing and using PmagPy are in the [PmagPy documentation](https://pmagpy.github.io/PmagPy-docs/installation/PmagPy_install.html). You don't need a programming background to follow them. In brief:
62
+
63
+ | I want to... | Do this |
64
+ |---|---|
65
+ | Use Pmag GUI, Demag GUI, or Thellier GUI, and nothing else | Download the standalone application for [macOS](https://github.com/PmagPy/PmagPy-Standalone-OSX/releases/latest) or [Windows](https://github.com/PmagPy/PmagPy-Standalone-Windows/releases/latest) (no Python needed) |
66
+ | Try PmagPy without installing anything | Use the [EarthRef JupyterHub](https://pmagpy.github.io/PmagPy-docs/installation/PmagPy_install.html#using-pmagpy-online), or run `%pip install pmagpy` in a Google Colab notebook |
67
+ | Use PmagPy in Jupyter notebooks, run the command-line programs, or run the GUIs on Linux | [Install PmagPy on your computer](https://pmagpy.github.io/PmagPy-docs/installation/pip_install.html) with conda and pip |
68
+ | Contribute to PmagPy, or use changes before they are released | Do a [developer install](https://pmagpy.github.io/PmagPy-docs/installation/developer_install.html) |
69
+
70
+ ### Install on your computer
71
+
72
+ The recommended approach uses [Miniforge](https://github.com/conda-forge/miniforge) to create a conda environment with the scientific Python packages, and then pip to install PmagPy. With Miniforge installed, run these commands in a terminal (on Windows, in Miniforge Prompt):
73
+
74
+ ```
75
+ conda create -n pmagpy -c conda-forge python=3.12 numpy scipy matplotlib pandas cartopy shapely wxpython pyqt jupyterlab pip
76
+ conda activate pmagpy
77
+ pip install --upgrade pmagpy pmagpy-cli
78
+ ```
79
+
80
+ `pmagpy` contains the function modules used in Jupyter notebooks and your own code; `pmagpy-cli` adds the command-line programs and the GUIs. To update later, activate the environment and rerun the last command. The [installation guide](https://pmagpy.github.io/PmagPy-docs/installation/pip_install.html) explains each step, and the [troubleshooting page](https://pmagpy.github.io/PmagPy-docs/installation/troubleshooting.html) covers common problems.
81
+
82
+ ### Developer install
83
+
84
+ To work from the source code (the master branch or your own fork) rather than a release, clone the repository, create an environment from its `environment.yml`, and install it in editable mode:
85
+
86
+ ```
87
+ git clone https://github.com/PmagPy/PmagPy.git
88
+ cd PmagPy
89
+ conda env create -f environment.yml -n pmagpy-dev
90
+ conda activate pmagpy-dev
91
+ pip install -e ".[maps]"
92
+ ```
93
+
94
+ Edits to the code, and `git pull`, take effect immediately without reinstalling. The command-line programs and GUIs can be run from the `programs` directory (for example, `python pmag_gui.py`), or installed from the released `pmagpy-cli` package alongside the editable library. Full details are in the [developer install instructions](https://pmagpy.github.io/PmagPy-docs/installation/developer_install.html).
95
+
96
+
97
+ ## Background and support
98
+
99
+ The code base for the PmagPy project has been built up over many years by Lisa Tauxe (Professor Emerita at the Scripps Institution of Oceanography) supported by grants from the National Science Foundation. Substantial contributions to the project have been made by Nick Swanson-Hysell (Associate Professor at the University of Minnesota), Ron Shaar (Associate Professor at the Hebrew University of Jerusalem), Lori Jonestrask and Kevin Gaastra as well as others.
100
+
101
+ ## Contributing
102
+
103
+ If you want to get involved with the project - whether that means reporting a bug, requesting a feature, or adding significant code - please check out the project's [Contribution guidelines](https://github.com/PmagPy/PmagPy/blob/master/CONTRIBUTING.md).
104
+
105
+ ## More information
106
+
107
+ This code and the [PmagPy documentation](https://pmagpy.github.io/PmagPy-docs/) are companions to the the book Essentials of Paleomagnetism: Third Web Edition (http://earthref.org/MagIC/books/Tauxe/Essentials/) written by Lisa Tauxe with contributions from Subir K. Banerjee, Robert F. Butler and Rob van der Voo. The printed version of the book came out in January, 2010 from University of California Press (http://www.ucpress.edu/book.php?isbn=9780520260313).
108
+
109
+ ## Licensing
110
+
111
+ This code can be freely used, modified, and shared. It is licensed under a 3-clause BSD license. See [license.txt](https://github.com/PmagPy/PmagPy/blob/master/license.txt) for details.
@@ -0,0 +1,87 @@
1
+ # PmagPy: tools for paleomagnetic data analysis
2
+
3
+ <table>
4
+ <tr>
5
+ <td>Latest Release</td>
6
+ <td><img src="https://img.shields.io/pypi/v/pmagpy.svg" alt="latest release" /></td>
7
+ </tr>
8
+ <tr>
9
+ <td>License</td>
10
+ <td><img src="https://img.shields.io/pypi/l/pmagpy.svg" alt="license" /></td>
11
+ </tr>
12
+ </table>
13
+
14
+ ## What is it
15
+
16
+ **PmagPy** is a comprehensive set of tools for analyzing paleomagnetic data. It facilitates interpretation of demagnetization data, Thellier-type experimental data and data from other types of rock magnetic experiments. PmagPy can be used to create a wide variety of useful plots and conduct statistical tests. It is designed to work with the MagIC database (https://earthref.org/MagIC), allowing manipulation of downloaded data sets as well as preparation of new contributions for uploading to the MagIC database. Functions within PmagPy can be imported and used in Jupyter notebooks enabling fully documented and nicely illustrated data analysis.
17
+
18
+ ## Citing PmagPy
19
+
20
+ Users of PmagPy should cite the open access article:
21
+
22
+ Tauxe, L., R. Shaar, L. Jonestrask, N. L. Swanson-Hysell, R. Minnett, A. A. P. Koppers, C. G. Constable, N. Jarboe, K. Gaastra, and L. Fairchild (2016), PmagPy: Software package for paleomagnetic data analysis and a bridge to the Magnetics Information Consortium (MagIC) Database, Geochem. Geophys. Geosyst., 17, https://doi.org/10.1002/2016GC006307.
23
+
24
+ ## Main features
25
+
26
+ PmagPy is comprised of:
27
+ - GUI programs for getting data into MagIC database format (pmag\_gui), analyzing demagnetization data (demag\_gui) and analyzing paleointensity data (thellier\_gui). These GUIs are available as part of the python package pmagpy-cli. Alternatively, these GUIs are available for download as standalone applications for [macOS](https://github.com/PmagPy/PmagPy-Standalone-OSX/releases/latest) and [Windows](https://github.com/PmagPy/PmagPy-Standalone-Windows/releases/latest).
28
+ - Command line programs for all sorts of paleomagnetic data analysis and wrangling (contained within the programs folder of the repository and pip installed as pmagpy-cli).
29
+ - The pmagpy function modules for paleomagnetic data analysis (pmagpy.pmag) and plotting (pmagpy.pmagplotlib) as well as a function module that further enables paleomagnetic data analysis within interactive computing environments such as the Jupyter notebook (pmagpy.ipmag). The functions within these modules are at the heart of the GUI and command line programs. With pmagpy installed ([described below](#how-to-get-it)), these modules can be imported (e.g. `from pmagpy import ipmag`).
30
+ - A rock magnetism module (pmagpy.rockmag) for processing and interpreting hysteresis, backfield, FORC, low-temperature, thermomagnetic, and anisotropy experiments, demonstrated in the [RockmagPy notebooks](https://pmagpy.github.io/RockmagPy-notebooks).
31
+ - Example data files that are used in the examples provided in the [PmagPy documentation notebooks](https://pmagpy.github.io/PmagPy-docs/documentation_notebooks/PmagPy_introduction.html)
32
+
33
+ Use of all these features is described in the [PmagPy documentation](https://pmagpy.github.io/PmagPy-docs/) and the underlying science behind the data and code can be explored in the book [Essentials of Paleomagnetism: Third Web Edition](http://earthref.org/MagIC/books/Tauxe/Essentials/). Example Jupyter notebooks using PmagPy can be found in this [repository](https://github.com/PmagPy/2016_Tauxe-et-al_PmagPy_Notebooks)
34
+
35
+ ## How to get it
36
+
37
+ Full instructions for installing and using PmagPy are in the [PmagPy documentation](https://pmagpy.github.io/PmagPy-docs/installation/PmagPy_install.html). You don't need a programming background to follow them. In brief:
38
+
39
+ | I want to... | Do this |
40
+ |---|---|
41
+ | Use Pmag GUI, Demag GUI, or Thellier GUI, and nothing else | Download the standalone application for [macOS](https://github.com/PmagPy/PmagPy-Standalone-OSX/releases/latest) or [Windows](https://github.com/PmagPy/PmagPy-Standalone-Windows/releases/latest) (no Python needed) |
42
+ | Try PmagPy without installing anything | Use the [EarthRef JupyterHub](https://pmagpy.github.io/PmagPy-docs/installation/PmagPy_install.html#using-pmagpy-online), or run `%pip install pmagpy` in a Google Colab notebook |
43
+ | Use PmagPy in Jupyter notebooks, run the command-line programs, or run the GUIs on Linux | [Install PmagPy on your computer](https://pmagpy.github.io/PmagPy-docs/installation/pip_install.html) with conda and pip |
44
+ | Contribute to PmagPy, or use changes before they are released | Do a [developer install](https://pmagpy.github.io/PmagPy-docs/installation/developer_install.html) |
45
+
46
+ ### Install on your computer
47
+
48
+ The recommended approach uses [Miniforge](https://github.com/conda-forge/miniforge) to create a conda environment with the scientific Python packages, and then pip to install PmagPy. With Miniforge installed, run these commands in a terminal (on Windows, in Miniforge Prompt):
49
+
50
+ ```
51
+ conda create -n pmagpy -c conda-forge python=3.12 numpy scipy matplotlib pandas cartopy shapely wxpython pyqt jupyterlab pip
52
+ conda activate pmagpy
53
+ pip install --upgrade pmagpy pmagpy-cli
54
+ ```
55
+
56
+ `pmagpy` contains the function modules used in Jupyter notebooks and your own code; `pmagpy-cli` adds the command-line programs and the GUIs. To update later, activate the environment and rerun the last command. The [installation guide](https://pmagpy.github.io/PmagPy-docs/installation/pip_install.html) explains each step, and the [troubleshooting page](https://pmagpy.github.io/PmagPy-docs/installation/troubleshooting.html) covers common problems.
57
+
58
+ ### Developer install
59
+
60
+ To work from the source code (the master branch or your own fork) rather than a release, clone the repository, create an environment from its `environment.yml`, and install it in editable mode:
61
+
62
+ ```
63
+ git clone https://github.com/PmagPy/PmagPy.git
64
+ cd PmagPy
65
+ conda env create -f environment.yml -n pmagpy-dev
66
+ conda activate pmagpy-dev
67
+ pip install -e ".[maps]"
68
+ ```
69
+
70
+ Edits to the code, and `git pull`, take effect immediately without reinstalling. The command-line programs and GUIs can be run from the `programs` directory (for example, `python pmag_gui.py`), or installed from the released `pmagpy-cli` package alongside the editable library. Full details are in the [developer install instructions](https://pmagpy.github.io/PmagPy-docs/installation/developer_install.html).
71
+
72
+
73
+ ## Background and support
74
+
75
+ The code base for the PmagPy project has been built up over many years by Lisa Tauxe (Professor Emerita at the Scripps Institution of Oceanography) supported by grants from the National Science Foundation. Substantial contributions to the project have been made by Nick Swanson-Hysell (Associate Professor at the University of Minnesota), Ron Shaar (Associate Professor at the Hebrew University of Jerusalem), Lori Jonestrask and Kevin Gaastra as well as others.
76
+
77
+ ## Contributing
78
+
79
+ If you want to get involved with the project - whether that means reporting a bug, requesting a feature, or adding significant code - please check out the project's [Contribution guidelines](https://github.com/PmagPy/PmagPy/blob/master/CONTRIBUTING.md).
80
+
81
+ ## More information
82
+
83
+ This code and the [PmagPy documentation](https://pmagpy.github.io/PmagPy-docs/) are companions to the the book Essentials of Paleomagnetism: Third Web Edition (http://earthref.org/MagIC/books/Tauxe/Essentials/) written by Lisa Tauxe with contributions from Subir K. Banerjee, Robert F. Butler and Rob van der Voo. The printed version of the book came out in January, 2010 from University of California Press (http://www.ucpress.edu/book.php?isbn=9780520260313).
84
+
85
+ ## Licensing
86
+
87
+ This code can be freely used, modified, and shared. It is licensed under a 3-clause BSD license. See [license.txt](https://github.com/PmagPy/PmagPy/blob/master/license.txt) for details.
@@ -1,5 +1,3 @@
1
- from builtins import map
2
- from builtins import range
3
1
  import numpy
4
2
  from scipy import optimize
5
3
 
@@ -97,7 +95,7 @@ def do_circlefit(x, y):
97
95
  def get_SSE(a,b,r,x,y):
98
96
  """
99
97
  input: a, b, r, x, y. circle center, radius, xpts, ypts
100
- output: SSE
98
+ output: SSE (sum of squared errors)
101
99
  """
102
100
  SSE = 0
103
101
  X = numpy.array(x)
@@ -1,6 +1,5 @@
1
1
  #!/usr/bin/env python
2
2
 
3
- from builtins import range
4
3
  from numpy import *
5
4
 
6
5
 
@@ -1,7 +1,5 @@
1
1
  #! /usr/bin/env python
2
2
 
3
- #from scipy import *
4
- from builtins import range
5
3
  import numpy
6
4
 
7
5
 
@@ -1,8 +1,5 @@
1
1
  #!/usr/bin/env python
2
2
 
3
- from builtins import zip
4
- from builtins import map
5
- from builtins import range
6
3
  import numpy
7
4
  from numpy import *
8
5
 
@@ -1,6 +1,5 @@
1
1
  #! /usr/bin/env python
2
2
 
3
- from builtins import range
4
3
  import numpy
5
4
  import math
6
5
 
@@ -111,7 +110,7 @@ def cart2dir(cart):
111
110
  try:
112
111
  Decs=(numpy.arctan2(Ys,Xs) / rad)%360. # calculate declination taking care of correct quadrants (arctan2) and making modulo 360.
113
112
  Incs = numpy.arcsin(Zs / Rs) / rad # calculate inclination (converting to degrees) #
114
- except:
113
+ except Exception:
115
114
  print('trouble in cart2dir') # most likely division by zero somewhere
116
115
  return numpy.zeros(3)
117
116
  return numpy.array([Decs,Incs,Rs]).transpose() # return the directions list
@@ -1,8 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
 
3
- from builtins import map
4
3
  from numpy import *
5
- from scipy import optimize
4
+ from scipy import optimize
6
5
 
7
6
 
8
7
 
@@ -11,7 +11,7 @@ def get_n_tail(tmax, tail_temps):
11
11
  return 0
12
12
  try:
13
13
  t_index = list(tail_temps).index(tmax)
14
- except: # finds correct tmax if there was no tail check performed at tmax
14
+ except Exception: # finds correct tmax if there was no tail check performed at tmax
15
15
  for temp in tail_temps:
16
16
  if temp <= tmax:
17
17
  adj_tmax = temp
@@ -1,6 +1,5 @@
1
1
  #!/usr/bin/env python
2
2
 
3
- from builtins import range
4
3
  import numpy
5
4
  from . import lib_curvature as lib_k
6
5
 
@@ -1,14 +1,11 @@
1
1
  #============================================================================================
2
- from builtins import input
3
- from builtins import range
4
- from builtins import object
2
+
5
3
  global CURRENT_VRSION
6
4
  CURRENT_VRSION = "v.2.03"
7
- #import matplotlib
5
+
8
6
 
9
7
  import numpy
10
8
  import sys
11
- import os
12
9
  import math
13
10
  #import pylab,scipy
14
11
  ##try:
@@ -17,14 +14,8 @@ import math
17
14
  ## pass
18
15
  try:
19
16
  import thellier_gui_preferences
20
- except:
17
+ except Exception:
21
18
  pass
22
- #import copy
23
- #import stat
24
- #import subprocess
25
- #import time
26
- #import random
27
- #import copy
28
19
 
29
20
  #from pylab import * # this stuff is being used, don't know all where
30
21
 
@@ -126,7 +117,7 @@ class Arai_GUI(object):
126
117
  #{'treatment_ac_field': '0', 'treatment_dc_field_theta': '90', 'measurement_temp': '273', 'er_citation_names': 'This study', 'measurement_magn_moment': '1.98e-09', 'treatment_temp': '373', 'measurement_number': '1', 'measurement_standard': 'u', 'er_site_name': '0238x', 'er_sample_name': '0238x601104', 'treatment_dc_field_phi': '0', 'measurement_inc': '-8.1', 'er_location_name': '238', 'measurement_dec': '255.7', 'magic_experiment_name': '0238x6011043:LP-PI-TRM:LP-PI-ALT-PTRM:LP-PI-BT-MD:LP-PI-BT-IZZI', 'measurement_flag': 'g', 'er_specimen_name': '0238x6011043', 'measurement_csd': '0.7', 'treatment_dc_field': '4e-05', 'magic_method_codes': 'LT-T-I:LP-PI-TRM-IZ:LP-PI-TRM:LP-PI-ALT-PTRM:LP-PI-BT-MD:LP-PI-BT-IZZI'}
127
118
  # so, first is a zero field, heated to 273 and measured at 273. second is infield, heated to 373 but measured at 273.
128
119
  # actual measurements: measurement_magn_moment, measurement_inc, measurement_dec, and measurement_csd. inc == inclination (how a compass would want to point down through the earth to get to the N pole, at least while in northern hemisphere) magn_moment = "The product of the pole strength of a magnet and the distance between the poles." dec == declination.
129
- except:
120
+ except Exception:
130
121
  print("-E- ERROR: Cant read magic_measurement.txt file. File is corrupted.")
131
122
  return {},{}
132
123
 
@@ -282,14 +273,14 @@ class Arai_GUI(object):
282
273
  try:
283
274
  rmag_anis_data,file_type=self.magic_read(self.WD+'/rmag_anisotropy.txt')
284
275
  print( "-I- Anisotropy data read %s/from rmag_anisotropy.txt\n"%self.WD)
285
- except:
276
+ except Exception:
286
277
  print("-W- WARNING cant find rmag_anisotropy in working directory\n")
287
278
 
288
279
  try:
289
280
  results_anis_data,file_type=self.magic_read(self.WD+'/rmag_results.txt')
290
281
  print( "-I- Anisotropy data read %s/from rmag_anisotropy.txt\n"%self.WD)
291
282
 
292
- except:
283
+ except Exception:
293
284
  print("-W- WARNING cant find rmag_anisotropy in working directory\n")
294
285
 
295
286
 
@@ -512,7 +503,7 @@ class Arai_GUI(object):
512
503
  try:
513
504
  ancient_cooling_rate=float(self.Data_info["er_samples"][sample]['sample_cooling_rate'])
514
505
  ancient_cooling_rate = ancient_cooling_rate / (1e6*365*24*60) # change to K/minute
515
- except:
506
+ except Exception:
516
507
  print("-W- Cant find ancient cooling rate estimation for sample %s"%sample)
517
508
  continue
518
509
  self.Data_info["er_samples"]
@@ -787,7 +778,7 @@ class Arai_GUI(object):
787
778
  x_ptrm_check.append(ptrm_checks[k][3] / NRM)
788
779
  y_ptrm_check.append(zerofields[index_zerofield][3] / NRM)
789
780
  ptrm_checks_temperatures.append(ptrm_checks[k][0])
790
- except:
781
+ except Exception:
791
782
  pass
792
783
 
793
784
  # microwave
@@ -804,7 +795,7 @@ class Arai_GUI(object):
804
795
  x_ptrm_check.append(ptrm_checks[k][3] / NRM)
805
796
  y_ptrm_check.append(zerofields[index_zerofield][3] / NRM)
806
797
  ptrm_checks_temperatures.append(ptrm_checks[k][0])
807
- except:
798
+ except Exception:
808
799
  pass
809
800
 
810
801
 
@@ -855,7 +846,7 @@ class Arai_GUI(object):
855
846
  tail_check_temperatures.append(ptrm_tail[k][0])
856
847
 
857
848
  break
858
- except:
849
+ except Exception:
859
850
  pass
860
851
 
861
852
 
@@ -938,7 +929,7 @@ class Arai_GUI(object):
938
929
  #print ""
939
930
  #lj
940
931
 
941
- except:
932
+ except Exception:
942
933
  pass
943
934
 
944
935
  x_AC=numpy.array(x_AC)
@@ -1013,20 +1004,20 @@ class Arai_GUI(object):
1013
1004
 
1014
1005
  try:
1015
1006
  data_er_samples=read_magic_file(self.WD+"/er_samples.txt",'er_sample_name')
1016
- except:
1007
+ except Exception:
1017
1008
  print("-W- Cant find er_sample.txt in project directory\n")
1018
1009
 
1019
1010
  try:
1020
1011
  data_er_sites=read_magic_file(self.WD+"/er_sites.txt",'er_site_name')
1021
- except:
1012
+ except Exception:
1022
1013
  print ("-W- Cant find er_sites.txt in project directory\n")
1023
1014
 
1024
1015
  try:
1025
1016
  data_er_ages=read_magic_file(self.WD+"/er_ages.txt",'er_sample_name')
1026
- except:
1017
+ except Exception:
1027
1018
  try:
1028
1019
  data_er_ages=read_magic_file(self.WD+"/er_ages.txt",'er_site_name')
1029
- except:
1020
+ except Exception:
1030
1021
  print ("-W- Cant find er_ages in project directory\n")
1031
1022
 
1032
1023
 
@@ -1068,7 +1059,7 @@ class Arai_GUI(object):
1068
1059
  Decs = (numpy.arctan2(Ys,Xs) / rad)%360. # calculate declination taking care of correct quadrants (arctan2) and making modulo 360.
1069
1060
  try:
1070
1061
  Incs = numpy.arcsin(Zs / Rs) / rad # calculate inclination (converting to degrees) #
1071
- except:
1062
+ except Exception:
1072
1063
  print('trouble in cart2dir') # most likely division by zero somewhere
1073
1064
  return numpy.zeros(3)
1074
1065
 
@@ -1103,7 +1094,7 @@ class Arai_GUI(object):
1103
1094
  hold,magic_data,magic_record,magic_keys=[],[],{},[]
1104
1095
  try:
1105
1096
  f=open(infile,"r")
1106
- except:
1097
+ except Exception:
1107
1098
  return [],'bad_file'
1108
1099
  d = f.readline()[:-1].strip('\n')
1109
1100
  if d[0]=="s" or d[1]=="s":
@@ -14,15 +14,9 @@
14
14
  # Initial revision: September 2013:
15
15
  #
16
16
  #============================================================================================
17
-
18
- from builtins import object
19
17
  import sys
20
18
  import numpy
21
19
  import os
22
- #import pylab
23
- #import scipy
24
- #from scipy import *
25
- #import os
26
20
  import SPD.lib.lib_arai_plot_statistics as lib_arai
27
21
  #import SPD.lib.lib_curvature as lib_k
28
22
  import SPD.lib.leastsq_jacobian as lib_k
@@ -791,7 +785,7 @@ class PintPars(object):
791
785
  try:
792
786
  func(self) # this will work if the function has no dependencies
793
787
  stats_run.append(func.__name__)
794
- except:
788
+ except Exception:
795
789
  self.calculate_all_statistics() # if no dependency info can be found, just run all statistics
796
790
  return 0 # since all possible statistics have been run, the function ends
797
791
  #print 'stats run: ', stats_run
@@ -2,12 +2,13 @@ from setuptools import setup, find_packages
2
2
  from pmagpy import version
3
3
  from programs_list import programs_list
4
4
 
5
- version_num = version.version.strip('pmagpy-')
5
+ version_num = version.version.removeprefix('pmagpy-')
6
+ shared_version_requirement = f'pmagpy=={version_num}'
6
7
 
7
8
  # skip the html header at the top of README.md
8
9
  with open('README.md', encoding='utf-8') as f:
9
10
  lines = f.readlines()[14:]
10
- long_description = "\n".join(lines)
11
+ long_description = "".join(lines)
11
12
 
12
13
 
13
14
  setup(
@@ -15,6 +16,7 @@ setup(
15
16
  version=version_num,
16
17
  description='Analysis tools for paleo/rock magnetic data',
17
18
  long_description=long_description,
19
+ long_description_content_type='text/markdown',
18
20
  url='https://github.com/PmagPy/PmagPy',
19
21
  author='PmagPy team',
20
22
  author_email='ltauxe@ucsd.edu',
@@ -36,10 +38,8 @@ setup(
36
38
  python_requires='>=3.9',
37
39
 
38
40
  install_requires=[
39
- 'pmagpy',
41
+ shared_version_requirement,
40
42
  'wxPython',
41
- 'PyQt5',
42
- 'lmfit',
43
43
  'pillow',
44
44
  'appdirs',
45
45
  ],
@@ -0,0 +1,34 @@
1
+ """GUI dialog package with lazy submodule loading."""
2
+
3
+ from importlib import import_module
4
+
5
+
6
+ _SUBMODULES = {
7
+ 'ErMagicBuilder': 'ErMagicBuilder',
8
+ 'demag_dialogs': 'demag_dialogs',
9
+ 'demag_interpretation_editor': 'demag_interpretation_editor',
10
+ 'grid_frame3': 'grid_frame3',
11
+ 'magic_grid3': 'magic_grid3',
12
+ 'pmag_gui_dialogs': 'pmag_gui_dialogs',
13
+ 'pmag_er_magic_dialogs': 'pmag_er_magic_dialogs',
14
+ 'pmag_menu_dialogs': 'pmag_menu_dialogs',
15
+ 'pmag_widgets': 'pmag_widgets',
16
+ 'thellier_consistency_test': 'thellier_consistency_test',
17
+ 'thellier_gui_dialogs': 'thellier_gui_dialogs',
18
+ 'thellier_gui_lib': 'thellier_gui_lib',
19
+ 'thellier_interpreter': 'thellier_interpreter',
20
+ }
21
+
22
+ __all__ = list(_SUBMODULES)
23
+
24
+
25
+ def __getattr__(name):
26
+ if name not in _SUBMODULES:
27
+ raise AttributeError(f"module 'dialogs' has no attribute {name!r}")
28
+ module = import_module(f'.{_SUBMODULES[name]}', __name__)
29
+ globals()[name] = module
30
+ return module
31
+
32
+
33
+ def __dir__():
34
+ return sorted(list(globals()) + __all__)
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env python
2
2
 
3
+ import importlib
3
4
  import matplotlib
4
5
  import numpy as np
5
6
  import wx
@@ -12,15 +13,17 @@ import matplotlib.pyplot as plt
12
13
  from matplotlib.figure import Figure
13
14
  from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigCanvas
14
15
  from matplotlib.backends.backend_wxagg import NavigationToolbar2WxAgg as NavigationToolbar
16
+ from dialogs.plot_export import save_figure
15
17
  from pmagpy.demag_gui_utilities import *
16
18
  from pmag_env import set_env
17
19
  from numpy import vstack,sqrt
18
20
  from functools import reduce
19
21
 
20
22
  has_cartopy, Cartopy = pmag.import_cartopy()
23
+ cfeature = ccrs = None
21
24
  if has_cartopy:
22
- import cartopy.feature as cfeature
23
- import cartopy.crs as ccrs
25
+ cfeature = importlib.import_module('cartopy.feature')
26
+ ccrs = importlib.import_module('cartopy.crs')
24
27
 
25
28
  #============================================================================================
26
29
  # LOG HEADER:
@@ -46,7 +49,7 @@ class VGP_Dialog(wx.Frame):
46
49
 
47
50
  def __init__(self,parent,VGP_Data):
48
51
  if set_env.IS_FROZEN and not set_env.IS_WIN:
49
- parent.user_warning("This feature is not available in the standalone executable. If you need to look at VGPs, consider installing Python and PmagPy: https://earthref.org/PmagPy/cookbook/#getting_python");
52
+ parent.user_warning("This feature is not available in the standalone executable. If you need to look at VGPs, consider installing Python and PmagPy: https://pmagpy.github.io/PmagPy-docs/installation/pip_install.html");
50
53
  self.failed_init=True
51
54
  return
52
55
  self.failed_init = False
@@ -398,11 +401,9 @@ class SaveMyPlot(wx.Frame):
398
401
  return
399
402
 
400
403
  title=name
401
- self.panel = wx.Panel(self)
402
404
  self.dpi=300
403
405
 
404
- canvas_tmp_1 = FigCanvas(self.panel, -1, fig)
405
- canvas_tmp_1.print_figure(path, dpi=self.dpi)
406
+ save_figure(fig, path, dpi=self.dpi)
406
407
 
407
408
  #--------------------------------------------------------------
408
409
  # MagIc results tables dialog
@@ -550,7 +551,7 @@ class user_input(wx.Dialog):
550
551
  for i,ctrl in enumerate(self.list_ctrls):
551
552
  if hasattr(self.parse_funcs,'__getitem__') and len(self.parse_funcs)>i and hasattr(self.parse_funcs[i],'__call__'):
552
553
  try: return_dict[self.inputs[i]] = self.parse_funcs[i](ctrl.GetValue())
553
- except: return_dict[self.inputs[i]] = ctrl.GetValue()
554
+ except Exception: return_dict[self.inputs[i]] = ctrl.GetValue()
554
555
  else:
555
556
  return_dict[self.inputs[i]] = ctrl.GetValue()
556
557
  return ('' not in list(return_dict.values()), return_dict)
@@ -1146,7 +1147,7 @@ class convert_generic_files_to_MagIC(wx.Frame):
1146
1147
  self.er_sample_data={}
1147
1148
  try:
1148
1149
  self.er_sample_data=self.read_magic_file(os.path.join(self.WD, "er_samples.txt"), 'er_sample_name')
1149
- except:
1150
+ except Exception:
1150
1151
  print("-W- WARNING: Cant find er_samples.txt table")
1151
1152
 
1152
1153
  for i in range(self.max_files):
@@ -6,6 +6,7 @@ from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigCanvas
6
6
  from matplotlib.backends.backend_wxagg import NavigationToolbar2WxAgg as NavigationToolbar
7
7
  from matplotlib.figure import Figure
8
8
  import help_files.demag_interpretation_editor_help as dieh
9
+ from dialogs import gui_theme
9
10
  from pmagpy.demag_gui_utilities import *
10
11
  from pmagpy.Fit import *
11
12
  from pmagpy.pmag import get_version
@@ -28,6 +29,7 @@ class InterpretationEditorFrame(wx.Frame):
28
29
  #call init of super class
29
30
  default_style = wx.MINIMIZE_BOX | wx.MAXIMIZE_BOX | wx.RESIZE_BORDER | wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.CLIP_CHILDREN | wx.NO_FULL_REPAINT_ON_RESIZE | wx.WS_EX_CONTEXTHELP | wx.FRAME_EX_CONTEXTHELP
30
31
  wx.Frame.__init__(self, self.parent, title="Interpretation Editor version:%s"%CURRENT_VERSION,style=default_style, size=(675*self.GUI_RESOLUTION,425*self.GUI_RESOLUTION))
32
+ gui_theme.bind_theme_updates(self)
31
33
  self.Bind(wx.EVT_CLOSE, self.on_close_edit_window)
32
34
  #setup wx help provider class to give help messages
33
35
  provider = wx.SimpleHelpProvider()
@@ -237,8 +239,8 @@ class InterpretationEditorFrame(wx.Frame):
237
239
  for parameter in ['mean_type','dec','inc','alpha95','K','R','n_lines','n_planes']:
238
240
  COMMAND="self.%s_window=wx.TextCtrl(self.panel,style=wx.TE_CENTER|wx.TE_READONLY,size=(100*self.GUI_RESOLUTION,25))"%parameter
239
241
  exec(COMMAND)
240
- COMMAND="self.%s_window.SetBackgroundColour(wx.WHITE)"%parameter
241
- exec(COMMAND)
242
+ gui_theme.style_control(
243
+ getattr(self, "{}_window".format(parameter)))
242
244
  COMMAND="self.%s_window.SetFont(font2)"%parameter
243
245
  exec(COMMAND)
244
246
  COMMAND="self.%s_outer_window = wx.GridSizer(1,2,5*self.GUI_RESOLUTION,15*self.GUI_RESOLUTION)"%parameter
@@ -346,7 +348,7 @@ class InterpretationEditorFrame(wx.Frame):
346
348
  m_help = menu_Help.Append(-1, "&Usage and Tips\tCtrl-H", "")
347
349
  self.Bind(wx.EVT_MENU, self.on_menu_help, m_help)
348
350
 
349
- m_cookbook = menu_Help.Append(-1, "&PmagPy Cookbook\tCtrl-Shift-W", "")
351
+ m_cookbook = menu_Help.Append(-1, "&PmagPy Documentation\tCtrl-Shift-W", "")
350
352
  self.Bind(wx.EVT_MENU, self.parent.on_menu_cookbook, m_cookbook)
351
353
 
352
354
  m_docs = menu_Help.Append(-1, "&Open Docs\tCtrl-Shift-H", "")
@@ -482,7 +484,11 @@ class InterpretationEditorFrame(wx.Frame):
482
484
  else: inc = "N/A"
483
485
  if 'specimen_mad' in list(pars.keys()): mad = "%.1f"%pars['specimen_mad']
484
486
  else: mad = "N/A"
485
- if 'specimen_dang' in list(pars.keys()): dang = "%.1f"%pars['specimen_dang']
487
+ # DANG is not calculated for anchored lines (placeholder of 0), nor
488
+ # for fits that return -1 (vector and Fisher means)
489
+ if 'specimen_dang' in list(pars.keys()) and float(pars['specimen_dang']) != -1 \
490
+ and pars.get('calculation_type') != 'DE-BFL-A':
491
+ dang = "%.1f"%pars['specimen_dang']
486
492
  else: dang = "N/A"
487
493
  if 'specimen_alpha95' in list(pars.keys()): a95 = "%.1f"%pars['specimen_alpha95']
488
494
  else: a95 = "N/A"