struphy 2.4.5__tar.gz → 2.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 (409) hide show
  1. struphy-2.6.0/PKG-INFO +208 -0
  2. struphy-2.6.0/README.md +114 -0
  3. {struphy-2.4.5 → struphy-2.6.0}/pyproject.toml +51 -33
  4. struphy-2.6.0/src/struphy/__init__.py +77 -0
  5. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/bsplines/bsplines.py +164 -149
  6. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/bsplines/bsplines_kernels.py +14 -2
  7. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/bsplines/evaluation_kernels_1d.py +6 -1
  8. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/bsplines/evaluation_kernels_3d.py +269 -24
  9. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/bsplines/tests/test_bsplines_kernels.py +26 -28
  10. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/bsplines/tests/test_eval_spline_mpi.py +87 -92
  11. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/compile_struphy.mk +1 -1
  12. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/conftest.py +6 -10
  13. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/console/compile.py +15 -59
  14. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/console/format.py +703 -591
  15. struphy-2.6.0/src/struphy/console/main.py +746 -0
  16. struphy-2.6.0/src/struphy/console/params.py +49 -0
  17. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/console/profile.py +8 -8
  18. struphy-2.6.0/src/struphy/console/test.py +148 -0
  19. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/console/tests/test_console.py +20 -245
  20. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/dependencies.py +32 -32
  21. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/diagnostics/console_diagn.py +3 -3
  22. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/diagnostics/continuous_spectra.py +23 -18
  23. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/diagnostics/diagn_tools.py +147 -89
  24. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/diagnostics/paraview/mesh_creator.py +39 -35
  25. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/diagnostics/paraview/vtk_writer.py +10 -9
  26. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/dispersion_relations/analytic.py +54 -46
  27. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/dispersion_relations/base.py +5 -5
  28. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/dispersion_relations/utilities.py +6 -5
  29. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/derivatives.py +62 -69
  30. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/kernels_projectors_global.py +349 -227
  31. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/legacy/MHD_eigenvalues_cylinder_1D.py +214 -203
  32. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/legacy/control_variates/control_variate.py +25 -25
  33. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/legacy/control_variates/kinetic_extended/fB_massless_control_variate.py +8 -8
  34. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/legacy/control_variates/kinetic_extended/fB_massless_kernels_control_variate.py +39 -3
  35. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/legacy/control_variates/kinetic_extended/fnB_massless_control_variate.py +9 -9
  36. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/legacy/control_variates/kinetic_extended/fnB_massless_kernels_control_variate.py +52 -4
  37. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/legacy/control_variates/kinetic_extended/massless_control_variate.py +7 -7
  38. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/legacy/control_variates/kinetic_extended/massless_kernels_control_variate.py +114 -15
  39. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/legacy/emw_operators.py +8 -6
  40. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/legacy/inner_products_1d.py +5 -5
  41. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/legacy/inner_products_2d.py +19 -19
  42. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/legacy/inner_products_3d.py +19 -19
  43. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/legacy/l2_error_1d.py +5 -5
  44. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/legacy/l2_error_2d.py +25 -25
  45. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/legacy/l2_error_3d.py +25 -25
  46. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/legacy/mass_matrices_3d_pre.py +49 -79
  47. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/legacy/massless_operators/fB_arrays.py +110 -110
  48. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/legacy/massless_operators/fB_bv_kernel.py +18 -6
  49. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/legacy/massless_operators/fB_massless_linear_operators.py +70 -65
  50. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/legacy/massless_operators/fB_vv_kernel.py +5 -3
  51. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/legacy/mhd_operators_MF.py +113 -113
  52. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/legacy/projectors_local/pro_local/mhd_operators_3d_local.py +354 -334
  53. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/legacy/projectors_local/pro_local/projectors_local.py +356 -330
  54. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/legacy/projectors_local/shape_pro_local/shape_L2_projector_kernel.py +36 -18
  55. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/legacy/projectors_local/shape_pro_local/shape_function_projectors_L2.py +96 -89
  56. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/legacy/projectors_local/shape_pro_local/shape_function_projectors_local.py +150 -141
  57. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/legacy/projectors_local/shape_pro_local/shape_local_projector_kernel.py +94 -47
  58. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/mass_matrices_1d.py +106 -113
  59. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/mass_matrices_2d.py +308 -229
  60. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/mass_matrices_3d.py +349 -224
  61. struphy-2.6.0/src/struphy/eigenvalue_solvers/mhd_axisymmetric_main.py +267 -0
  62. struphy-2.6.0/src/struphy/eigenvalue_solvers/mhd_axisymmetric_pproc.py +73 -0
  63. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/mhd_operators.py +600 -590
  64. struphy-2.6.0/src/struphy/eigenvalue_solvers/mhd_operators_core.py +2009 -0
  65. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/projectors_global.py +551 -636
  66. struphy-2.6.0/src/struphy/eigenvalue_solvers/spline_space.py +3284 -0
  67. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/examples/_draw_parallel.py +7 -7
  68. struphy-2.6.0/src/struphy/examples/restelli2018/callables.py +300 -0
  69. struphy-2.6.0/src/struphy/feec/banded_to_stencil_kernels.py +55 -0
  70. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/feec/basis_projection_kernels.py +2 -2
  71. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/feec/basis_projection_ops.py +74 -49
  72. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/feec/linear_operators.py +105 -107
  73. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/feec/local_projectors_kernels.py +42 -28
  74. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/feec/mass.py +255 -66
  75. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/feec/mass_kernels.py +324 -168
  76. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/feec/preconditioner.py +27 -29
  77. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/feec/projectors.py +99 -86
  78. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/feec/psydac_derham.py +407 -325
  79. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/feec/tests/test_basis_ops.py +46 -40
  80. struphy-2.6.0/src/struphy/feec/tests/test_derham.py +262 -0
  81. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/feec/tests/test_eval_field.py +147 -138
  82. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/feec/tests/test_field_init.py +200 -204
  83. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/feec/tests/test_l2_projectors.py +35 -33
  84. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/feec/tests/test_local_projectors.py +195 -226
  85. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/feec/tests/test_lowdim_nel_is_1.py +36 -38
  86. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/feec/tests/test_mass_matrices.py +115 -82
  87. struphy-2.6.0/src/struphy/feec/tests/test_toarray_struphy.py +124 -0
  88. struphy-2.6.0/src/struphy/feec/tests/test_tosparse_struphy.py +141 -0
  89. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/feec/tests/xx_test_preconds.py +8 -8
  90. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/feec/utilities.py +27 -22
  91. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/feec/utilities_kernels.py +2 -2
  92. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/feec/utilities_local_projectors.py +70 -57
  93. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/feec/variational_utilities.py +78 -65
  94. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/fields_background/base.py +84 -68
  95. struphy-2.6.0/src/struphy/fields_background/coil_fields/base.py +128 -0
  96. struphy-2.6.0/src/struphy/fields_background/coil_fields/coil_fields.py +88 -0
  97. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/fields_background/equils.py +436 -363
  98. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/fields_background/generic.py +8 -0
  99. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/fields_background/mhd_equil/eqdsk/readeqdsk.py +5 -1
  100. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/fields_background/projected_equils.py +5 -2
  101. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/fields_background/tests/test_desc_equil.py +40 -40
  102. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/fields_background/tests/test_generic_equils.py +14 -14
  103. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/fields_background/tests/test_mhd_equils.py +41 -42
  104. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/fields_background/tests/test_numerical_mhd_equil.py +36 -36
  105. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/geometry/base.py +289 -436
  106. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/geometry/domains.py +238 -566
  107. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/geometry/evaluation_kernels.py +15 -15
  108. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/geometry/mappings_kernels.py +173 -23
  109. struphy-2.6.0/src/struphy/geometry/tests/test_domain.py +928 -0
  110. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/geometry/transform_kernels.py +23 -5
  111. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/geometry/utilities.py +53 -39
  112. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/geometry/utilities_kernels.py +40 -42
  113. struphy-2.6.0/src/struphy/initial/base.py +47 -0
  114. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/initial/eigenfunctions.py +26 -23
  115. struphy-2.6.0/src/struphy/initial/perturbations.py +2321 -0
  116. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/initial/tests/test_init_perturbations.py +113 -89
  117. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/initial/utilities.py +2 -2
  118. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/io/inp/parameters.yml +3 -3
  119. struphy-2.6.0/src/struphy/io/inp/params_Maxwell.py +63 -0
  120. struphy-2.6.0/src/struphy/io/inp/params_Maxwell_lw.py +66 -0
  121. struphy-2.6.0/src/struphy/io/inp/verification/Maxwell_coaxial.py +60 -0
  122. struphy-2.6.0/src/struphy/io/inp/verification/Maxwell_coaxial.yml +73 -0
  123. struphy-2.6.0/src/struphy/io/options.py +363 -0
  124. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/io/output_handling.py +32 -40
  125. struphy-2.6.0/src/struphy/io/setup.py +333 -0
  126. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/kinetic_background/base.py +100 -314
  127. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/kinetic_background/maxwellians.py +258 -127
  128. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/kinetic_background/moment_functions.py +3 -3
  129. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/kinetic_background/tests/test_base.py +31 -36
  130. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/kinetic_background/tests/test_maxwellians.py +456 -384
  131. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/linear_algebra/linalg_kron.py +94 -82
  132. struphy-2.6.0/src/struphy/linear_algebra/saddle_point.py +568 -0
  133. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/linear_algebra/schur_solver.py +18 -4
  134. struphy-2.6.0/src/struphy/linear_algebra/solver.py +37 -0
  135. struphy-2.6.0/src/struphy/linear_algebra/stencil_dot_kernels.py +187 -0
  136. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/linear_algebra/stencil_transpose_kernels.py +136 -142
  137. struphy-2.6.0/src/struphy/linear_algebra/tests/test_saddle_point_propagator.py +453 -0
  138. struphy-2.6.0/src/struphy/linear_algebra/tests/test_saddlepoint_massmatrices.py +412 -0
  139. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/linear_algebra/tests/test_stencil_dot_kernels.py +20 -24
  140. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/linear_algebra/tests/test_stencil_transpose_kernels.py +17 -21
  141. struphy-2.6.0/src/struphy/main.py +987 -0
  142. struphy-2.6.0/src/struphy/models/__init__.py +74 -0
  143. struphy-2.6.0/src/struphy/models/base.py +1799 -0
  144. struphy-2.6.0/src/struphy/models/fluid.py +2434 -0
  145. struphy-2.6.0/src/struphy/models/hybrid.py +1012 -0
  146. struphy-2.6.0/src/struphy/models/kinetic.py +1096 -0
  147. struphy-2.6.0/src/struphy/models/species.py +212 -0
  148. struphy-2.6.0/src/struphy/models/tests/test_models.py +176 -0
  149. struphy-2.6.0/src/struphy/models/tests/test_verif_EulerSPH.py +166 -0
  150. struphy-2.6.0/src/struphy/models/tests/test_verif_LinearMHD.py +154 -0
  151. struphy-2.6.0/src/struphy/models/tests/test_verif_Maxwell.py +275 -0
  152. struphy-2.6.0/src/struphy/models/tests/test_verif_Poisson.py +149 -0
  153. struphy-2.6.0/src/struphy/models/tests/test_verif_VlasovAmpereOneSpecies.py +167 -0
  154. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/models/tests/test_xxpproc.py +6 -6
  155. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/models/tests/util.py +1 -1
  156. struphy-2.6.0/src/struphy/models/tests/verification.py +373 -0
  157. struphy-2.6.0/src/struphy/models/toy.py +1227 -0
  158. struphy-2.6.0/src/struphy/models/variables.py +425 -0
  159. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/ode/solvers.py +3 -9
  160. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/ode/tests/test_ode_feec.py +26 -23
  161. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/ode/utils.py +29 -26
  162. struphy-2.6.0/src/struphy/physics/physics.py +11 -0
  163. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/pic/accumulation/accum_kernels.py +97 -152
  164. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/pic/accumulation/accum_kernels_gc.py +695 -229
  165. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/pic/accumulation/filler_kernels.py +214 -27
  166. struphy-2.6.0/src/struphy/pic/accumulation/filter.py +185 -0
  167. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/pic/accumulation/filter_kernels.py +40 -26
  168. struphy-2.6.0/src/struphy/pic/accumulation/particle_to_mat_kernels.py +13260 -0
  169. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/pic/accumulation/particles_to_grid.py +62 -135
  170. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/pic/base.py +1363 -866
  171. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/pic/particles.py +102 -113
  172. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/pic/pushing/eval_kernels_gc.py +419 -5
  173. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/pic/pushing/pusher.py +36 -33
  174. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/pic/pushing/pusher_kernels.py +216 -493
  175. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/pic/pushing/pusher_kernels_gc.py +407 -102
  176. struphy-2.6.0/src/struphy/pic/pushing/pusher_utilities_kernels.py +79 -0
  177. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/pic/sampling_kernels.py +3 -3
  178. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/pic/sobol_seq.py +304 -101
  179. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/pic/sorting_kernels.py +93 -42
  180. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/pic/sph_eval_kernels.py +56 -24
  181. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/pic/tests/test_accum_vec_H1.py +60 -40
  182. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/pic/tests/test_accumulation.py +44 -32
  183. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/pic/tests/test_binning.py +294 -303
  184. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/pic/tests/test_draw_parallel.py +14 -16
  185. struphy-2.6.0/src/struphy/pic/tests/test_mat_vec_filler.py +425 -0
  186. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/pic/tests/test_pic_legacy_files/accumulation.py +23 -21
  187. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/pic/tests/test_pic_legacy_files/accumulation_kernels_3d.py +174 -18
  188. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/pic/tests/test_pic_legacy_files/mappings_3d.py +194 -18
  189. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/pic/tests/test_pic_legacy_files/mappings_3d_fast.py +279 -26
  190. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/pic/tests/test_pic_legacy_files/pusher.py +1 -1
  191. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/pic/tests/test_pic_legacy_files/pusher_pos.py +1170 -87
  192. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/pic/tests/test_pic_legacy_files/pusher_vel_2d.py +180 -20
  193. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/pic/tests/test_pic_legacy_files/pusher_vel_3d.py +273 -21
  194. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/pic/tests/test_pic_legacy_files/spline_evaluation_2d.py +1 -1
  195. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/pic/tests/test_pic_legacy_files/spline_evaluation_3d.py +248 -20
  196. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/pic/tests/test_pushers.py +87 -87
  197. struphy-2.6.0/src/struphy/pic/tests/test_sorting.py +156 -0
  198. struphy-2.6.0/src/struphy/pic/tests/test_sph.py +959 -0
  199. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/pic/tests/test_tesselation.py +36 -45
  200. struphy-2.6.0/src/struphy/pic/utilities.py +310 -0
  201. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/pic/utilities_kernels.py +132 -155
  202. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/polar/basic.py +10 -10
  203. struphy-2.6.0/src/struphy/polar/extraction_operators.py +1253 -0
  204. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/polar/linear_operators.py +89 -120
  205. struphy-2.6.0/src/struphy/polar/tests/test_legacy_polar_splines.py +169 -0
  206. struphy-2.6.0/src/struphy/polar/tests/test_polar.py +430 -0
  207. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/post_processing/likwid/plot_likwidproject.py +6 -6
  208. struphy-2.6.0/src/struphy/post_processing/likwid/plot_time_traces.py +412 -0
  209. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/post_processing/likwid/roofline_plotter.py +6 -6
  210. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/post_processing/orbits/orbits_tools.py +48 -47
  211. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/post_processing/post_processing_tools.py +378 -274
  212. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/post_processing/pproc_struphy.py +48 -89
  213. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/post_processing/profile_struphy.py +5 -5
  214. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/profiling/profiling.py +26 -17
  215. struphy-2.6.0/src/struphy/propagators/__init__.py +98 -0
  216. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/propagators/base.py +112 -106
  217. struphy-2.6.0/src/struphy/propagators/propagators_coupling.py +2181 -0
  218. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/propagators/propagators_fields.py +3513 -2156
  219. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/propagators/propagators_markers.py +941 -505
  220. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/propagators/tests/test_gyrokinetic_poisson.py +220 -142
  221. struphy-2.6.0/src/struphy/propagators/tests/test_poisson.py +681 -0
  222. struphy-2.6.0/src/struphy/psydac-2.6.0.dev0-py3-none-any.whl +0 -0
  223. struphy-2.6.0/src/struphy/topology/__init__.py +0 -0
  224. struphy-2.6.0/src/struphy/topology/grids.py +21 -0
  225. struphy-2.6.0/src/struphy/utils/__init__.py +0 -0
  226. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/utils/clone_config.py +34 -21
  227. struphy-2.6.0/src/struphy/utils/cupy_vs_numpy.py +27 -0
  228. struphy-2.6.0/src/struphy/utils/pyccel.py +25 -0
  229. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/utils/test_clone_config.py +11 -6
  230. struphy-2.6.0/src/struphy/utils/utils.py +207 -0
  231. struphy-2.6.0/src/struphy.egg-info/PKG-INFO +208 -0
  232. {struphy-2.4.5 → struphy-2.6.0}/src/struphy.egg-info/SOURCES.txt +34 -12
  233. struphy-2.6.0/src/struphy.egg-info/requires.txt +66 -0
  234. struphy-2.4.5/PKG-INFO +0 -139
  235. struphy-2.4.5/README.md +0 -55
  236. struphy-2.4.5/src/struphy/console/main.py +0 -1311
  237. struphy-2.4.5/src/struphy/console/params.py +0 -34
  238. struphy-2.4.5/src/struphy/console/pproc.py +0 -83
  239. struphy-2.4.5/src/struphy/console/run.py +0 -320
  240. struphy-2.4.5/src/struphy/console/test.py +0 -186
  241. struphy-2.4.5/src/struphy/console/units.py +0 -49
  242. struphy-2.4.5/src/struphy/eigenvalue_solvers/mhd_axisymmetric_main.py +0 -256
  243. struphy-2.4.5/src/struphy/eigenvalue_solvers/mhd_axisymmetric_pproc.py +0 -71
  244. struphy-2.4.5/src/struphy/eigenvalue_solvers/mhd_operators_core.py +0 -1075
  245. struphy-2.4.5/src/struphy/eigenvalue_solvers/spline_space.py +0 -2281
  246. struphy-2.4.5/src/struphy/feec/banded_to_stencil_kernels.py +0 -59
  247. struphy-2.4.5/src/struphy/feec/tests/test_derham.py +0 -243
  248. struphy-2.4.5/src/struphy/feec/tests/test_toarray_struphy.py +0 -116
  249. struphy-2.4.5/src/struphy/feec/tests/test_tosparse_struphy.py +0 -112
  250. struphy-2.4.5/src/struphy/geometry/tests/test_domain.py +0 -907
  251. struphy-2.4.5/src/struphy/initial/perturbations.py +0 -749
  252. struphy-2.4.5/src/struphy/io/setup.py +0 -632
  253. struphy-2.4.5/src/struphy/linear_algebra/stencil_dot_kernels.py +0 -225
  254. struphy-2.4.5/src/struphy/main.py +0 -481
  255. struphy-2.4.5/src/struphy/models/base.py +0 -2276
  256. struphy-2.4.5/src/struphy/models/fluid.py +0 -2429
  257. struphy-2.4.5/src/struphy/models/hybrid.py +0 -1215
  258. struphy-2.4.5/src/struphy/models/kinetic.py +0 -1243
  259. struphy-2.4.5/src/struphy/models/tests/test_fluid_models.py +0 -28
  260. struphy-2.4.5/src/struphy/models/tests/test_hybrid_models.py +0 -28
  261. struphy-2.4.5/src/struphy/models/tests/test_kinetic_models.py +0 -28
  262. struphy-2.4.5/src/struphy/models/tests/test_toy_models.py +0 -28
  263. struphy-2.4.5/src/struphy/models/tests/verification.py +0 -239
  264. struphy-2.4.5/src/struphy/models/toy.py +0 -1179
  265. struphy-2.4.5/src/struphy/pic/accumulation/particle_to_mat_kernels.py +0 -6078
  266. struphy-2.4.5/src/struphy/pic/pushing/pusher_utilities_kernels.py +0 -538
  267. struphy-2.4.5/src/struphy/pic/tests/test_mat_vec_filler.py +0 -457
  268. struphy-2.4.5/src/struphy/pic/tests/test_sorting.py +0 -96
  269. struphy-2.4.5/src/struphy/pic/tests/test_sph.py +0 -158
  270. struphy-2.4.5/src/struphy/pic/utilities.py +0 -77
  271. struphy-2.4.5/src/struphy/polar/extraction_operators.py +0 -1275
  272. struphy-2.4.5/src/struphy/polar/tests/test_legacy_polar_splines.py +0 -135
  273. struphy-2.4.5/src/struphy/polar/tests/test_polar.py +0 -454
  274. struphy-2.4.5/src/struphy/post_processing/likwid/plot_time_traces.py +0 -189
  275. struphy-2.4.5/src/struphy/propagators/propagators_coupling.py +0 -1875
  276. struphy-2.4.5/src/struphy/propagators/tests/test_poisson.py +0 -429
  277. struphy-2.4.5/src/struphy/psydac-2.4.5.dev0-py3-none-any.whl +0 -0
  278. struphy-2.4.5/src/struphy/tutorials/tests/test_tutorials.py +0 -175
  279. struphy-2.4.5/src/struphy/utils/set_release_dependencies.py +0 -76
  280. struphy-2.4.5/src/struphy/utils/utils.py +0 -102
  281. struphy-2.4.5/src/struphy.egg-info/PKG-INFO +0 -139
  282. struphy-2.4.5/src/struphy.egg-info/requires.txt +0 -55
  283. {struphy-2.4.5 → struphy-2.6.0}/LICENSE +0 -0
  284. {struphy-2.4.5 → struphy-2.6.0}/setup.cfg +0 -0
  285. {struphy-2.4.5/src/struphy → struphy-2.6.0/src/struphy/bsplines}/__init__.py +0 -0
  286. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/bsplines/evaluation_kernels_2d.py +0 -0
  287. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/bsplines/shapefunc_kernels.py +0 -0
  288. {struphy-2.4.5/src/struphy/bsplines → struphy-2.6.0/src/struphy/bsplines/tests}/__init__.py +0 -0
  289. {struphy-2.4.5/src/struphy/bsplines/tests → struphy-2.6.0/src/struphy/console}/__init__.py +0 -0
  290. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/console/likwid.py +0 -0
  291. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/console/parsers.py +0 -0
  292. {struphy-2.4.5/src/struphy/console → struphy-2.6.0/src/struphy/diagnostics}/__init__.py +0 -0
  293. {struphy-2.4.5/src/struphy/diagnostics → struphy-2.6.0/src/struphy/diagnostics/paraview}/__init__.py +0 -0
  294. {struphy-2.4.5/src/struphy/diagnostics/paraview → struphy-2.6.0/src/struphy/dispersion_relations}/__init__.py +0 -0
  295. {struphy-2.4.5/src/struphy/dispersion_relations → struphy-2.6.0/src/struphy/eigenvalue_solvers}/__init__.py +0 -0
  296. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/kernels_2d.py +0 -0
  297. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/kernels_3d.py +0 -0
  298. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/kernels_projectors_global_mhd.py +0 -0
  299. {struphy-2.4.5/src/struphy/eigenvalue_solvers → struphy-2.6.0/src/struphy/eigenvalue_solvers/legacy}/__init__.py +0 -0
  300. {struphy-2.4.5/src/struphy/eigenvalue_solvers/legacy → struphy-2.6.0/src/struphy/eigenvalue_solvers/legacy/control_variates}/__init__.py +0 -0
  301. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/legacy/control_variates/kernels_control_variate.py +0 -0
  302. {struphy-2.4.5/src/struphy/eigenvalue_solvers/legacy/control_variates → struphy-2.6.0/src/struphy/eigenvalue_solvers/legacy/control_variates/kinetic_extended}/__init__.py +0 -0
  303. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/legacy/control_variates/kinetic_extended/fnB_massless_cv_kernel_2.py +0 -0
  304. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/legacy/control_variates/kinetic_extended/massless_cvker.py +0 -0
  305. {struphy-2.4.5/src/struphy/eigenvalue_solvers/legacy/control_variates/kinetic_extended → struphy-2.6.0/src/struphy/eigenvalue_solvers/legacy/massless_operators}/__init__.py +0 -0
  306. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/legacy/massless_operators/fB_bb_kernel.py +0 -0
  307. {struphy-2.4.5/src/struphy/eigenvalue_solvers/legacy/massless_operators → struphy-2.6.0/src/struphy/eigenvalue_solvers/legacy/projectors_local}/__init__.py +0 -0
  308. {struphy-2.4.5/src/struphy/eigenvalue_solvers/legacy/projectors_local → struphy-2.6.0/src/struphy/eigenvalue_solvers/legacy/projectors_local/pro_local}/__init__.py +0 -0
  309. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/legacy/projectors_local/pro_local/kernels_projectors_local.py +0 -0
  310. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/eigenvalue_solvers/legacy/projectors_local/pro_local/kernels_projectors_local_mhd.py +0 -0
  311. {struphy-2.4.5/src/struphy/eigenvalue_solvers/legacy/projectors_local/pro_local → struphy-2.6.0/src/struphy/eigenvalue_solvers/legacy/projectors_local/shape_pro_local}/__init__.py +0 -0
  312. {struphy-2.4.5/src/struphy/eigenvalue_solvers/legacy/projectors_local/shape_pro_local → struphy-2.6.0/src/struphy/eigenvalue_solvers/tests}/__init__.py +0 -0
  313. {struphy-2.4.5/src/struphy/eigenvalue_solvers/tests → struphy-2.6.0/src/struphy/examples/restelli2018}/__init__.py +0 -0
  314. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/feec/__init__.py +0 -0
  315. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/feec/tests/__init__.py +0 -0
  316. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/fields_background/__init__.py +0 -0
  317. {struphy-2.4.5/src/struphy/fields_background/mhd_equil → struphy-2.6.0/src/struphy/fields_background/coil_fields}/__init__.py +0 -0
  318. {struphy-2.4.5/src/struphy/fields_background/mhd_equil/eqdsk → struphy-2.6.0/src/struphy/fields_background/mhd_equil}/__init__.py +0 -0
  319. {struphy-2.4.5/src/struphy/fields_background/mhd_equil/eqdsk/data → struphy-2.6.0/src/struphy/fields_background/mhd_equil/eqdsk}/__init__.py +0 -0
  320. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/fields_background/mhd_equil/eqdsk/data/AUGNLED_g031213.00830.high +0 -0
  321. {struphy-2.4.5/src/struphy/fields_background/mhd_equil/gvec → struphy-2.6.0/src/struphy/fields_background/mhd_equil/eqdsk/data}/__init__.py +0 -0
  322. {struphy-2.4.5/src/struphy/fields_background/mhd_equil/gvec/output → struphy-2.6.0/src/struphy/fields_background/mhd_equil/gvec}/__init__.py +0 -0
  323. {struphy-2.4.5/src/struphy/fields_background/mhd_equil/gvec/output/vtk → struphy-2.6.0/src/struphy/fields_background/mhd_equil/gvec/output}/__init__.py +0 -0
  324. {struphy-2.4.5/src/struphy/fields_background/mhd_equil/vmec → struphy-2.6.0/src/struphy/fields_background/mhd_equil/gvec/output/vtk}/__init__.py +0 -0
  325. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/fields_background/mhd_equil/gvec/run_01/CIRCTOK_State_0000_00000000.dat +0 -0
  326. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/fields_background/mhd_equil/gvec/run_01/CIRCTOK_State_0000_00001000.dat +0 -0
  327. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/fields_background/mhd_equil/gvec/run_01/parameter.ini +0 -0
  328. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/fields_background/mhd_equil/gvec/run_02/W7X_State_0000_00000000.dat +0 -0
  329. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/fields_background/mhd_equil/gvec/run_02/W7X_State_0000_00000100.dat +0 -0
  330. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/fields_background/mhd_equil/gvec/run_02/parameter-w7x.ini +0 -0
  331. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/fields_background/mhd_equil/gvec/run_03/NEO-SPITZER_State_0000_00000000.dat +0 -0
  332. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/fields_background/mhd_equil/gvec/run_03/NEO-SPITZER_State_0000_00003307.dat +0 -0
  333. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/fields_background/mhd_equil/gvec/run_03/Neo-spitzer-mirror23-well-opt-1-AR10-1.nc +0 -0
  334. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/fields_background/mhd_equil/gvec/run_03/parameter-fig8.ini +0 -0
  335. {struphy-2.4.5/src/struphy/fields_background/tests → struphy-2.6.0/src/struphy/fields_background/mhd_equil/vmec}/__init__.py +0 -0
  336. {struphy-2.4.5/src/struphy/geometry → struphy-2.6.0/src/struphy/fields_background/tests}/__init__.py +0 -0
  337. {struphy-2.4.5/src/struphy/geometry/map_coef → struphy-2.6.0/src/struphy/geometry}/__init__.py +0 -0
  338. {struphy-2.4.5/src/struphy/geometry/tests → struphy-2.6.0/src/struphy/geometry/map_coef}/__init__.py +0 -0
  339. {struphy-2.4.5/src/struphy/initial → struphy-2.6.0/src/struphy/geometry/tests}/__init__.py +0 -0
  340. {struphy-2.4.5/src/struphy/initial/tests → struphy-2.6.0/src/struphy/initial}/__init__.py +0 -0
  341. {struphy-2.4.5/src/struphy/io → struphy-2.6.0/src/struphy/initial/tests}/__init__.py +0 -0
  342. {struphy-2.4.5/src/struphy/io/inp → struphy-2.6.0/src/struphy/io}/__init__.py +0 -0
  343. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/io/batch/batch_cobra.sh +0 -0
  344. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/io/batch/p_016.sh +0 -0
  345. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/io/batch/p_032.sh +0 -0
  346. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/io/batch/p_064.sh +0 -0
  347. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/io/batch/p_128.sh +0 -0
  348. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/io/batch/p_256.sh +0 -0
  349. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/io/batch/p_512.sh +0 -0
  350. {struphy-2.4.5/src/struphy/io/inp/verification → struphy-2.6.0/src/struphy/io/inp}/__init__.py +0 -0
  351. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/io/inp/longer_examples/params_TAE_tokamak.yml +0 -0
  352. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/io/inp/longer_examples/params_hybridmhdvlasovcc.yml +0 -0
  353. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/io/inp/longer_examples/params_hybridmhdvlasovpc.yml +0 -0
  354. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/io/inp/longer_examples/params_linearextendedmhd.yml +0 -0
  355. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/io/inp/longer_examples/params_linvlasovmaxwell_landau.yml +0 -0
  356. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/io/inp/longer_examples/params_linvlasovmaxwell_streaming_weibel.yml +0 -0
  357. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/io/inp/longer_examples/params_linvlasovmaxwell_weibel.yml +0 -0
  358. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/io/inp/tutorials/params_02.yml +0 -0
  359. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/io/inp/tutorials/params_03.yml +0 -0
  360. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/io/inp/tutorials/params_04a.yml +0 -0
  361. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/io/inp/tutorials/params_04b.yml +0 -0
  362. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/io/inp/tutorials/params_04c.yml +0 -0
  363. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/io/inp/tutorials/params_05a.yml +0 -0
  364. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/io/inp/tutorials/params_05b.yml +0 -0
  365. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/io/inp/tutorials/params_05c.yml +0 -0
  366. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/io/inp/tutorials/params_05d.yml +0 -0
  367. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/io/inp/tutorials/params_05e.yml +0 -0
  368. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/io/inp/tutorials/params_05f.yml +0 -0
  369. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/io/inp/tutorials/params_12a.yml +0 -0
  370. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/io/inp/tutorials/params_12b.yml +0 -0
  371. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/io/inp/verification/IsothermalEulerSPH_soundwave.yml +0 -0
  372. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/io/inp/verification/LinearVlasovAmpereOneSpecies_weakLandau.yml +0 -0
  373. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/io/inp/verification/VlasovAmpereOneSpecies_weakLandau.yml +0 -0
  374. {struphy-2.4.5/src/struphy/io/out → struphy-2.6.0/src/struphy/io/inp/verification}/__init__.py +0 -0
  375. {struphy-2.4.5/src/struphy/kinetic_background → struphy-2.6.0/src/struphy/io/out}/__init__.py +0 -0
  376. {struphy-2.4.5/src/struphy/kinetic_background/tests → struphy-2.6.0/src/struphy/kernel_arguments}/__init__.py +0 -0
  377. {struphy-2.4.5/src/struphy/feec → struphy-2.6.0/src/struphy/kernel_arguments}/local_projectors_args_kernels.py +0 -0
  378. {struphy-2.4.5/src/struphy/pic/pushing → struphy-2.6.0/src/struphy/kernel_arguments}/pusher_args_kernels.py +0 -0
  379. {struphy-2.4.5/src/struphy/linear_algebra → struphy-2.6.0/src/struphy/kinetic_background}/__init__.py +0 -0
  380. {struphy-2.4.5/src/struphy/linear_algebra → struphy-2.6.0/src/struphy/kinetic_background}/tests/__init__.py +0 -0
  381. {struphy-2.4.5/src/struphy/models → struphy-2.6.0/src/struphy/linear_algebra}/__init__.py +0 -0
  382. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/linear_algebra/linalg_kernels.py +0 -0
  383. {struphy-2.4.5/src/struphy/models → struphy-2.6.0/src/struphy/linear_algebra}/tests/__init__.py +0 -0
  384. {struphy-2.4.5/src/struphy/ode → struphy-2.6.0/src/struphy/models/tests}/__init__.py +0 -0
  385. {struphy-2.4.5/src/struphy/ode/tests → struphy-2.6.0/src/struphy/ode}/__init__.py +0 -0
  386. {struphy-2.4.5/src/struphy/pic → struphy-2.6.0/src/struphy/ode/tests}/__init__.py +0 -0
  387. {struphy-2.4.5/src/struphy/pic/accumulation → struphy-2.6.0/src/struphy/physics}/__init__.py +0 -0
  388. {struphy-2.4.5/src/struphy/pic/pushing → struphy-2.6.0/src/struphy/pic}/__init__.py +0 -0
  389. {struphy-2.4.5/src/struphy/pic/tests → struphy-2.6.0/src/struphy/pic/accumulation}/__init__.py +0 -0
  390. {struphy-2.4.5/src/struphy/pic/tests/test_pic_legacy_files → struphy-2.6.0/src/struphy/pic/pushing}/__init__.py +0 -0
  391. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/pic/sph_smoothing_kernels.py +0 -0
  392. {struphy-2.4.5/src/struphy/polar → struphy-2.6.0/src/struphy/pic/tests}/__init__.py +0 -0
  393. {struphy-2.4.5/src/struphy/polar/tests → struphy-2.6.0/src/struphy/pic/tests/test_pic_legacy_files}/__init__.py +0 -0
  394. {struphy-2.4.5/src/struphy/post_processing → struphy-2.6.0/src/struphy/polar}/__init__.py +0 -0
  395. {struphy-2.4.5/src/struphy/post_processing/likwid → struphy-2.6.0/src/struphy/polar/tests}/__init__.py +0 -0
  396. {struphy-2.4.5/src/struphy/post_processing/orbits → struphy-2.6.0/src/struphy/post_processing}/__init__.py +0 -0
  397. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/post_processing/cprofile_analyser.py +0 -0
  398. {struphy-2.4.5/src/struphy/post_processing/tests → struphy-2.6.0/src/struphy/post_processing/likwid}/__init__.py +0 -0
  399. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/post_processing/likwid/hardware_dicts.py +0 -0
  400. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/post_processing/likwid/likwid_parser.py +0 -0
  401. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/post_processing/likwid/maxplotlylib.py +0 -0
  402. {struphy-2.4.5/src/struphy/profiling → struphy-2.6.0/src/struphy/post_processing/orbits}/__init__.py +0 -0
  403. {struphy-2.4.5 → struphy-2.6.0}/src/struphy/post_processing/orbits/orbits_kernels.py +0 -0
  404. {struphy-2.4.5/src/struphy/propagators → struphy-2.6.0/src/struphy/post_processing/tests}/__init__.py +0 -0
  405. {struphy-2.4.5/src/struphy/propagators/tests → struphy-2.6.0/src/struphy/profiling}/__init__.py +0 -0
  406. {struphy-2.4.5/src/struphy/utils → struphy-2.6.0/src/struphy/propagators/tests}/__init__.py +0 -0
  407. {struphy-2.4.5 → struphy-2.6.0}/src/struphy.egg-info/dependency_links.txt +0 -0
  408. {struphy-2.4.5 → struphy-2.6.0}/src/struphy.egg-info/entry_points.txt +0 -0
  409. {struphy-2.4.5 → struphy-2.6.0}/src/struphy.egg-info/top_level.txt +0 -0
struphy-2.6.0/PKG-INFO ADDED
@@ -0,0 +1,208 @@
1
+ Metadata-Version: 2.4
2
+ Name: struphy
3
+ Version: 2.6.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.4.5"
9
+ version = "2.6.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"
@@ -22,18 +23,19 @@ classifiers = [
22
23
  "Programming Language :: Python :: 3",
23
24
  ]
24
25
  dependencies = [
25
- "numpy<=2.2.5",
26
+ "numpy<=2.2.6",
27
+ "cunumpy<=0.1",
26
28
  "pyccel<=2.0.1, >=2.0",
27
- "mpi4py<=4.1.0",
28
29
  "scipy<=1.15.3",
29
- "h5py<=3.13.0",
30
- "matplotlib<=3.10.3",
31
- "pyyaml<=6.0.2",
32
- "vtk<=9.5.0",
30
+ "h5py<=3.14.0",
31
+ "matplotlib<=3.10.5",
32
+ "pyyaml<=6.0.3",
33
+ "vtk<=9.5.2",
33
34
  "tqdm<=4.67.1",
34
- "argcomplete<=3.6.2",
35
- "pytest<=8.4.1",
35
+ "argcomplete<=3.6.3",
36
+ "pytest<=9.0.1",
36
37
  "pytest-mpi<=0.6",
38
+ "line_profiler<=5.0.0",
37
39
  ]
38
40
 
39
41
  [project.license]
@@ -41,55 +43,65 @@ file = "LICENSE"
41
43
 
42
44
  [project.optional-dependencies]
43
45
  phys = [
44
- "gvec<=1.1.0, >=1.1.0",
45
- "desc-opt<=0.14.2",
46
+ "gvec<=1.2.0, >=1.1.0",
47
+ "desc-opt<=0.15.0",
46
48
  ]
47
49
  dev = [
48
- "notebook<=7.4.3",
50
+ "struphy[mpi]",
51
+ "notebook<=7.4.7",
49
52
  "autopep8<=2.3.2",
50
- "isort<=6.0.1",
53
+ "isort<=7.0.0",
51
54
  "flake8<=7.3.0",
52
- "pylint<=3.3.7",
53
- "add-trailing-comma<=3.2.0",
54
- "ruff<=0.12.1, >=0.9.1",
55
- "pre-commit<=4.2.0",
55
+ "pylint<=4.0.2",
56
+ "ssort<=0.15.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",
63
+ "kaleido<=1.2.0",
64
+ "pandas<=2.3.3",
65
+ "plotly<=6.3.0",
66
+ ]
67
+ mpi = [
68
+ "mpi4py<=4.1.1",
59
69
  ]
60
70
  doc = [
61
71
  "struphy[phys]",
72
+ "jupyter<=1.1.1",
73
+ "nbconvert<=6.5.4",
74
+ "ipykernel<=7.1.0",
62
75
  "sphinx<=8.1.3",
63
76
  "sphinx-design<=0.6.1",
64
- "lxml_html_clean<=0.4.2",
77
+ "lxml_html_clean<=0.4.3",
65
78
  "sphinxcontrib-napoleon<=0.7",
79
+ "sphinx-copybutton<=0.5.2",
66
80
  "pydata-sphinx-theme<=0.16.1",
67
81
  "nbsphinx<=0.9.7",
68
82
  "m2r2<=0.3.4",
69
83
  "myst-parser<=4.0.1",
70
84
  "mistune<=0.8.4",
71
85
  "docutils<=0.21.2",
72
- "ipyparallel<=9.0.1",
86
+ "ipyparallel<=9.0.2",
73
87
  ]
74
88
  likwid = [
75
89
  "struphy[dev]",
76
- "kaleido",
77
90
  "pylikwid",
78
- "pandas<=2.3.0",
79
- "plotly<=6.0.1",
80
91
  ]
81
92
  all = [
82
93
  "struphy[phys]",
83
94
  "struphy[dev]",
95
+ "struphy[mpi]",
84
96
  "struphy[doc]",
85
97
  ]
86
98
 
87
99
  [project.urls]
88
- homepage = "https://struphy.pages.mpcdf.de/struphy/"
89
- documentation = "https://struphy.pages.mpcdf.de/struphy/"
90
- repository = "https://gitlab.mpcdf.mpg.de/struphy/struphy"
91
- changelog = "https://gitlab.mpcdf.mpg.de/struphy/struphy/-/blob/devel/CHANGELOG.md"
92
- "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"
93
105
 
94
106
  [project.scripts]
95
107
  struphy = "struphy.console.main:struphy"
@@ -120,7 +132,7 @@ kinetic-diagnostics = "struphy.diagnostics.console_diagn:main"
120
132
  ]
121
133
  struphy = [
122
134
  "compile_struphy.mk",
123
- "psydac-2.4.5.dev0-py3-none-any.whl",
135
+ "psydac-2.6.0.dev0-py3-none-any.whl",
124
136
  ]
125
137
 
126
138
  [tool.autopep8]
@@ -132,14 +144,9 @@ ignore = [
132
144
  [tool.isort]
133
145
  profile = "black"
134
146
  line_length = 120
135
- multi_line_output = 3
136
- include_trailing_comma = true
137
- force_grid_wrap = 0
138
- combine_as_imports = true
139
147
 
140
148
  [tool.pylint]
141
149
  max-line-length = 120
142
- quote-style = "single"
143
150
 
144
151
  [tool.ruff]
145
152
  line-length = 120
@@ -160,4 +167,15 @@ ignore = [
160
167
  "F405",
161
168
  "D211",
162
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",
163
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()