struphy 2.5.0__tar.gz → 3.0.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 (386) hide show
  1. struphy-3.0.0/PKG-INFO +208 -0
  2. struphy-3.0.0/README.md +114 -0
  3. {struphy-2.5.0 → struphy-3.0.0}/pyproject.toml +34 -20
  4. struphy-3.0.0/src/struphy/__init__.py +77 -0
  5. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/bsplines/bsplines.py +31 -31
  6. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/bsplines/bsplines_kernels.py +14 -2
  7. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/bsplines/evaluation_kernels_1d.py +6 -1
  8. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/bsplines/evaluation_kernels_3d.py +267 -22
  9. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/bsplines/tests/test_bsplines_kernels.py +25 -26
  10. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/bsplines/tests/test_eval_spline_mpi.py +86 -84
  11. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/compile_struphy.mk +1 -1
  12. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/conftest.py +6 -10
  13. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/console/compile.py +13 -57
  14. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/console/format.py +15 -13
  15. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/console/main.py +41 -548
  16. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/console/params.py +12 -16
  17. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/console/profile.py +7 -7
  18. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/console/test.py +40 -81
  19. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/console/tests/test_console.py +19 -243
  20. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/diagnostics/console_diagn.py +3 -3
  21. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/diagnostics/continuous_spectra.py +24 -19
  22. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/diagnostics/diagn_tools.py +147 -89
  23. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/diagnostics/paraview/mesh_creator.py +39 -35
  24. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/dispersion_relations/analytic.py +54 -46
  25. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/dispersion_relations/base.py +5 -6
  26. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/dispersion_relations/utilities.py +2 -3
  27. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/derivatives.py +4 -5
  28. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/kernels_projectors_global.py +52 -10
  29. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/legacy/MHD_eigenvalues_cylinder_1D.py +214 -203
  30. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/legacy/control_variates/control_variate.py +21 -21
  31. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/legacy/control_variates/kinetic_extended/fB_massless_control_variate.py +2 -2
  32. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/legacy/control_variates/kinetic_extended/fB_massless_kernels_control_variate.py +39 -3
  33. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/legacy/control_variates/kinetic_extended/fnB_massless_control_variate.py +3 -4
  34. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/legacy/control_variates/kinetic_extended/fnB_massless_kernels_control_variate.py +52 -4
  35. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/legacy/control_variates/kinetic_extended/massless_control_variate.py +3 -4
  36. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/legacy/control_variates/kinetic_extended/massless_kernels_control_variate.py +114 -15
  37. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/legacy/emw_operators.py +8 -6
  38. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/legacy/inner_products_1d.py +5 -6
  39. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/legacy/inner_products_2d.py +19 -19
  40. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/legacy/inner_products_3d.py +19 -19
  41. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/legacy/l2_error_1d.py +5 -6
  42. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/legacy/l2_error_2d.py +25 -25
  43. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/legacy/l2_error_3d.py +25 -25
  44. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/legacy/mass_matrices_3d_pre.py +49 -43
  45. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/legacy/massless_operators/fB_arrays.py +105 -105
  46. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/legacy/massless_operators/fB_bv_kernel.py +18 -6
  47. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/legacy/massless_operators/fB_massless_linear_operators.py +62 -57
  48. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/legacy/massless_operators/fB_vv_kernel.py +5 -3
  49. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/legacy/mhd_operators_MF.py +113 -113
  50. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/legacy/projectors_local/pro_local/mhd_operators_3d_local.py +319 -299
  51. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/legacy/projectors_local/pro_local/projectors_local.py +356 -330
  52. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/legacy/projectors_local/shape_pro_local/shape_L2_projector_kernel.py +36 -18
  53. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/legacy/projectors_local/shape_pro_local/shape_function_projectors_L2.py +86 -79
  54. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/legacy/projectors_local/shape_pro_local/shape_function_projectors_local.py +140 -131
  55. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/legacy/projectors_local/shape_pro_local/shape_local_projector_kernel.py +94 -47
  56. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/mass_matrices_1d.py +13 -13
  57. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/mass_matrices_2d.py +46 -46
  58. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/mass_matrices_3d.py +52 -49
  59. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/mhd_axisymmetric_main.py +20 -14
  60. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/mhd_axisymmetric_pproc.py +9 -7
  61. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/mhd_operators.py +49 -36
  62. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/mhd_operators_core.py +375 -283
  63. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/projectors_global.py +201 -168
  64. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/spline_space.py +247 -205
  65. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/examples/_draw_parallel.py +6 -6
  66. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/examples/restelli2018/callables.py +33 -33
  67. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/feec/basis_projection_ops.py +29 -29
  68. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/feec/linear_operators.py +24 -24
  69. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/feec/local_projectors_kernels.py +40 -26
  70. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/feec/mass.py +166 -54
  71. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/feec/mass_kernels.py +9 -3
  72. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/feec/preconditioner.py +22 -30
  73. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/feec/projectors.py +85 -80
  74. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/feec/psydac_derham.py +375 -312
  75. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/feec/tests/test_basis_ops.py +44 -37
  76. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/feec/tests/test_derham.py +33 -17
  77. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/feec/tests/test_eval_field.py +101 -126
  78. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/feec/tests/test_field_init.py +189 -196
  79. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/feec/tests/test_l2_projectors.py +33 -29
  80. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/feec/tests/test_local_projectors.py +173 -220
  81. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/feec/tests/test_lowdim_nel_is_1.py +35 -35
  82. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/feec/tests/test_mass_matrices.py +111 -74
  83. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/feec/tests/test_toarray_struphy.py +16 -15
  84. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/feec/tests/test_tosparse_struphy.py +26 -13
  85. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/feec/tests/xx_test_preconds.py +7 -7
  86. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/feec/utilities.py +27 -22
  87. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/feec/utilities_local_projectors.py +71 -57
  88. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/feec/variational_utilities.py +78 -65
  89. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/fields_background/base.py +70 -61
  90. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/fields_background/coil_fields/base.py +8 -5
  91. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/fields_background/coil_fields/coil_fields.py +15 -13
  92. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/fields_background/equils.py +137 -125
  93. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/fields_background/generic.py +8 -0
  94. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/fields_background/mhd_equil/eqdsk/readeqdsk.py +5 -1
  95. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/fields_background/projected_equils.py +5 -2
  96. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/fields_background/tests/test_desc_equil.py +40 -41
  97. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/fields_background/tests/test_generic_equils.py +14 -14
  98. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/fields_background/tests/test_mhd_equils.py +41 -42
  99. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/fields_background/tests/test_numerical_mhd_equil.py +36 -36
  100. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/geometry/base.py +118 -118
  101. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/geometry/domains.py +23 -36
  102. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/geometry/evaluation_kernels.py +12 -12
  103. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/geometry/mappings_kernels.py +171 -21
  104. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/geometry/tests/test_domain.py +65 -60
  105. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/geometry/transform_kernels.py +21 -3
  106. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/geometry/utilities.py +54 -40
  107. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/geometry/utilities_kernels.py +4 -4
  108. struphy-3.0.0/src/struphy/initial/base.py +47 -0
  109. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/initial/eigenfunctions.py +26 -23
  110. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/initial/perturbations.py +572 -363
  111. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/initial/tests/test_init_perturbations.py +106 -80
  112. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/initial/utilities.py +2 -2
  113. struphy-3.0.0/src/struphy/io/inp/params_Maxwell.py +63 -0
  114. struphy-3.0.0/src/struphy/io/inp/params_Maxwell_lw.py +66 -0
  115. struphy-3.0.0/src/struphy/io/inp/verification/Maxwell_coaxial.py +60 -0
  116. struphy-3.0.0/src/struphy/io/options.py +363 -0
  117. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/io/output_handling.py +9 -6
  118. struphy-3.0.0/src/struphy/io/setup.py +333 -0
  119. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/kinetic_background/base.py +101 -314
  120. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/kinetic_background/maxwellians.py +259 -127
  121. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/kinetic_background/moment_functions.py +3 -3
  122. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/kinetic_background/tests/test_base.py +21 -21
  123. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/kinetic_background/tests/test_maxwellians.py +449 -385
  124. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/linear_algebra/linalg_kron.py +13 -11
  125. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/linear_algebra/saddle_point.py +68 -65
  126. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/linear_algebra/schur_solver.py +18 -4
  127. struphy-3.0.0/src/struphy/linear_algebra/solver.py +37 -0
  128. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/linear_algebra/tests/test_saddle_point_propagator.py +82 -53
  129. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/linear_algebra/tests/test_saddlepoint_massmatrices.py +35 -36
  130. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/linear_algebra/tests/test_stencil_dot_kernels.py +18 -18
  131. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/linear_algebra/tests/test_stencil_transpose_kernels.py +15 -15
  132. struphy-3.0.0/src/struphy/main.py +987 -0
  133. struphy-3.0.0/src/struphy/models/__init__.py +74 -0
  134. struphy-3.0.0/src/struphy/models/base.py +1799 -0
  135. struphy-3.0.0/src/struphy/models/fluid.py +2434 -0
  136. struphy-3.0.0/src/struphy/models/hybrid.py +1012 -0
  137. struphy-3.0.0/src/struphy/models/kinetic.py +1096 -0
  138. struphy-3.0.0/src/struphy/models/species.py +212 -0
  139. struphy-3.0.0/src/struphy/models/tests/test_models.py +176 -0
  140. struphy-3.0.0/src/struphy/models/tests/test_verif_EulerSPH.py +166 -0
  141. struphy-3.0.0/src/struphy/models/tests/test_verif_LinearMHD.py +154 -0
  142. struphy-3.0.0/src/struphy/models/tests/test_verif_Maxwell.py +275 -0
  143. struphy-3.0.0/src/struphy/models/tests/test_verif_Poisson.py +149 -0
  144. struphy-3.0.0/src/struphy/models/tests/test_verif_VlasovAmpereOneSpecies.py +167 -0
  145. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/models/tests/test_xxpproc.py +1 -1
  146. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/models/tests/verification.py +63 -59
  147. struphy-3.0.0/src/struphy/models/toy.py +1227 -0
  148. struphy-3.0.0/src/struphy/models/variables.py +425 -0
  149. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/ode/solvers.py +3 -9
  150. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/ode/tests/test_ode_feec.py +25 -21
  151. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/ode/utils.py +29 -26
  152. struphy-3.0.0/src/struphy/physics/physics.py +11 -0
  153. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/accumulation/accum_kernels.py +8 -71
  154. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/accumulation/accum_kernels_gc.py +652 -196
  155. struphy-3.0.0/src/struphy/pic/accumulation/filter.py +185 -0
  156. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/accumulation/filter_kernels.py +18 -4
  157. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/accumulation/particle_to_mat_kernels.py +36 -6
  158. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/accumulation/particles_to_grid.py +34 -113
  159. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/base.py +588 -535
  160. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/particles.py +96 -125
  161. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/pushing/pusher.py +20 -23
  162. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/pushing/pusher_kernels.py +62 -467
  163. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/pushing/pusher_kernels_gc.py +404 -99
  164. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/sampling_kernels.py +3 -3
  165. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/sobol_seq.py +34 -35
  166. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/sph_eval_kernels.py +13 -1
  167. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/tests/test_accum_vec_H1.py +23 -22
  168. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/tests/test_accumulation.py +25 -23
  169. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/tests/test_binning.py +237 -276
  170. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/tests/test_draw_parallel.py +13 -13
  171. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/tests/test_mat_vec_filler.py +67 -50
  172. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/tests/test_pic_legacy_files/accumulation.py +22 -20
  173. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/tests/test_pic_legacy_files/accumulation_kernels_3d.py +174 -18
  174. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/tests/test_pic_legacy_files/mappings_3d.py +194 -18
  175. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/tests/test_pic_legacy_files/mappings_3d_fast.py +279 -26
  176. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/tests/test_pic_legacy_files/pusher.py +2 -1
  177. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/tests/test_pic_legacy_files/pusher_pos.py +1170 -87
  178. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/tests/test_pic_legacy_files/pusher_vel_2d.py +180 -20
  179. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/tests/test_pic_legacy_files/pusher_vel_3d.py +273 -21
  180. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/tests/test_pic_legacy_files/spline_evaluation_2d.py +1 -1
  181. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/tests/test_pic_legacy_files/spline_evaluation_3d.py +248 -20
  182. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/tests/test_pushers.py +73 -69
  183. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/tests/test_sorting.py +50 -10
  184. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/tests/test_sph.py +233 -254
  185. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/tests/test_tesselation.py +35 -42
  186. struphy-3.0.0/src/struphy/pic/utilities.py +310 -0
  187. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/utilities_kernels.py +131 -154
  188. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/polar/basic.py +9 -10
  189. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/polar/extraction_operators.py +123 -122
  190. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/polar/linear_operators.py +13 -6
  191. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/polar/tests/test_legacy_polar_splines.py +10 -10
  192. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/polar/tests/test_polar.py +22 -22
  193. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/post_processing/likwid/plot_likwidproject.py +6 -6
  194. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/post_processing/likwid/plot_time_traces.py +33 -35
  195. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/post_processing/likwid/roofline_plotter.py +6 -7
  196. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/post_processing/orbits/orbits_tools.py +24 -25
  197. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/post_processing/post_processing_tools.py +378 -274
  198. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/post_processing/pproc_struphy.py +48 -77
  199. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/post_processing/profile_struphy.py +5 -5
  200. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/profiling/profiling.py +11 -12
  201. struphy-3.0.0/src/struphy/propagators/__init__.py +98 -0
  202. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/propagators/base.py +113 -106
  203. struphy-3.0.0/src/struphy/propagators/propagators_coupling.py +2181 -0
  204. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/propagators/propagators_fields.py +2713 -2276
  205. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/propagators/propagators_markers.py +797 -400
  206. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/propagators/tests/test_gyrokinetic_poisson.py +220 -139
  207. struphy-3.0.0/src/struphy/propagators/tests/test_poisson.py +681 -0
  208. struphy-2.5.0/src/struphy/psydac-2.5.0.dev0-py3-none-any.whl → struphy-3.0.0/src/struphy/psydac-3.0.0.dev0-py3-none-any.whl +0 -0
  209. struphy-3.0.0/src/struphy/topology/grids.py +21 -0
  210. struphy-3.0.0/src/struphy/utils/__init__.py +0 -0
  211. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/utils/clone_config.py +8 -9
  212. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/utils/cupy_vs_numpy.py +1 -1
  213. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/utils/test_clone_config.py +3 -3
  214. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/utils/utils.py +14 -14
  215. struphy-3.0.0/src/struphy.egg-info/PKG-INFO +208 -0
  216. {struphy-2.5.0 → struphy-3.0.0}/src/struphy.egg-info/SOURCES.txt +20 -12
  217. {struphy-2.5.0 → struphy-3.0.0}/src/struphy.egg-info/requires.txt +15 -8
  218. struphy-2.5.0/PKG-INFO +0 -142
  219. struphy-2.5.0/README.md +0 -55
  220. struphy-2.5.0/src/struphy/console/pproc.py +0 -132
  221. struphy-2.5.0/src/struphy/console/run.py +0 -312
  222. struphy-2.5.0/src/struphy/console/units.py +0 -48
  223. struphy-2.5.0/src/struphy/io/setup.py +0 -638
  224. struphy-2.5.0/src/struphy/main.py +0 -491
  225. struphy-2.5.0/src/struphy/models/__init__.py +0 -76
  226. struphy-2.5.0/src/struphy/models/base.py +0 -2278
  227. struphy-2.5.0/src/struphy/models/fluid.py +0 -2558
  228. struphy-2.5.0/src/struphy/models/hybrid.py +0 -1191
  229. struphy-2.5.0/src/struphy/models/kinetic.py +0 -1198
  230. struphy-2.5.0/src/struphy/models/tests/test_fluid_models.py +0 -28
  231. struphy-2.5.0/src/struphy/models/tests/test_hybrid_models.py +0 -28
  232. struphy-2.5.0/src/struphy/models/tests/test_kinetic_models.py +0 -28
  233. struphy-2.5.0/src/struphy/models/tests/test_toy_models.py +0 -28
  234. struphy-2.5.0/src/struphy/models/toy.py +0 -1290
  235. struphy-2.5.0/src/struphy/pic/utilities.py +0 -76
  236. struphy-2.5.0/src/struphy/propagators/__init__.py +0 -95
  237. struphy-2.5.0/src/struphy/propagators/propagators_coupling.py +0 -1892
  238. struphy-2.5.0/src/struphy/propagators/tests/test_poisson.py +0 -427
  239. struphy-2.5.0/src/struphy/tutorials/tests/test_tutorials.py +0 -172
  240. struphy-2.5.0/src/struphy/utils/arrays.py +0 -59
  241. struphy-2.5.0/src/struphy/utils/mpi.py +0 -102
  242. struphy-2.5.0/src/struphy/utils/set_release_dependencies.py +0 -76
  243. struphy-2.5.0/src/struphy.egg-info/PKG-INFO +0 -142
  244. {struphy-2.5.0 → struphy-3.0.0}/LICENSE +0 -0
  245. {struphy-2.5.0 → struphy-3.0.0}/setup.cfg +0 -0
  246. {struphy-2.5.0/src/struphy → struphy-3.0.0/src/struphy/bsplines}/__init__.py +0 -0
  247. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/bsplines/evaluation_kernels_2d.py +0 -0
  248. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/bsplines/shapefunc_kernels.py +0 -0
  249. {struphy-2.5.0/src/struphy/bsplines → struphy-3.0.0/src/struphy/bsplines/tests}/__init__.py +0 -0
  250. {struphy-2.5.0/src/struphy/bsplines/tests → struphy-3.0.0/src/struphy/console}/__init__.py +0 -0
  251. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/console/likwid.py +0 -0
  252. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/console/parsers.py +0 -0
  253. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/dependencies.py +0 -0
  254. {struphy-2.5.0/src/struphy/console → struphy-3.0.0/src/struphy/diagnostics}/__init__.py +0 -0
  255. {struphy-2.5.0/src/struphy/diagnostics → struphy-3.0.0/src/struphy/diagnostics/paraview}/__init__.py +0 -0
  256. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/diagnostics/paraview/vtk_writer.py +0 -0
  257. {struphy-2.5.0/src/struphy/diagnostics/paraview → struphy-3.0.0/src/struphy/dispersion_relations}/__init__.py +0 -0
  258. {struphy-2.5.0/src/struphy/dispersion_relations → struphy-3.0.0/src/struphy/eigenvalue_solvers}/__init__.py +0 -0
  259. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/kernels_2d.py +0 -0
  260. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/kernels_3d.py +0 -0
  261. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/kernels_projectors_global_mhd.py +0 -0
  262. {struphy-2.5.0/src/struphy/eigenvalue_solvers → struphy-3.0.0/src/struphy/eigenvalue_solvers/legacy}/__init__.py +0 -0
  263. {struphy-2.5.0/src/struphy/eigenvalue_solvers/legacy → struphy-3.0.0/src/struphy/eigenvalue_solvers/legacy/control_variates}/__init__.py +0 -0
  264. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/legacy/control_variates/kernels_control_variate.py +0 -0
  265. {struphy-2.5.0/src/struphy/eigenvalue_solvers/legacy/control_variates → struphy-3.0.0/src/struphy/eigenvalue_solvers/legacy/control_variates/kinetic_extended}/__init__.py +0 -0
  266. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/legacy/control_variates/kinetic_extended/fnB_massless_cv_kernel_2.py +0 -0
  267. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/legacy/control_variates/kinetic_extended/massless_cvker.py +0 -0
  268. {struphy-2.5.0/src/struphy/eigenvalue_solvers/legacy/control_variates/kinetic_extended → struphy-3.0.0/src/struphy/eigenvalue_solvers/legacy/massless_operators}/__init__.py +0 -0
  269. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/legacy/massless_operators/fB_bb_kernel.py +0 -0
  270. {struphy-2.5.0/src/struphy/eigenvalue_solvers/legacy/massless_operators → struphy-3.0.0/src/struphy/eigenvalue_solvers/legacy/projectors_local}/__init__.py +0 -0
  271. {struphy-2.5.0/src/struphy/eigenvalue_solvers/legacy/projectors_local → struphy-3.0.0/src/struphy/eigenvalue_solvers/legacy/projectors_local/pro_local}/__init__.py +0 -0
  272. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/legacy/projectors_local/pro_local/kernels_projectors_local.py +0 -0
  273. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/eigenvalue_solvers/legacy/projectors_local/pro_local/kernels_projectors_local_mhd.py +0 -0
  274. {struphy-2.5.0/src/struphy/eigenvalue_solvers/legacy/projectors_local/pro_local → struphy-3.0.0/src/struphy/eigenvalue_solvers/legacy/projectors_local/shape_pro_local}/__init__.py +0 -0
  275. {struphy-2.5.0/src/struphy/eigenvalue_solvers/legacy/projectors_local/shape_pro_local → struphy-3.0.0/src/struphy/eigenvalue_solvers/tests}/__init__.py +0 -0
  276. {struphy-2.5.0/src/struphy/eigenvalue_solvers/tests → struphy-3.0.0/src/struphy/examples/restelli2018}/__init__.py +0 -0
  277. {struphy-2.5.0/src/struphy/examples/restelli2018 → struphy-3.0.0/src/struphy/feec}/__init__.py +0 -0
  278. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/feec/banded_to_stencil_kernels.py +0 -0
  279. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/feec/basis_projection_kernels.py +0 -0
  280. {struphy-2.5.0/src/struphy/feec → struphy-3.0.0/src/struphy/feec/tests}/__init__.py +0 -0
  281. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/feec/utilities_kernels.py +0 -0
  282. {struphy-2.5.0/src/struphy/feec/tests → struphy-3.0.0/src/struphy/fields_background}/__init__.py +0 -0
  283. {struphy-2.5.0/src/struphy/fields_background → struphy-3.0.0/src/struphy/fields_background/coil_fields}/__init__.py +0 -0
  284. {struphy-2.5.0/src/struphy/fields_background/coil_fields → struphy-3.0.0/src/struphy/fields_background/mhd_equil}/__init__.py +0 -0
  285. {struphy-2.5.0/src/struphy/fields_background/mhd_equil → struphy-3.0.0/src/struphy/fields_background/mhd_equil/eqdsk}/__init__.py +0 -0
  286. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/fields_background/mhd_equil/eqdsk/data/AUGNLED_g031213.00830.high +0 -0
  287. {struphy-2.5.0/src/struphy/fields_background/mhd_equil/eqdsk → struphy-3.0.0/src/struphy/fields_background/mhd_equil/eqdsk/data}/__init__.py +0 -0
  288. {struphy-2.5.0/src/struphy/fields_background/mhd_equil/eqdsk/data → struphy-3.0.0/src/struphy/fields_background/mhd_equil/gvec}/__init__.py +0 -0
  289. {struphy-2.5.0/src/struphy/fields_background/mhd_equil/gvec → struphy-3.0.0/src/struphy/fields_background/mhd_equil/gvec/output}/__init__.py +0 -0
  290. {struphy-2.5.0/src/struphy/fields_background/mhd_equil/gvec/output → struphy-3.0.0/src/struphy/fields_background/mhd_equil/gvec/output/vtk}/__init__.py +0 -0
  291. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/fields_background/mhd_equil/gvec/run_01/CIRCTOK_State_0000_00000000.dat +0 -0
  292. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/fields_background/mhd_equil/gvec/run_01/CIRCTOK_State_0000_00001000.dat +0 -0
  293. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/fields_background/mhd_equil/gvec/run_01/parameter.ini +0 -0
  294. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/fields_background/mhd_equil/gvec/run_02/W7X_State_0000_00000000.dat +0 -0
  295. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/fields_background/mhd_equil/gvec/run_02/W7X_State_0000_00000100.dat +0 -0
  296. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/fields_background/mhd_equil/gvec/run_02/parameter-w7x.ini +0 -0
  297. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/fields_background/mhd_equil/gvec/run_03/NEO-SPITZER_State_0000_00000000.dat +0 -0
  298. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/fields_background/mhd_equil/gvec/run_03/NEO-SPITZER_State_0000_00003307.dat +0 -0
  299. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/fields_background/mhd_equil/gvec/run_03/Neo-spitzer-mirror23-well-opt-1-AR10-1.nc +0 -0
  300. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/fields_background/mhd_equil/gvec/run_03/parameter-fig8.ini +0 -0
  301. {struphy-2.5.0/src/struphy/fields_background/mhd_equil/gvec/output/vtk → struphy-3.0.0/src/struphy/fields_background/mhd_equil/vmec}/__init__.py +0 -0
  302. {struphy-2.5.0/src/struphy/fields_background/mhd_equil/vmec → struphy-3.0.0/src/struphy/fields_background/tests}/__init__.py +0 -0
  303. {struphy-2.5.0/src/struphy/fields_background/tests → struphy-3.0.0/src/struphy/geometry}/__init__.py +0 -0
  304. {struphy-2.5.0/src/struphy/geometry → struphy-3.0.0/src/struphy/geometry/map_coef}/__init__.py +0 -0
  305. {struphy-2.5.0/src/struphy/geometry/map_coef → struphy-3.0.0/src/struphy/geometry/tests}/__init__.py +0 -0
  306. {struphy-2.5.0/src/struphy/geometry/tests → struphy-3.0.0/src/struphy/initial}/__init__.py +0 -0
  307. {struphy-2.5.0/src/struphy/initial → struphy-3.0.0/src/struphy/initial/tests}/__init__.py +0 -0
  308. {struphy-2.5.0/src/struphy/initial/tests → struphy-3.0.0/src/struphy/io}/__init__.py +0 -0
  309. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/io/batch/batch_cobra.sh +0 -0
  310. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/io/batch/p_016.sh +0 -0
  311. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/io/batch/p_032.sh +0 -0
  312. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/io/batch/p_064.sh +0 -0
  313. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/io/batch/p_128.sh +0 -0
  314. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/io/batch/p_256.sh +0 -0
  315. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/io/batch/p_512.sh +0 -0
  316. {struphy-2.5.0/src/struphy/io → struphy-3.0.0/src/struphy/io/inp}/__init__.py +0 -0
  317. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/io/inp/longer_examples/params_TAE_tokamak.yml +0 -0
  318. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/io/inp/longer_examples/params_hybridmhdvlasovcc.yml +0 -0
  319. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/io/inp/longer_examples/params_hybridmhdvlasovpc.yml +0 -0
  320. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/io/inp/longer_examples/params_linearextendedmhd.yml +0 -0
  321. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/io/inp/longer_examples/params_linvlasovmaxwell_landau.yml +0 -0
  322. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/io/inp/longer_examples/params_linvlasovmaxwell_streaming_weibel.yml +0 -0
  323. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/io/inp/longer_examples/params_linvlasovmaxwell_weibel.yml +0 -0
  324. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/io/inp/parameters.yml +0 -0
  325. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/io/inp/tutorials/params_02.yml +0 -0
  326. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/io/inp/tutorials/params_03.yml +0 -0
  327. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/io/inp/tutorials/params_04a.yml +0 -0
  328. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/io/inp/tutorials/params_04b.yml +0 -0
  329. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/io/inp/tutorials/params_04c.yml +0 -0
  330. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/io/inp/tutorials/params_05a.yml +0 -0
  331. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/io/inp/tutorials/params_05b.yml +0 -0
  332. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/io/inp/tutorials/params_05c.yml +0 -0
  333. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/io/inp/tutorials/params_05d.yml +0 -0
  334. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/io/inp/tutorials/params_05e.yml +0 -0
  335. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/io/inp/tutorials/params_05f.yml +0 -0
  336. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/io/inp/tutorials/params_12a.yml +0 -0
  337. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/io/inp/tutorials/params_12b.yml +0 -0
  338. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/io/inp/verification/IsothermalEulerSPH_soundwave.yml +0 -0
  339. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/io/inp/verification/LinearVlasovAmpereOneSpecies_weakLandau.yml +0 -0
  340. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/io/inp/verification/Maxwell_coaxial.yml +0 -0
  341. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/io/inp/verification/VlasovAmpereOneSpecies_weakLandau.yml +0 -0
  342. {struphy-2.5.0/src/struphy/io/inp → struphy-3.0.0/src/struphy/io/inp/verification}/__init__.py +0 -0
  343. {struphy-2.5.0/src/struphy/io/inp/verification → struphy-3.0.0/src/struphy/io/out}/__init__.py +0 -0
  344. {struphy-2.5.0/src/struphy/io/out → struphy-3.0.0/src/struphy/kernel_arguments}/__init__.py +0 -0
  345. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/kernel_arguments/local_projectors_args_kernels.py +0 -0
  346. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/kernel_arguments/pusher_args_kernels.py +0 -0
  347. {struphy-2.5.0/src/struphy/kernel_arguments → struphy-3.0.0/src/struphy/kinetic_background}/__init__.py +0 -0
  348. {struphy-2.5.0/src/struphy/kinetic_background → struphy-3.0.0/src/struphy/kinetic_background/tests}/__init__.py +0 -0
  349. {struphy-2.5.0/src/struphy/kinetic_background/tests → struphy-3.0.0/src/struphy/linear_algebra}/__init__.py +0 -0
  350. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/linear_algebra/linalg_kernels.py +0 -0
  351. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/linear_algebra/stencil_dot_kernels.py +0 -0
  352. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/linear_algebra/stencil_transpose_kernels.py +0 -0
  353. {struphy-2.5.0/src/struphy/linear_algebra → struphy-3.0.0/src/struphy/linear_algebra/tests}/__init__.py +0 -0
  354. {struphy-2.5.0/src/struphy/linear_algebra → struphy-3.0.0/src/struphy/models}/tests/__init__.py +0 -0
  355. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/models/tests/util.py +0 -0
  356. {struphy-2.5.0/src/struphy/models/tests → struphy-3.0.0/src/struphy/ode}/__init__.py +0 -0
  357. {struphy-2.5.0/src/struphy/ode → struphy-3.0.0/src/struphy/ode/tests}/__init__.py +0 -0
  358. {struphy-2.5.0/src/struphy/ode/tests → struphy-3.0.0/src/struphy/physics}/__init__.py +0 -0
  359. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/__init__.py +0 -0
  360. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/accumulation/__init__.py +0 -0
  361. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/accumulation/filler_kernels.py +0 -0
  362. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/pushing/__init__.py +0 -0
  363. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/pushing/eval_kernels_gc.py +0 -0
  364. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/pushing/pusher_utilities_kernels.py +0 -0
  365. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/sorting_kernels.py +0 -0
  366. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/sph_smoothing_kernels.py +0 -0
  367. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/tests/__init__.py +0 -0
  368. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/pic/tests/test_pic_legacy_files/__init__.py +0 -0
  369. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/polar/__init__.py +0 -0
  370. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/polar/tests/__init__.py +0 -0
  371. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/post_processing/__init__.py +0 -0
  372. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/post_processing/cprofile_analyser.py +0 -0
  373. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/post_processing/likwid/__init__.py +0 -0
  374. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/post_processing/likwid/hardware_dicts.py +0 -0
  375. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/post_processing/likwid/likwid_parser.py +0 -0
  376. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/post_processing/likwid/maxplotlylib.py +0 -0
  377. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/post_processing/orbits/__init__.py +0 -0
  378. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/post_processing/orbits/orbits_kernels.py +0 -0
  379. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/post_processing/tests/__init__.py +0 -0
  380. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/profiling/__init__.py +0 -0
  381. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/propagators/tests/__init__.py +0 -0
  382. {struphy-2.5.0/src/struphy/utils → struphy-3.0.0/src/struphy/topology}/__init__.py +0 -0
  383. {struphy-2.5.0 → struphy-3.0.0}/src/struphy/utils/pyccel.py +0 -0
  384. {struphy-2.5.0 → struphy-3.0.0}/src/struphy.egg-info/dependency_links.txt +0 -0
  385. {struphy-2.5.0 → struphy-3.0.0}/src/struphy.egg-info/entry_points.txt +0 -0
  386. {struphy-2.5.0 → struphy-3.0.0}/src/struphy.egg-info/top_level.txt +0 -0
struphy-3.0.0/PKG-INFO ADDED
@@ -0,0 +1,208 @@
1
+ Metadata-Version: 2.4
2
+ Name: struphy
3
+ Version: 3.0.0
4
+ Summary: Multi-model plasma physics package
5
+ Author: Max Planck Institute for Plasma Physics
6
+ Author-email: stefan.possanner@ipp.mpg.de, max.lindqvist@ipp.mpg.de, eric.sonnendruecker@ipp.mpg.de
7
+ License: Copyright (c) 2019-2025, Struphy developers, Max Planck Institute for Plasma Physics
8
+
9
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
10
+ associated documentation files (the "Software"), to deal in the Software without restriction,
11
+ including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
12
+ and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
13
+ subject to the following conditions:
14
+
15
+ The above copyright notice and this permission notice shall be included in all copies or substantial
16
+ portions of the Software.
17
+
18
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
19
+ NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
21
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
+ Project-URL: homepage, https://struphy-hub.github.io/struphy/index.html
24
+ Project-URL: documentation, https://struphy-hub.github.io/struphy/index.html
25
+ Project-URL: repository, https://github.com/struphy-hub/struphy
26
+ Project-URL: changelog, https://github.com/struphy-hub/struphy/blob/devel/CHANGELOG.md
27
+ Project-URL: Bug Tracker, https://github.com/struphy-hub/struphy/issues
28
+ Keywords: plasma physics, fusion, numerical modeling, partial differential equations, energetic particles
29
+ Classifier: Programming Language :: Python :: 3
30
+ Requires-Python: >=3.10
31
+ Description-Content-Type: text/markdown
32
+ License-File: LICENSE
33
+ Requires-Dist: numpy<=2.2.6
34
+ Requires-Dist: cunumpy<=0.1
35
+ Requires-Dist: pyccel<=2.0.1,>=2.0
36
+ Requires-Dist: scipy<=1.15.3
37
+ Requires-Dist: h5py<=3.14.0
38
+ Requires-Dist: matplotlib<=3.10.5
39
+ Requires-Dist: pyyaml<=6.0.3
40
+ Requires-Dist: vtk<=9.5.2
41
+ Requires-Dist: tqdm<=4.67.1
42
+ Requires-Dist: argcomplete<=3.6.3
43
+ Requires-Dist: pytest<=9.0.1
44
+ Requires-Dist: pytest-mpi<=0.6
45
+ Requires-Dist: line_profiler<=5.0.0
46
+ Provides-Extra: phys
47
+ Requires-Dist: gvec<=1.2.0,>=1.1.0; extra == "phys"
48
+ Requires-Dist: desc-opt<=0.15.0; extra == "phys"
49
+ Provides-Extra: dev
50
+ Requires-Dist: struphy[mpi]; extra == "dev"
51
+ Requires-Dist: notebook<=7.4.7; extra == "dev"
52
+ Requires-Dist: autopep8<=2.3.2; extra == "dev"
53
+ Requires-Dist: isort<=7.0.0; extra == "dev"
54
+ Requires-Dist: flake8<=7.3.0; extra == "dev"
55
+ Requires-Dist: pylint<=4.0.2; extra == "dev"
56
+ Requires-Dist: ssort<=0.15.0; extra == "dev"
57
+ Requires-Dist: add-trailing-comma<=4.0.0; extra == "dev"
58
+ Requires-Dist: ruff<=0.14.4,>=0.9.1; extra == "dev"
59
+ Requires-Dist: pre-commit<=4.4.0; extra == "dev"
60
+ Requires-Dist: nbstripout<=0.8.1; extra == "dev"
61
+ Requires-Dist: tabulate<=0.9.0; extra == "dev"
62
+ Requires-Dist: tomli-w<=1.2.0; extra == "dev"
63
+ Requires-Dist: kaleido<=1.2.0; extra == "dev"
64
+ Requires-Dist: pandas<=2.3.3; extra == "dev"
65
+ Requires-Dist: plotly<=6.3.0; extra == "dev"
66
+ Provides-Extra: mpi
67
+ Requires-Dist: mpi4py<=4.1.1; extra == "mpi"
68
+ Provides-Extra: doc
69
+ Requires-Dist: struphy[phys]; extra == "doc"
70
+ Requires-Dist: jupyter<=1.1.1; extra == "doc"
71
+ Requires-Dist: nbconvert<=6.5.4; extra == "doc"
72
+ Requires-Dist: ipykernel<=7.1.0; extra == "doc"
73
+ Requires-Dist: sphinx<=8.1.3; extra == "doc"
74
+ Requires-Dist: sphinx-design<=0.6.1; extra == "doc"
75
+ Requires-Dist: lxml_html_clean<=0.4.3; extra == "doc"
76
+ Requires-Dist: sphinxcontrib-napoleon<=0.7; extra == "doc"
77
+ Requires-Dist: sphinx-copybutton<=0.5.2; extra == "doc"
78
+ Requires-Dist: pydata-sphinx-theme<=0.16.1; extra == "doc"
79
+ Requires-Dist: nbsphinx<=0.9.7; extra == "doc"
80
+ Requires-Dist: m2r2<=0.3.4; extra == "doc"
81
+ Requires-Dist: myst-parser<=4.0.1; extra == "doc"
82
+ Requires-Dist: mistune<=0.8.4; extra == "doc"
83
+ Requires-Dist: docutils<=0.21.2; extra == "doc"
84
+ Requires-Dist: ipyparallel<=9.0.2; extra == "doc"
85
+ Provides-Extra: likwid
86
+ Requires-Dist: struphy[dev]; extra == "likwid"
87
+ Requires-Dist: pylikwid; extra == "likwid"
88
+ Provides-Extra: all
89
+ Requires-Dist: struphy[phys]; extra == "all"
90
+ Requires-Dist: struphy[dev]; extra == "all"
91
+ Requires-Dist: struphy[mpi]; extra == "all"
92
+ Requires-Dist: struphy[doc]; extra == "all"
93
+ Dynamic: license-file
94
+
95
+ <h1 align="center">
96
+ <img src="https://raw.githubusercontent.com/struphy-hub/.github/refs/heads/main/profile/struphy_header_with_subs.png">
97
+ </h1><br>
98
+
99
+ [![Release](https://img.shields.io/github/v/release/struphy-hub/struphy?label=Release)](https://github.com/struphy-hub/struphy/releases)
100
+ [![License](https://img.shields.io/badge/License-MIT-violet)](https://github.com/struphy-hub/struphy/blob/devel/LICENSE)
101
+ [![badge](https://img.shields.io/badge/launch-tutorials-579ACA.svg?logo=data:image/png;base64,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)](https://mybinder.org/v2/gh/struphy-hub/struphy-tutorials/main)
102
+ [![Ubuntu latest](https://github.com/struphy-hub/struphy/actions/workflows/ubuntu-latest.yml/badge.svg)](https://github.com/struphy-hub/struphy/actions/workflows/ubuntu-latest.yml)
103
+ [![MacOS latest](https://github.com/struphy-hub/struphy/actions/workflows/macos-latest.yml/badge.svg)](https://github.com/struphy-hub/struphy/actions/workflows/macos-latest.yml)
104
+ [![isort and ruff](https://github.com/struphy-hub/struphy/actions/workflows/static_analysis.yml/badge.svg)](https://github.com/struphy-hub/struphy/actions/workflows/static_analysis.yml)
105
+ [![PyPI](https://img.shields.io/pypi/v/struphy?label=PyPI)](https://pypi.org/project/struphy/)
106
+ [![PyPI Downloads](https://img.shields.io/pypi/dm/struphy.svg?label=PyPI%20downloads)](
107
+ https://pypi.org/project/struphy/)
108
+
109
+
110
+
111
+ # Welcome!
112
+
113
+ **This is a Python package for solving partial differential equations (PDEs) mainly - but not exclusively - for plasma physics.**
114
+
115
+ **STRUPHY** stands for **STRU**cture-**P**reserving **HY**brid code (or **STRU**cture-preserving **PHY**sics code). The package provides off-the-shelf models for plasma physics problems, such as
116
+
117
+ * Maxwell's equations
118
+ * Magneto-hydrodynamics (MHD)
119
+ * Vlasov-Poisson and Vlasov-Maxwell kinetic models
120
+ * Drift-kinetic models for strongly magnetized plasma
121
+ * MHD-kinetic hybrid models
122
+
123
+ All models can be run on multiple cores through MPI (distributed memory) and OpenMP (shared memory). The compute-intensive parts of the code are translated and compiled ("transpiled") using [pyccel](https://github.com/pyccel/pyccel), giving you the speed of Fortran or C while working within the familiar Python environment.
124
+
125
+ Particles in a Tokamak <br> (model "Vlasov") | Toroidal Alfvén eigenmode <br> (model "LinearMHDDriftKineticCC")
126
+ :-------------------------:|:-------------------------:
127
+ ![](https://raw.githubusercontent.com/struphy-hub/.github/refs/heads/main/profile/gallery_struphy_tracer6D.png) | ![](https://raw.githubusercontent.com/struphy-hub/.github/refs/heads/main/profile/gallery_frontpage_bk.png)
128
+ **Strong Landau damping <br>(model "VlasovAmpereOneSpecies")** | **Anisotropic diffusion <br> (propagator "ImplicitDiffusion")**
129
+ ![](https://raw.githubusercontent.com/struphy-hub/.github/refs/heads/main/profile/gallery_step_1496.png) | ![](https://raw.githubusercontent.com/struphy-hub/.github/refs/heads/main/profile/gallery_struphy_heat.png)
130
+
131
+
132
+ The code is freely available under an [MIT license](https://github.com/struphy-hub/struphy/blob/devel/LICENSE) - Copyright (c) 2019-2025, Struphy developers, Max Planck Institute for Plasma Physics.
133
+
134
+ <h1 align="center">
135
+ <img src="https://raw.githubusercontent.com/struphy-hub/.github/refs/heads/main/profile/MPI_PP_Logo_Vertical_E_green_rgb.png" width="200">
136
+ </h1>
137
+
138
+ ## Tutorials
139
+
140
+ Get familiar with Struphy right away on [mybinder](https://mybinder.org/v2/gh/struphy-hub/struphy-tutorials/main) - no installation needed.
141
+
142
+
143
+ ## Quick install
144
+
145
+ Quick install on your computer (using a virtual environment):
146
+
147
+ ```
148
+ python -m venv struphy_env
149
+ source struphy_env/bin/activate
150
+ pip install -U pip
151
+ pip install -U struphy
152
+ struphy compile
153
+ ```
154
+
155
+ In case you face troubles with install/compile:
156
+
157
+ 1. check the [prerequisites](https://struphy-hub.github.io/struphy/sections/install.html#requirements)
158
+ 2. visit [trouble shooting](https://struphy-hub.github.io/struphy/sections/install.html#trouble-shooting)
159
+
160
+
161
+ ## Quick run
162
+
163
+ As an example, let's say we want to solve Maxwell's equations. We can use the CLI and generate a default launch file via
164
+
165
+ ```
166
+ struphy params Maxwell
167
+ ```
168
+ Hit yes when prompted - this will create the file `params_Maxwell.py` in your current working directory (cwd). You can open the file and - if you feel like it already - change some parameters, then run
169
+
170
+ ```
171
+ python params_Maxwell.py
172
+ ```
173
+
174
+ The default output is in `sim_1/` in your cwd. You can change the output path via the class `EnvironmentOptions` in the parameter file.
175
+
176
+ Parallel simulations are run for example with
177
+
178
+ ```
179
+ pip install -U mpi4py
180
+ mpirun -n 4 python params_Maxwell.py
181
+ ```
182
+
183
+ You can also put the run command in a batch script.
184
+
185
+
186
+ ## Documentation
187
+
188
+ The doc is on [Github pages](https://struphy-hub.github.io/struphy/index.html), we recommend in particular to visit:
189
+
190
+ * [Install](https://struphy-hub.github.io/struphy/sections/install.html)
191
+ * [Userguide](https://struphy-hub.github.io/struphy/sections/userguide.html)
192
+ * [Available models](https://struphy-hub.github.io/struphy/sections/models.html)
193
+ * [Numerical methods](https://struphy-hub.github.io/struphy/sections/numerics.html)
194
+
195
+
196
+ ## Get in touch
197
+
198
+ * [Issues](https://github.com/struphy-hub/struphy/issues)
199
+ * [Discussions](https://github.com/struphy-hub/struphy/discussions)
200
+ * [@spossann](https://github.com/spossann) [stefan.possanner@ipp.mpg.de](mailto:spossann@ipp.mpg.de) (Maintainer)
201
+ * [@max-models](https://github.com/max-models) [max.lindqvist@ipp.mpg.de](mailto:Max.Lindqvist@ipp.mpg.de) (Maintainer)
202
+ * [LinkedIn profile](https://www.linkedin.com/company/struphy/)
203
+
204
+
205
+ ## Citing Struphy
206
+
207
+ * S. Possanner, F. Holderied, Y. Li, B.-K. Na, D. Bell, S. Hadjout and Y. Güçlü, [**High-Order Structure-Preserving Algorithms for Plasma Hybrid Models**](https://link.springer.com/chapter/10.1007/978-3-031-38299-4_28), International Conference on Geometric Science of Information 2023, 263-271, Springer Nature Switzerland.
208
+
@@ -0,0 +1,114 @@
1
+ <h1 align="center">
2
+ <img src="https://raw.githubusercontent.com/struphy-hub/.github/refs/heads/main/profile/struphy_header_with_subs.png">
3
+ </h1><br>
4
+
5
+ [![Release](https://img.shields.io/github/v/release/struphy-hub/struphy?label=Release)](https://github.com/struphy-hub/struphy/releases)
6
+ [![License](https://img.shields.io/badge/License-MIT-violet)](https://github.com/struphy-hub/struphy/blob/devel/LICENSE)
7
+ [![badge](https://img.shields.io/badge/launch-tutorials-579ACA.svg?logo=data:image/png;base64,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)](https://mybinder.org/v2/gh/struphy-hub/struphy-tutorials/main)
8
+ [![Ubuntu latest](https://github.com/struphy-hub/struphy/actions/workflows/ubuntu-latest.yml/badge.svg)](https://github.com/struphy-hub/struphy/actions/workflows/ubuntu-latest.yml)
9
+ [![MacOS latest](https://github.com/struphy-hub/struphy/actions/workflows/macos-latest.yml/badge.svg)](https://github.com/struphy-hub/struphy/actions/workflows/macos-latest.yml)
10
+ [![isort and ruff](https://github.com/struphy-hub/struphy/actions/workflows/static_analysis.yml/badge.svg)](https://github.com/struphy-hub/struphy/actions/workflows/static_analysis.yml)
11
+ [![PyPI](https://img.shields.io/pypi/v/struphy?label=PyPI)](https://pypi.org/project/struphy/)
12
+ [![PyPI Downloads](https://img.shields.io/pypi/dm/struphy.svg?label=PyPI%20downloads)](
13
+ https://pypi.org/project/struphy/)
14
+
15
+
16
+
17
+ # Welcome!
18
+
19
+ **This is a Python package for solving partial differential equations (PDEs) mainly - but not exclusively - for plasma physics.**
20
+
21
+ **STRUPHY** stands for **STRU**cture-**P**reserving **HY**brid code (or **STRU**cture-preserving **PHY**sics code). The package provides off-the-shelf models for plasma physics problems, such as
22
+
23
+ * Maxwell's equations
24
+ * Magneto-hydrodynamics (MHD)
25
+ * Vlasov-Poisson and Vlasov-Maxwell kinetic models
26
+ * Drift-kinetic models for strongly magnetized plasma
27
+ * MHD-kinetic hybrid models
28
+
29
+ All models can be run on multiple cores through MPI (distributed memory) and OpenMP (shared memory). The compute-intensive parts of the code are translated and compiled ("transpiled") using [pyccel](https://github.com/pyccel/pyccel), giving you the speed of Fortran or C while working within the familiar Python environment.
30
+
31
+ Particles in a Tokamak <br> (model "Vlasov") | Toroidal Alfvén eigenmode <br> (model "LinearMHDDriftKineticCC")
32
+ :-------------------------:|:-------------------------:
33
+ ![](https://raw.githubusercontent.com/struphy-hub/.github/refs/heads/main/profile/gallery_struphy_tracer6D.png) | ![](https://raw.githubusercontent.com/struphy-hub/.github/refs/heads/main/profile/gallery_frontpage_bk.png)
34
+ **Strong Landau damping <br>(model "VlasovAmpereOneSpecies")** | **Anisotropic diffusion <br> (propagator "ImplicitDiffusion")**
35
+ ![](https://raw.githubusercontent.com/struphy-hub/.github/refs/heads/main/profile/gallery_step_1496.png) | ![](https://raw.githubusercontent.com/struphy-hub/.github/refs/heads/main/profile/gallery_struphy_heat.png)
36
+
37
+
38
+ The code is freely available under an [MIT license](https://github.com/struphy-hub/struphy/blob/devel/LICENSE) - Copyright (c) 2019-2025, Struphy developers, Max Planck Institute for Plasma Physics.
39
+
40
+ <h1 align="center">
41
+ <img src="https://raw.githubusercontent.com/struphy-hub/.github/refs/heads/main/profile/MPI_PP_Logo_Vertical_E_green_rgb.png" width="200">
42
+ </h1>
43
+
44
+ ## Tutorials
45
+
46
+ Get familiar with Struphy right away on [mybinder](https://mybinder.org/v2/gh/struphy-hub/struphy-tutorials/main) - no installation needed.
47
+
48
+
49
+ ## Quick install
50
+
51
+ Quick install on your computer (using a virtual environment):
52
+
53
+ ```
54
+ python -m venv struphy_env
55
+ source struphy_env/bin/activate
56
+ pip install -U pip
57
+ pip install -U struphy
58
+ struphy compile
59
+ ```
60
+
61
+ In case you face troubles with install/compile:
62
+
63
+ 1. check the [prerequisites](https://struphy-hub.github.io/struphy/sections/install.html#requirements)
64
+ 2. visit [trouble shooting](https://struphy-hub.github.io/struphy/sections/install.html#trouble-shooting)
65
+
66
+
67
+ ## Quick run
68
+
69
+ As an example, let's say we want to solve Maxwell's equations. We can use the CLI and generate a default launch file via
70
+
71
+ ```
72
+ struphy params Maxwell
73
+ ```
74
+ Hit yes when prompted - this will create the file `params_Maxwell.py` in your current working directory (cwd). You can open the file and - if you feel like it already - change some parameters, then run
75
+
76
+ ```
77
+ python params_Maxwell.py
78
+ ```
79
+
80
+ The default output is in `sim_1/` in your cwd. You can change the output path via the class `EnvironmentOptions` in the parameter file.
81
+
82
+ Parallel simulations are run for example with
83
+
84
+ ```
85
+ pip install -U mpi4py
86
+ mpirun -n 4 python params_Maxwell.py
87
+ ```
88
+
89
+ You can also put the run command in a batch script.
90
+
91
+
92
+ ## Documentation
93
+
94
+ The doc is on [Github pages](https://struphy-hub.github.io/struphy/index.html), we recommend in particular to visit:
95
+
96
+ * [Install](https://struphy-hub.github.io/struphy/sections/install.html)
97
+ * [Userguide](https://struphy-hub.github.io/struphy/sections/userguide.html)
98
+ * [Available models](https://struphy-hub.github.io/struphy/sections/models.html)
99
+ * [Numerical methods](https://struphy-hub.github.io/struphy/sections/numerics.html)
100
+
101
+
102
+ ## Get in touch
103
+
104
+ * [Issues](https://github.com/struphy-hub/struphy/issues)
105
+ * [Discussions](https://github.com/struphy-hub/struphy/discussions)
106
+ * [@spossann](https://github.com/spossann) [stefan.possanner@ipp.mpg.de](mailto:spossann@ipp.mpg.de) (Maintainer)
107
+ * [@max-models](https://github.com/max-models) [max.lindqvist@ipp.mpg.de](mailto:Max.Lindqvist@ipp.mpg.de) (Maintainer)
108
+ * [LinkedIn profile](https://www.linkedin.com/company/struphy/)
109
+
110
+
111
+ ## Citing Struphy
112
+
113
+ * S. Possanner, F. Holderied, Y. Li, B.-K. Na, D. Bell, S. Hadjout and Y. Güçlü, [**High-Order Structure-Preserving Algorithms for Plasma Hybrid Models**](https://link.springer.com/chapter/10.1007/978-3-031-38299-4_28), International Conference on Geometric Science of Information 2023, 263-271, Springer Nature Switzerland.
114
+
@@ -6,12 +6,13 @@ build-backend = "setuptools.build_meta"
6
6
 
7
7
  [project]
8
8
  name = "struphy"
9
- version = "2.5.0"
9
+ version = "3.0.0"
10
10
  readme = "README.md"
11
11
  requires-python = ">=3.10"
12
12
  authors = [
13
13
  { name = "Max Planck Institute for Plasma Physics" },
14
14
  { email = "stefan.possanner@ipp.mpg.de" },
15
+ { email = "max.lindqvist@ipp.mpg.de" },
15
16
  { email = "eric.sonnendruecker@ipp.mpg.de" },
16
17
  ]
17
18
  description = "Multi-model plasma physics package"
@@ -23,6 +24,7 @@ classifiers = [
23
24
  ]
24
25
  dependencies = [
25
26
  "numpy<=2.2.6",
27
+ "cunumpy<=0.1",
26
28
  "pyccel<=2.0.1, >=2.0",
27
29
  "scipy<=1.15.3",
28
30
  "h5py<=3.14.0",
@@ -30,9 +32,10 @@ dependencies = [
30
32
  "pyyaml<=6.0.3",
31
33
  "vtk<=9.5.2",
32
34
  "tqdm<=4.67.1",
33
- "argcomplete<=3.6.2",
34
- "pytest<=8.4.2",
35
+ "argcomplete<=3.6.3",
36
+ "pytest<=9.0.1",
35
37
  "pytest-mpi<=0.6",
38
+ "line_profiler<=5.0.0",
36
39
  ]
37
40
 
38
41
  [project.license]
@@ -44,19 +47,20 @@ phys = [
44
47
  "desc-opt<=0.15.0",
45
48
  ]
46
49
  dev = [
50
+ "struphy[mpi]",
47
51
  "notebook<=7.4.7",
48
52
  "autopep8<=2.3.2",
49
- "isort<=6.0.1",
53
+ "isort<=7.0.0",
50
54
  "flake8<=7.3.0",
51
- "pylint<=3.3.8",
55
+ "pylint<=4.0.2",
52
56
  "ssort<=0.15.0",
53
- "add-trailing-comma<=3.2.0",
54
- "ruff<=0.13.2, >=0.9.1",
55
- "pre-commit<=4.3.0",
57
+ "add-trailing-comma<=4.0.0",
58
+ "ruff<=0.14.4, >=0.9.1",
59
+ "pre-commit<=4.4.0",
56
60
  "nbstripout<=0.8.1",
57
61
  "tabulate<=0.9.0",
58
62
  "tomli-w<=1.2.0",
59
- "kaleido<=1.1.0",
63
+ "kaleido<=1.2.0",
60
64
  "pandas<=2.3.3",
61
65
  "plotly<=6.3.0",
62
66
  ]
@@ -65,10 +69,14 @@ mpi = [
65
69
  ]
66
70
  doc = [
67
71
  "struphy[phys]",
72
+ "jupyter<=1.1.1",
73
+ "nbconvert<=6.5.4",
74
+ "ipykernel<=7.1.0",
68
75
  "sphinx<=8.1.3",
69
76
  "sphinx-design<=0.6.1",
70
77
  "lxml_html_clean<=0.4.3",
71
78
  "sphinxcontrib-napoleon<=0.7",
79
+ "sphinx-copybutton<=0.5.2",
72
80
  "pydata-sphinx-theme<=0.16.1",
73
81
  "nbsphinx<=0.9.7",
74
82
  "m2r2<=0.3.4",
@@ -89,11 +97,11 @@ all = [
89
97
  ]
90
98
 
91
99
  [project.urls]
92
- homepage = "https://struphy.pages.mpcdf.de/struphy/"
93
- documentation = "https://struphy.pages.mpcdf.de/struphy/"
94
- repository = "https://gitlab.mpcdf.mpg.de/struphy/struphy"
95
- changelog = "https://gitlab.mpcdf.mpg.de/struphy/struphy/-/blob/devel/CHANGELOG.md"
96
- "Bug Tracker" = "https://gitlab.mpcdf.mpg.de/struphy/struphy/-/issues"
100
+ homepage = "https://struphy-hub.github.io/struphy/index.html"
101
+ documentation = "https://struphy-hub.github.io/struphy/index.html"
102
+ repository = "https://github.com/struphy-hub/struphy"
103
+ changelog = "https://github.com/struphy-hub/struphy/blob/devel/CHANGELOG.md"
104
+ "Bug Tracker" = "https://github.com/struphy-hub/struphy/issues"
97
105
 
98
106
  [project.scripts]
99
107
  struphy = "struphy.console.main:struphy"
@@ -124,7 +132,7 @@ kinetic-diagnostics = "struphy.diagnostics.console_diagn:main"
124
132
  ]
125
133
  struphy = [
126
134
  "compile_struphy.mk",
127
- "psydac-2.5.0.dev0-py3-none-any.whl",
135
+ "psydac-3.0.0.dev0-py3-none-any.whl",
128
136
  ]
129
137
 
130
138
  [tool.autopep8]
@@ -136,14 +144,9 @@ ignore = [
136
144
  [tool.isort]
137
145
  profile = "black"
138
146
  line_length = 120
139
- multi_line_output = 3
140
- include_trailing_comma = true
141
- force_grid_wrap = 0
142
- combine_as_imports = true
143
147
 
144
148
  [tool.pylint]
145
149
  max-line-length = 120
146
- quote-style = "single"
147
150
 
148
151
  [tool.ruff]
149
152
  line-length = 120
@@ -164,4 +167,15 @@ ignore = [
164
167
  "F405",
165
168
  "D211",
166
169
  "D213",
170
+ "F841",
171
+ ]
172
+
173
+ [tool.pytest.ini_options]
174
+ markers = [
175
+ "models",
176
+ "toy",
177
+ "fluid",
178
+ "kinetic",
179
+ "hybrid",
180
+ "single",
167
181
  ]
@@ -0,0 +1,77 @@
1
+ import importlib
2
+ import importlib.metadata
3
+ import os
4
+ import re
5
+ import subprocess
6
+ import sys
7
+
8
+
9
+ def _install_psydac_if_needed():
10
+ # Current directory is libpathe root of the project
11
+ libpath = os.path.dirname(__file__)
12
+
13
+ # install psydac from wheel if not there
14
+ source_install = False
15
+ for req in importlib.metadata.distribution("struphy").requires:
16
+ if "psydac" in req:
17
+ source_install = True
18
+
19
+ # Get struphy version
20
+ struphy_ver = importlib.metadata.version("struphy")
21
+
22
+ # Check if psydac is installed
23
+ try:
24
+ import psydac
25
+
26
+ psydac_ver = importlib.metadata.version("psydac")
27
+ psydac_installed = True
28
+ except ModuleNotFoundError:
29
+ psydac_ver = None
30
+ psydac_installed = False
31
+
32
+ if source_install:
33
+ # If we are installing psydac from Github
34
+ if psydac_installed:
35
+ # only install (from .whl) if psydac not up-to-date
36
+ if psydac_ver < struphy_ver:
37
+ print(
38
+ f"You have psydac version {psydac_ver}, but version {struphy_ver} is available. Please re-install struphy (e.g. pip install .)\n",
39
+ )
40
+ sys.exit(1)
41
+ else:
42
+ print("Psydac is not installed. To install it, please re-install struphy (e.g. pip install .)\n")
43
+ sys.exit(1)
44
+ else:
45
+ # If we are installing psydac from a wheel
46
+ install_psydac = False
47
+ if psydac_installed:
48
+ # only install (from .whl) if psydac not up-to-date
49
+ if ".".join(psydac_ver.split(".")[:3]) != ".".join(struphy_ver.split(".")[:3]):
50
+ print(f"You have psydac version {psydac_ver}, but version {struphy_ver} is required.\n")
51
+ install_psydac = True
52
+ else:
53
+ install_psydac = True
54
+
55
+ if install_psydac:
56
+ psydac_file = None
57
+ for filename in os.listdir(libpath):
58
+ if re.match("psydac-", filename):
59
+ psydac_file = filename
60
+ if psydac_file is None:
61
+ raise FileNotFoundError("No psydac wheel file found.")
62
+
63
+ # Uninstall psydac
64
+ subprocess.run(["pip", "uninstall", "-y", "psydac"], check=True)
65
+
66
+ # Install psydac
67
+ print("\nInstalling Psydac ...")
68
+ cmd = [
69
+ "pip",
70
+ "install",
71
+ os.path.join(libpath, psydac_file),
72
+ ]
73
+ subprocess.run(cmd, check=True)
74
+
75
+
76
+ # Run on import
77
+ _install_psydac_if_needed()