struphy 3.0.4__tar.gz → 3.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (386) hide show
  1. struphy-3.2.0/PKG-INFO +254 -0
  2. struphy-3.2.0/README.md +149 -0
  3. {struphy-3.0.4 → struphy-3.2.0}/pyproject.toml +53 -46
  4. struphy-3.2.0/src/struphy/__init__.py +156 -0
  5. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/api/particles/__init__.py +4 -0
  6. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/api/simulation/__init__.py +3 -1
  7. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/bsplines/tests/test_bsplines_kers.py +58 -44
  8. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/bsplines/tests/test_eval_spline_mpi.py +236 -160
  9. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/conftest.py +20 -0
  10. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/console/compile.py +28 -24
  11. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/console/format.py +23 -20
  12. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/console/likwid.py +6 -3
  13. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/console/main.py +17 -12
  14. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/console/params.py +8 -5
  15. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/console/profile.py +27 -22
  16. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/console/test.py +4 -1
  17. struphy-3.0.4/src/struphy/console/tests/test_console.py → struphy-3.2.0/src/struphy/console/tests/xx_test_console.py +7 -4
  18. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/diagnostics/console_diagn.py +4 -1
  19. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/diagnostics/diagn_tools.py +10 -7
  20. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/diagnostics/paraview/mesh_creator.py +6 -2
  21. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/dispersion_relations/analytic.py +6 -2
  22. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/examples/_draw_parallel.py +21 -12
  23. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/feec/basis_projection_ops.py +60 -71
  24. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/feec/local_projectors_kernels.py +46 -46
  25. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/feec/mass.py +1232 -1501
  26. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/feec/preconditioner.py +77 -28
  27. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/feec/projectors.py +294 -397
  28. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/feec/psydac_derham.py +1484 -841
  29. struphy-3.2.0/src/struphy/feec/tests/test_basis_ops.py +529 -0
  30. struphy-3.2.0/src/struphy/feec/tests/test_derham.py +160 -0
  31. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/feec/tests/test_eval_field.py +90 -75
  32. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/feec/tests/test_field_init.py +159 -128
  33. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/feec/tests/test_l2_projectors.py +67 -40
  34. struphy-3.2.0/src/struphy/feec/tests/test_local_matrix_vector.py +111 -0
  35. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/feec/tests/test_local_projectors.py +153 -131
  36. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/feec/tests/test_lowdim_nel_is_1.py +71 -64
  37. struphy-3.2.0/src/struphy/feec/tests/test_mass_matrices.py +1242 -0
  38. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/feec/tests/test_toarray_struphy.py +25 -11
  39. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/feec/tests/test_tosparse_struphy.py +23 -10
  40. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/feec/tests/xx_test_preconds.py +22 -8
  41. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/feec/utilities.py +107 -34
  42. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/feec/utilities_local_projectors.py +46 -46
  43. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/feec/variational_utilities.py +60 -60
  44. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/fields_background/base.py +95 -16
  45. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/fields_background/coil_fields/coil_fields.py +26 -21
  46. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/fields_background/equils.py +53 -57
  47. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/fields_background/mhd_equil/eqdsk/readeqdsk.py +13 -11
  48. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/fields_background/projected_equils.py +17 -16
  49. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/fields_background/tests/test_desc_equil.py +6 -3
  50. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/fields_background/tests/test_mhd_equils.py +52 -77
  51. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/geometry/base.py +244 -69
  52. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/geometry/domains.py +40 -40
  53. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/geometry/evaluation_kernels.py +6 -6
  54. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/geometry/mappings_kernels.py +129 -177
  55. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/geometry/tests/test_domain.py +133 -75
  56. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/geometry/utilities.py +34 -16
  57. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/initial/base.py +82 -6
  58. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/initial/eigenfunctions.py +43 -31
  59. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/initial/perturbations.py +118 -15
  60. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/initial/tests/test_init_perturbations.py +17 -10
  61. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/io/options.py +131 -60
  62. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/io/output_handling.py +7 -4
  63. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/io/setup.py +22 -120
  64. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/kernel_arguments/local_projectors_args_kernels.py +3 -3
  65. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/kernel_arguments/pusher_args_kernels.py +4 -4
  66. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/kinetic_background/base.py +296 -20
  67. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/kinetic_background/maxwellians.py +71 -74
  68. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/kinetic_background/tests/test_base.py +64 -5
  69. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/kinetic_background/tests/test_maxwellians.py +149 -127
  70. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/linear_algebra/saddle_point.py +46 -51
  71. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/linear_algebra/solver.py +18 -3
  72. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/linear_algebra/tests/test_saddle_point_propagator.py +59 -65
  73. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/linear_algebra/tests/test_saddlepoint_massmatrices.py +41 -37
  74. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/linear_algebra/tests/test_stencil_dot_kers.py +84 -72
  75. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/linear_algebra/tests/test_stencil_transpose_kers.py +85 -73
  76. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/models/__init__.py +2 -0
  77. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/models/base.py +325 -182
  78. struphy-3.2.0/src/struphy/models/cold_plasma.py +263 -0
  79. struphy-3.2.0/src/struphy/models/cold_plasma_vlasov.py +414 -0
  80. struphy-3.2.0/src/struphy/models/deterministic_particle_diffusion.py +169 -0
  81. struphy-3.2.0/src/struphy/models/drift_kinetic_electrostatic_adiabatic.py +325 -0
  82. struphy-3.2.0/src/struphy/models/guiding_center.py +236 -0
  83. struphy-3.2.0/src/struphy/models/hasegawa_wakatani.py +242 -0
  84. struphy-3.2.0/src/struphy/models/linear_extended_mh_duniform.py +334 -0
  85. struphy-3.2.0/src/struphy/models/linear_mhd.py +291 -0
  86. struphy-3.2.0/src/struphy/models/linear_mhd_driftkinetic_cc.py +487 -0
  87. struphy-3.2.0/src/struphy/models/linear_mhd_vlasov_cc.py +385 -0
  88. struphy-3.2.0/src/struphy/models/linear_mhd_vlasov_pc.py +374 -0
  89. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/models/linear_vlasov_ampere_one_species.py +201 -42
  90. struphy-3.2.0/src/struphy/models/linear_vlasov_maxwell_one_species.py +337 -0
  91. struphy-3.2.0/src/struphy/models/maxwell.py +164 -0
  92. struphy-3.2.0/src/struphy/models/poisson.py +191 -0
  93. struphy-3.2.0/src/struphy/models/pressure_less_sph.py +212 -0
  94. struphy-3.2.0/src/struphy/models/random_particle_diffusion.py +163 -0
  95. struphy-3.2.0/src/struphy/models/scalars.py +355 -0
  96. struphy-3.2.0/src/struphy/models/shear_alfven.py +205 -0
  97. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/models/species.py +144 -145
  98. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/models/tests/default_params/test_models.py +39 -33
  99. struphy-3.2.0/src/struphy/models/tests/test_examples.py +67 -0
  100. struphy-3.2.0/src/struphy/models/tests/utils_testing.py +123 -0
  101. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/models/tests/verification/test_verif_LinearMHD.py +13 -12
  102. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/models/tests/verification/test_verif_Maxwell.py +20 -20
  103. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/models/tests/verification/test_verif_Poisson.py +11 -8
  104. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/models/tests/verification/test_verif_ViscousEulerSPH.py +22 -22
  105. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/models/tests/verification/test_verif_VlasovAmpereOneSpecies.py +22 -17
  106. struphy-3.2.0/src/struphy/models/toy_drift.py +290 -0
  107. struphy-3.2.0/src/struphy/models/two_fluid_quasi_neutral_toy.py +255 -0
  108. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/models/utils.py +11 -9
  109. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/models/variables.py +212 -51
  110. struphy-3.2.0/src/struphy/models/variational_barotropic_fluid.py +215 -0
  111. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/models/variational_compressible_fluid.py +137 -35
  112. struphy-3.2.0/src/struphy/models/variational_pressureless_fluid.py +201 -0
  113. struphy-3.2.0/src/struphy/models/visco_resistive_deltaf_mhd.py +356 -0
  114. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/models/visco_resistive_deltaf_mhd_with_q.py +173 -55
  115. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/models/visco_resistive_linear_mhd.py +171 -68
  116. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/models/visco_resistive_linear_mhd_with_q.py +165 -52
  117. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/models/visco_resistive_mhd.py +178 -57
  118. struphy-3.2.0/src/struphy/models/visco_resistive_mhd_with_p.py +340 -0
  119. struphy-3.2.0/src/struphy/models/visco_resistive_mhd_with_q.py +350 -0
  120. struphy-3.2.0/src/struphy/models/viscous_euler_sph.py +240 -0
  121. struphy-3.2.0/src/struphy/models/viscous_fluid.py +283 -0
  122. struphy-3.2.0/src/struphy/models/vlasov.py +184 -0
  123. struphy-3.2.0/src/struphy/models/vlasov_ampere_one_species.py +355 -0
  124. struphy-3.2.0/src/struphy/models/vlasov_maxwell_one_species.py +370 -0
  125. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/ode/tests/test_ode_feec.py +17 -11
  126. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/particles/parameters.py +154 -88
  127. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/physics/physics.py +25 -23
  128. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/pic/accumulation/accum_kernels.py +14 -14
  129. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/pic/accumulation/filler_kernels.py +4 -4
  130. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/pic/accumulation/filter.py +13 -13
  131. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/pic/accumulation/filter_kernels.py +4 -4
  132. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/pic/accumulation/particle_to_mat_kernels.py +2 -2
  133. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/pic/accumulation/particles_to_grid.py +48 -25
  134. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/pic/base.py +269 -187
  135. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/pic/particles.py +5 -13
  136. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/pic/pushing/eval_kernels_gc.py +5 -1
  137. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/pic/pushing/pusher.py +19 -37
  138. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/pic/pushing/pusher_kernels.py +10 -10
  139. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/pic/sobol_seq.py +14 -10
  140. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/pic/tests/test_accum_vec_H1.py +31 -18
  141. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/pic/tests/test_draw_parallel.py +29 -20
  142. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/pic/tests/test_mat_vec_filler.py +82 -77
  143. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/pic/tests/test_pushers.py +122 -64
  144. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/pic/tests/test_sorting.py +24 -9
  145. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/pic/tests/test_sph.py +331 -105
  146. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/pic/tests/test_tesselation.py +13 -9
  147. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/pic/utilities.py +14 -13
  148. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/pic/utilities_kernels.py +1 -1
  149. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/polar/basic.py +22 -17
  150. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/polar/extraction_operators.py +8 -8
  151. struphy-3.2.0/src/struphy/polar/tests/test_polar.py +412 -0
  152. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/post_processing/cprofile_analyser.py +32 -27
  153. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/post_processing/likwid/likwid_parser.py +10 -7
  154. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/post_processing/likwid/plot_likwidproject.py +20 -18
  155. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/post_processing/likwid/plot_time_traces.py +9 -6
  156. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/post_processing/likwid/roofline_plotter.py +20 -17
  157. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/post_processing/orbits/orbits_tools.py +5 -2
  158. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/post_processing/post_processing_tools.py +68 -98
  159. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/post_processing/profile_struphy.py +28 -23
  160. struphy-3.2.0/src/struphy/propagators/adiabatic_phi.py +208 -0
  161. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/propagators/base.py +22 -14
  162. struphy-3.2.0/src/struphy/propagators/curl_curl_solve.py +325 -0
  163. struphy-3.2.0/src/struphy/propagators/current_coupling_5d_curlb.py +319 -0
  164. struphy-3.2.0/src/struphy/propagators/current_coupling_5d_density.py +238 -0
  165. struphy-3.2.0/src/struphy/propagators/current_coupling_5d_gradb.py +834 -0
  166. struphy-3.2.0/src/struphy/propagators/current_coupling_6d_current.py +306 -0
  167. struphy-3.2.0/src/struphy/propagators/current_coupling_6d_density.py +296 -0
  168. struphy-3.2.0/src/struphy/propagators/efield_weights_coupling.py +310 -0
  169. struphy-3.2.0/src/struphy/propagators/faraday_extended.py +229 -0
  170. struphy-3.2.0/src/struphy/propagators/hall.py +175 -0
  171. struphy-3.2.0/src/struphy/propagators/hasegawa_wakatani_step.py +343 -0
  172. struphy-3.2.0/src/struphy/propagators/implicit_diffusion.py +372 -0
  173. struphy-3.2.0/src/struphy/propagators/jxb_cold.py +157 -0
  174. struphy-3.2.0/src/struphy/propagators/magnetosonic.py +244 -0
  175. struphy-3.2.0/src/struphy/propagators/magnetosonic_uniform.py +242 -0
  176. struphy-3.2.0/src/struphy/propagators/maxwell_weak_ampere.py +252 -0
  177. struphy-3.2.0/src/struphy/propagators/ohm_cold.py +188 -0
  178. struphy-3.2.0/src/struphy/propagators/poisson_solve.py +145 -0
  179. struphy-3.2.0/src/struphy/propagators/pressure_coupling_6d.py +394 -0
  180. struphy-3.2.0/src/struphy/propagators/push_deterministic_diffusion.py +173 -0
  181. struphy-3.2.0/src/struphy/propagators/push_eta.py +129 -0
  182. struphy-3.2.0/src/struphy/propagators/push_eta_pc.py +171 -0
  183. struphy-3.2.0/src/struphy/propagators/push_guiding_center_bx_estar.py +482 -0
  184. struphy-3.2.0/src/struphy/propagators/push_guiding_center_parallel.py +506 -0
  185. struphy-3.2.0/src/struphy/propagators/push_random_diffusion.py +162 -0
  186. struphy-3.2.0/src/struphy/propagators/push_vin_efield.py +143 -0
  187. struphy-3.2.0/src/struphy/propagators/push_vin_sph_pressure.py +185 -0
  188. struphy-3.2.0/src/struphy/propagators/push_vin_viscous_potential.py +196 -0
  189. struphy-3.2.0/src/struphy/propagators/push_vxb.py +169 -0
  190. struphy-3.2.0/src/struphy/propagators/shear_alfven_b1.py +214 -0
  191. struphy-3.2.0/src/struphy/propagators/shear_alfven_current_coupling_5d.py +465 -0
  192. struphy-3.2.0/src/struphy/propagators/shear_alfven_propagator.py +244 -0
  193. struphy-3.2.0/src/struphy/propagators/tests/test_curl_curl.py +424 -0
  194. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/propagators/tests/test_gyrokinetic_poisson.py +317 -135
  195. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/propagators/tests/test_poisson.py +66 -67
  196. struphy-3.2.0/src/struphy/propagators/time_dependent_source.py +114 -0
  197. struphy-3.2.0/src/struphy/propagators/two_fluid_quasi_neutral_full.py +462 -0
  198. struphy-3.2.0/src/struphy/propagators/variational_density_evolve.py +613 -0
  199. struphy-3.2.0/src/struphy/propagators/variational_entropy_evolve.py +467 -0
  200. struphy-3.2.0/src/struphy/propagators/variational_mag_field_evolve.py +420 -0
  201. struphy-3.2.0/src/struphy/propagators/variational_momentum_advection.py +291 -0
  202. struphy-3.2.0/src/struphy/propagators/variational_pb_evolve.py +667 -0
  203. struphy-3.2.0/src/struphy/propagators/variational_qb_evolve.py +690 -0
  204. struphy-3.2.0/src/struphy/propagators/variational_resistivity.py +809 -0
  205. struphy-3.2.0/src/struphy/propagators/variational_viscosity.py +827 -0
  206. struphy-3.2.0/src/struphy/propagators/vlasov_ampere_coupling.py +250 -0
  207. struphy-3.2.0/src/struphy/simulation/base.py +69 -0
  208. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/simulation/sim.py +467 -276
  209. struphy-3.2.0/src/struphy/topology/grids.py +49 -0
  210. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/utils/clone_config.py +13 -12
  211. struphy-3.2.0/src/struphy/utils/cupy_vs_numpy.py +30 -0
  212. struphy-3.2.0/src/struphy/utils/docstring_converter.py +1212 -0
  213. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/utils/test_clone_config.py +8 -4
  214. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/utils/utils.py +105 -16
  215. struphy-3.2.0/src/struphy.egg-info/PKG-INFO +254 -0
  216. {struphy-3.0.4 → struphy-3.2.0}/src/struphy.egg-info/SOURCES.txt +50 -4
  217. struphy-3.2.0/src/struphy.egg-info/requires.txt +77 -0
  218. struphy-3.0.4/PKG-INFO +0 -235
  219. struphy-3.0.4/README.md +0 -137
  220. struphy-3.0.4/src/struphy/__init__.py +0 -44
  221. struphy-3.0.4/src/struphy/feec/tests/test_basis_ops.py +0 -558
  222. struphy-3.0.4/src/struphy/feec/tests/test_derham.py +0 -73
  223. struphy-3.0.4/src/struphy/feec/tests/test_mass_matrices.py +0 -1060
  224. struphy-3.0.4/src/struphy/models/cold_plasma.py +0 -127
  225. struphy-3.0.4/src/struphy/models/cold_plasma_vlasov.py +0 -241
  226. struphy-3.0.4/src/struphy/models/deterministic_particle_diffusion.py +0 -89
  227. struphy-3.0.4/src/struphy/models/drift_kinetic_electrostatic_adiabatic.py +0 -226
  228. struphy-3.0.4/src/struphy/models/guiding_center.py +0 -132
  229. struphy-3.0.4/src/struphy/models/hasegawa_wakatani.py +0 -142
  230. struphy-3.0.4/src/struphy/models/linear_extended_mh_duniform.py +0 -194
  231. struphy-3.0.4/src/struphy/models/linear_mhd.py +0 -172
  232. struphy-3.0.4/src/struphy/models/linear_mhd_driftkinetic_cc.py +0 -329
  233. struphy-3.0.4/src/struphy/models/linear_mhd_vlasov_cc.py +0 -244
  234. struphy-3.0.4/src/struphy/models/linear_mhd_vlasov_pc.py +0 -271
  235. struphy-3.0.4/src/struphy/models/linear_vlasov_maxwell_one_species.py +0 -167
  236. struphy-3.0.4/src/struphy/models/maxwell.py +0 -99
  237. struphy-3.0.4/src/struphy/models/poisson.py +0 -121
  238. struphy-3.0.4/src/struphy/models/pressure_less_sph.py +0 -111
  239. struphy-3.0.4/src/struphy/models/random_particle_diffusion.py +0 -88
  240. struphy-3.0.4/src/struphy/models/shear_alfven.py +0 -125
  241. struphy-3.0.4/src/struphy/models/tests/utils_testing.py +0 -84
  242. struphy-3.0.4/src/struphy/models/two_fluid_quasi_neutral_toy.py +0 -128
  243. struphy-3.0.4/src/struphy/models/variational_barotropic_fluid.py +0 -122
  244. struphy-3.0.4/src/struphy/models/variational_pressureless_fluid.py +0 -110
  245. struphy-3.0.4/src/struphy/models/visco_resistive_deltaf_mhd.py +0 -250
  246. struphy-3.0.4/src/struphy/models/visco_resistive_mhd_with_p.py +0 -218
  247. struphy-3.0.4/src/struphy/models/visco_resistive_mhd_with_q.py +0 -227
  248. struphy-3.0.4/src/struphy/models/viscous_euler_sph.py +0 -150
  249. struphy-3.0.4/src/struphy/models/viscous_fluid.py +0 -208
  250. struphy-3.0.4/src/struphy/models/vlasov.py +0 -92
  251. struphy-3.0.4/src/struphy/models/vlasov_ampere_one_species.py +0 -247
  252. struphy-3.0.4/src/struphy/models/vlasov_maxwell_one_species.py +0 -264
  253. struphy-3.0.4/src/struphy/polar/tests/test_polar.py +0 -378
  254. struphy-3.0.4/src/struphy/propagators/propagators_coupling.py +0 -2158
  255. struphy-3.0.4/src/struphy/propagators/propagators_fields.py +0 -8638
  256. struphy-3.0.4/src/struphy/propagators/propagators_markers.py +0 -1892
  257. struphy-3.0.4/src/struphy/simulation/base.py +0 -40
  258. struphy-3.0.4/src/struphy/topology/grids.py +0 -26
  259. struphy-3.0.4/src/struphy/utils/cupy_vs_numpy.py +0 -27
  260. struphy-3.0.4/src/struphy.egg-info/PKG-INFO +0 -235
  261. struphy-3.0.4/src/struphy.egg-info/requires.txt +0 -70
  262. {struphy-3.0.4 → struphy-3.2.0}/LICENSE +0 -0
  263. {struphy-3.0.4 → struphy-3.2.0}/setup.cfg +0 -0
  264. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/api/__init__.py +0 -0
  265. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/api/domains/__init__.py +0 -0
  266. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/api/equils/__init__.py +0 -0
  267. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/api/grids/__init__.py +0 -0
  268. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/api/maxwellians/__init__.py +0 -0
  269. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/api/models/__init__.py +0 -0
  270. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/api/ode/__init__.py +0 -0
  271. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/api/options/__init__.py +0 -0
  272. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/api/perturbations/__init__.py +0 -0
  273. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/api/post_processing/__init__.py +0 -0
  274. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/bsplines/__init__.py +0 -0
  275. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/bsplines/bsplines.py +0 -0
  276. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/bsplines/bsplines_kernels.py +0 -0
  277. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/bsplines/evaluation_kernels_1d.py +0 -0
  278. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/bsplines/evaluation_kernels_2d.py +0 -0
  279. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/bsplines/evaluation_kernels_3d.py +0 -0
  280. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/bsplines/shapefunc_kernels.py +0 -0
  281. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/bsplines/tests/__init__.py +0 -0
  282. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/compile_struphy.mk +0 -0
  283. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/console/__init__.py +0 -0
  284. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/console/parsers.py +0 -0
  285. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/dependencies.py +0 -0
  286. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/diagnostics/__init__.py +0 -0
  287. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/diagnostics/paraview/__init__.py +0 -0
  288. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/diagnostics/paraview/vtk_writer.py +0 -0
  289. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/dispersion_relations/__init__.py +0 -0
  290. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/dispersion_relations/base.py +0 -0
  291. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/dispersion_relations/utilities.py +0 -0
  292. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/eigenvalue_solvers/derivatives.py +0 -0
  293. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/examples/restelli2018/__init__.py +0 -0
  294. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/examples/restelli2018/callables.py +0 -0
  295. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/feec/__init__.py +0 -0
  296. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/feec/banded_to_stencil_kernels.py +0 -0
  297. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/feec/basis_projection_kernels.py +0 -0
  298. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/feec/linear_operators.py +0 -0
  299. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/feec/mass_kernels.py +0 -0
  300. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/feec/tests/__init__.py +0 -0
  301. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/feec/utilities_kernels.py +0 -0
  302. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/fields_background/__init__.py +0 -0
  303. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/fields_background/coil_fields/__init__.py +0 -0
  304. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/fields_background/coil_fields/base.py +0 -0
  305. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/fields_background/mhd_equil/__init__.py +0 -0
  306. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/fields_background/mhd_equil/eqdsk/__init__.py +0 -0
  307. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/fields_background/mhd_equil/eqdsk/data/AUGNLED_g031213.00830.high +0 -0
  308. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/fields_background/mhd_equil/eqdsk/data/__init__.py +0 -0
  309. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/fields_background/mhd_equil/gvec/__init__.py +0 -0
  310. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/fields_background/mhd_equil/gvec/output/__init__.py +0 -0
  311. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/fields_background/mhd_equil/gvec/output/vtk/__init__.py +0 -0
  312. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/fields_background/mhd_equil/gvec/run_01/CIRCTOK_State_0000_00000000.dat +0 -0
  313. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/fields_background/mhd_equil/gvec/run_01/CIRCTOK_State_0000_00001000.dat +0 -0
  314. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/fields_background/mhd_equil/gvec/run_01/parameter.ini +0 -0
  315. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/fields_background/mhd_equil/gvec/run_02/W7X_State_0000_00000000.dat +0 -0
  316. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/fields_background/mhd_equil/gvec/run_02/W7X_State_0000_00000100.dat +0 -0
  317. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/fields_background/mhd_equil/gvec/run_02/parameter-w7x.ini +0 -0
  318. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/fields_background/mhd_equil/gvec/run_03/NEO-SPITZER_State_0000_00000000.dat +0 -0
  319. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/fields_background/mhd_equil/gvec/run_03/NEO-SPITZER_State_0000_00003307.dat +0 -0
  320. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/fields_background/mhd_equil/gvec/run_03/Neo-spitzer-mirror23-well-opt-1-AR10-1.nc +0 -0
  321. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/fields_background/mhd_equil/gvec/run_03/parameter-fig8.ini +0 -0
  322. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/fields_background/mhd_equil/vmec/__init__.py +0 -0
  323. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/fields_background/tests/__init__.py +0 -0
  324. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/fields_background/tests/test_generic_equils.py +0 -0
  325. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/fields_background/tests/test_numerical_mhd_equil.py +0 -0
  326. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/geometry/__init__.py +0 -0
  327. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/geometry/map_coef/__init__.py +0 -0
  328. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/geometry/tests/__init__.py +0 -0
  329. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/geometry/transform_kernels.py +0 -0
  330. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/geometry/utilities_kernels.py +0 -0
  331. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/initial/__init__.py +0 -0
  332. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/initial/tests/__init__.py +0 -0
  333. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/initial/utilities.py +0 -0
  334. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/io/__init__.py +0 -0
  335. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/kernel_arguments/__init__.py +0 -0
  336. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/kinetic_background/__init__.py +0 -0
  337. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/kinetic_background/moment_functions.py +0 -0
  338. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/kinetic_background/tests/__init__.py +0 -0
  339. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/linear_algebra/__init__.py +0 -0
  340. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/linear_algebra/linalg_kernels.py +0 -0
  341. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/linear_algebra/linalg_kron.py +0 -0
  342. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/linear_algebra/schur_solver.py +0 -0
  343. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/linear_algebra/stencil_dot_kernels.py +0 -0
  344. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/linear_algebra/stencil_transpose_kernels.py +0 -0
  345. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/linear_algebra/tests/__init__.py +0 -0
  346. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/models/tests/__init__.py +0 -0
  347. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/models/tests/default_params/__init__.py +0 -0
  348. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/models/tests/verification/__init__.py +0 -0
  349. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/ode/__init__.py +0 -0
  350. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/ode/solvers.py +0 -0
  351. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/ode/tests/__init__.py +0 -0
  352. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/ode/utils.py +0 -0
  353. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/particles/__init__.py +0 -0
  354. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/physics/__init__.py +0 -0
  355. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/pic/__init__.py +0 -0
  356. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/pic/accumulation/__init__.py +0 -0
  357. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/pic/accumulation/accum_kernels_gc.py +0 -0
  358. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/pic/pushing/__init__.py +0 -0
  359. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/pic/pushing/pusher_kernels_gc.py +0 -0
  360. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/pic/pushing/pusher_utilities_kernels.py +0 -0
  361. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/pic/sampling_kernels.py +0 -0
  362. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/pic/sorting_kernels.py +0 -0
  363. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/pic/sph_eval_kernels.py +0 -0
  364. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/pic/sph_smoothing_kernels.py +0 -0
  365. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/pic/tests/__init__.py +0 -0
  366. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/pic/tests/test_binning.py +0 -0
  367. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/pic/tests/test_set_zero_velocity.py +0 -0
  368. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/polar/__init__.py +0 -0
  369. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/polar/linear_operators.py +0 -0
  370. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/polar/tests/__init__.py +0 -0
  371. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/post_processing/__init__.py +0 -0
  372. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/post_processing/likwid/__init__.py +0 -0
  373. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/post_processing/likwid/hardware_dicts.py +0 -0
  374. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/post_processing/likwid/maxplotlylib.py +0 -0
  375. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/post_processing/orbits/__init__.py +0 -0
  376. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/post_processing/orbits/orbits_kernels.py +0 -0
  377. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/post_processing/tests/__init__.py +0 -0
  378. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/propagators/__init__.py +0 -0
  379. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/propagators/tests/__init__.py +0 -0
  380. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/simulation/__init__.py +0 -0
  381. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/topology/__init__.py +0 -0
  382. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/utils/__init__.py +0 -0
  383. {struphy-3.0.4 → struphy-3.2.0}/src/struphy/utils/pyccel.py +0 -0
  384. {struphy-3.0.4 → struphy-3.2.0}/src/struphy.egg-info/dependency_links.txt +0 -0
  385. {struphy-3.0.4 → struphy-3.2.0}/src/struphy.egg-info/entry_points.txt +0 -0
  386. {struphy-3.0.4 → struphy-3.2.0}/src/struphy.egg-info/top_level.txt +0 -0
struphy-3.2.0/PKG-INFO ADDED
@@ -0,0 +1,254 @@
1
+ Metadata-Version: 2.4
2
+ Name: struphy
3
+ Version: 3.2.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-2026, 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.4.3
34
+ Requires-Dist: cunumpy<=0.1.1
35
+ Requires-Dist: pyccel<=2.2.3,>=2.2.0
36
+ Requires-Dist: feectools<=0.1.3
37
+ Requires-Dist: scipy<=1.17.1
38
+ Requires-Dist: h5py<=3.16.0
39
+ Requires-Dist: matplotlib<=3.10.8
40
+ Requires-Dist: pyyaml<=6.0.3
41
+ Requires-Dist: vtk<=9.6.1
42
+ Requires-Dist: tqdm<=4.68.1
43
+ Requires-Dist: argcomplete<=3.6.3
44
+ Requires-Dist: ipywidgets<=8.1.8
45
+ Requires-Dist: plotly<=6.8.0
46
+ Requires-Dist: pyvista<=0.48.0
47
+ Requires-Dist: trame<=3.13.0
48
+ Requires-Dist: trame-vtk<=2.11.8
49
+ Requires-Dist: trame-vuetify<=3.2.2
50
+ Requires-Dist: nest_asyncio2<=1.7.2
51
+ Requires-Dist: vtk<=9.6.1
52
+ Requires-Dist: pytest<=9.0.3
53
+ Requires-Dist: pytest-mpi<=0.6
54
+ Requires-Dist: pytest-testmon<=2.2.0
55
+ Requires-Dist: ruff<=0.15.12,>=0.15.0
56
+ Requires-Dist: line_profiler<=5.0.2
57
+ Requires-Dist: scope-profiler<=0.1.9,>=0.1.7
58
+ Provides-Extra: mpi
59
+ Requires-Dist: mpi4py<=4.1.1; extra == "mpi"
60
+ Provides-Extra: phys
61
+ Requires-Dist: gvec<=1.4.1,>=1.1.0; extra == "phys"
62
+ Requires-Dist: desc-opt<=0.17.1; extra == "phys"
63
+ Provides-Extra: dev
64
+ Requires-Dist: struphy[mpi]; extra == "dev"
65
+ Requires-Dist: notebook; extra == "dev"
66
+ Requires-Dist: autopep8; extra == "dev"
67
+ Requires-Dist: isort; extra == "dev"
68
+ Requires-Dist: flake8; extra == "dev"
69
+ Requires-Dist: pylint; extra == "dev"
70
+ Requires-Dist: ssort; extra == "dev"
71
+ Requires-Dist: add-trailing-comma; extra == "dev"
72
+ Requires-Dist: pre-commit; extra == "dev"
73
+ Requires-Dist: nbstripout; extra == "dev"
74
+ Requires-Dist: tabulate; extra == "dev"
75
+ Requires-Dist: tomli-w; extra == "dev"
76
+ Requires-Dist: kaleido; extra == "dev"
77
+ Requires-Dist: pandas; extra == "dev"
78
+ Provides-Extra: doc
79
+ Requires-Dist: struphy[phys]; extra == "doc"
80
+ Requires-Dist: jupyter; extra == "doc"
81
+ Requires-Dist: nbconvert; extra == "doc"
82
+ Requires-Dist: ipykernel; extra == "doc"
83
+ Requires-Dist: sphinx; extra == "doc"
84
+ Requires-Dist: sphinx-design; extra == "doc"
85
+ Requires-Dist: lxml_html_clean; extra == "doc"
86
+ Requires-Dist: sphinxcontrib-napoleon; extra == "doc"
87
+ Requires-Dist: sphinx-copybutton; extra == "doc"
88
+ Requires-Dist: sphinx-collections; extra == "doc"
89
+ Requires-Dist: pydata-sphinx-theme; extra == "doc"
90
+ Requires-Dist: nbsphinx; extra == "doc"
91
+ Requires-Dist: m2r2; extra == "doc"
92
+ Requires-Dist: myst-parser; extra == "doc"
93
+ Requires-Dist: docutils; extra == "doc"
94
+ Requires-Dist: ipyparallel; extra == "doc"
95
+ Provides-Extra: likwid
96
+ Requires-Dist: struphy[dev]; extra == "likwid"
97
+ Requires-Dist: pylikwid; extra == "likwid"
98
+ Provides-Extra: all
99
+ Requires-Dist: struphy[phys]; extra == "all"
100
+ Requires-Dist: struphy[dev]; extra == "all"
101
+ Requires-Dist: struphy[mpi]; extra == "all"
102
+ Requires-Dist: struphy[doc]; extra == "all"
103
+ Requires-Dist: struphy[likwid]; extra == "all"
104
+ Dynamic: license-file
105
+
106
+
107
+
108
+ ![STRUPHY Header](https://raw.githubusercontent.com/struphy-hub/.github/refs/heads/main/profile/struphy_header_with_subs.png)
109
+
110
+ <p>
111
+
112
+ <a href="https://github.com/struphy-hub/struphy/releases"><img src="https://img.shields.io/github/v/release/struphy-hub/struphy?label=Release" alt="Release"></a> <a href="https://github.com/struphy-hub/struphy/blob/devel/LICENSE"><img src="https://img.shields.io/badge/License-MIT-violet" alt="License"></a> <a href="https://mybinder.org/v2/gh/struphy-hub/struphy-tutorials/main"><img src="https://img.shields.io/badge/launch-tutorials-579ACA.svg?logo=data:image/png;base64,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" alt="badge"></a> <a href="https://github.com/struphy-hub/struphy/actions/workflows/scheduled-ubuntu.yml"><img src="https://github.com/struphy-hub/struphy/actions/workflows/scheduled-ubuntu.yml/badge.svg" alt="Ubuntu latest"></a> <a href="https://github.com/struphy-hub/struphy/actions/workflows/scheduled-macos.yml"><img src="https://github.com/struphy-hub/struphy/actions/workflows/scheduled-macos.yml/badge.svg" alt="MacOS latest"></a> <a href="https://github.com/struphy-hub/struphy/actions/workflows/static_analysis.yml"><img src="https://github.com/struphy-hub/struphy/actions/workflows/static_analysis.yml/badge.svg" alt="isort and ruff"></a> <a href="https://pypi.org/project/struphy/"><img src="https://img.shields.io/pypi/v/struphy?label=PyPI" alt="PyPI"></a> <a href="https://pypi.org/project/struphy/"><img src="https://img.shields.io/pypi/dm/struphy.svg?label=PyPI%20downloads" alt="PyPI Downloads"></a>
113
+ </p>
114
+
115
+ # Welcome!
116
+
117
+ **This is a Python package for solving partial differential equations (PDEs) mainly - but not exclusively - for plasma physics.**
118
+
119
+ **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
120
+
121
+ - Maxwell’s equations
122
+ - Magneto-hydrodynamics (MHD)
123
+ - Multi-fluid models
124
+ - Vlasov-Poisson and Vlasov-Maxwell kinetic models
125
+ - Drift-kinetic models for strongly magnetized plasma
126
+ - MHD-kinetic hybrid models
127
+
128
+ 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.
129
+
130
+ The code is freely available under an [MIT license](https://github.com/struphy-hub/struphy/blob/devel/LICENSE) - Copyright (c) 2019-2026, Struphy developers, Max Planck Institute for Plasma Physics.
131
+
132
+ ![Max Planck Institute Logo](https://raw.githubusercontent.com/struphy-hub/.github/refs/heads/main/profile/MPI_PP_Logo_Vertical_E_green_rgb_centered.png)
133
+
134
+ ## Quick install
135
+
136
+ Struphy is available on [PyPI](https://pypi.org/project/struphy/), so you can install it with pip:
137
+
138
+ pip install -U struphy
139
+ struphy compile
140
+
141
+ In case you face troubles with install/compile:
142
+
143
+ 1. check the [prerequisites](https://struphy-hub.github.io/struphy/sections/install.html#requirements)
144
+ 2. visit [trouble shooting](https://struphy-hub.github.io/struphy/sections/install.html#trouble-shooting)
145
+
146
+ ## Example: solve Maxwell’s equations
147
+
148
+ Use the command line to generate a default launch file:
149
+
150
+ struphy params Maxwell
151
+
152
+ This will create `params_Maxwell.py` in your current working directory (cwd). You can open the file and - if you feel like it already - change some parameters. Start the simulation with
153
+
154
+ python params_Maxwell.py
155
+
156
+ The default output is in `sim_1/` in your cwd. You can change the output path via the class `EnvironmentOptions` in the parameter file.
157
+
158
+ Parallel simulations are run for example with
159
+
160
+ pip install -U mpi4py
161
+ mpirun -n 4 python params_Maxwell.py
162
+
163
+ You can also put the run command in a batch script.
164
+
165
+ ## Available models
166
+
167
+ Check the list of currently available models in the [documentation](https://struphy-hub.github.io/struphy/sections/models.html). If you want to see a particular model implemented, please let us know via [issues](https://github.com/struphy-hub/struphy/issues).
168
+
169
+ ## Documentation
170
+
171
+ The doc is on [Github pages](https://struphy-hub.github.io/struphy/index.html), we recommend in particular to visit:
172
+
173
+ - [Install](https://struphy-hub.github.io/struphy/sections/install.html)
174
+ - [Userguide](https://struphy-hub.github.io/struphy/sections/userguide.html)
175
+ - [Available models](https://struphy-hub.github.io/struphy/sections/models.html)
176
+ - [Numerical methods](https://struphy-hub.github.io/struphy/sections/numerics.html)
177
+
178
+ ## Python API
179
+
180
+ Try out the Python API in a Jupyter notebook or any Python environment. For example, you can create a simulation object and show the domain and equilibrium magnetic field of the linear MHD model via
181
+
182
+ ``` python
183
+ from struphy import (
184
+ Simulation,
185
+ domains,
186
+ equils,
187
+ )
188
+ from struphy.models import LinearMHD
189
+
190
+ model = LinearMHD()
191
+
192
+ domain = domains.DESCunit()
193
+ equil = equils.DESCequilibrium(use_nfp=False)
194
+
195
+ sim = Simulation(
196
+ model=model,
197
+ domain=domain,
198
+ equil=equil,
199
+ )
200
+
201
+ sim.show_domain(scalars="absB0", window_size = (850, 250), zoom_factor=2.0)
202
+ ```
203
+
204
+ ![](README_files/figure-commonmark/cell-2-output-1.png)
205
+
206
+ This will show the domain and equilibrium magnetic field of the linear MHD model. You can find more examples in the [documentation](https://struphy-hub.github.io/struphy/index.html).
207
+
208
+ ## Tutorials on Binder
209
+
210
+ Get familiar with Struphy right away on [mybinder](https://mybinder.org/v2/gh/struphy-hub/struphy-tutorials/main) - no installation needed.
211
+
212
+ ## Docker
213
+
214
+ If you want to get started right away without installing anything, you can use the [Docker image](https://hub.docker.com/r/spossann/struphy) - just pull and run:
215
+
216
+ docker pull spossann/struphy:main
217
+ docker run -it --rm spossann/struphy:main
218
+ ls struphy_*
219
+
220
+ This will show three available Struphy environments, which you can activate for example via
221
+
222
+ source struphy_fortran_/env_fortran_/bin/activate
223
+
224
+ There is also a [Docker image with just the prerequisites](https://hub.docker.com/r/spossann/ubuntu-for-struphy) (on Ubuntu), so you can install and compile Struphy on top of it yourself:
225
+
226
+ docker pull spossann/ubuntu-for-struphy:main
227
+ docker run -it --rm spossann/ubuntu-for-struphy:main
228
+
229
+ ## Get in touch
230
+
231
+ - [Issues](https://github.com/struphy-hub/struphy/issues)
232
+ - [Discussions](https://github.com/struphy-hub/struphy/discussions)
233
+ - [@spossann](https://github.com/spossann) [stefan.possanner@ipp.mpg.de](mailto:spossann@ipp.mpg.de) (Maintainer)
234
+ - [@max-models](https://github.com/max-models) [max.lindqvist@ipp.mpg.de](mailto:Max.Lindqvist@ipp.mpg.de) (Maintainer)
235
+ - [LinkedIn profile](https://www.linkedin.com/company/struphy/)
236
+
237
+ ## Publications
238
+
239
+ - D. Bell, M.C. Pinto, S. Possanner, E. Sonnendrücker,
240
+ [**The linearized Vlasov–Maxwell system as a Hamiltonian system**](https://doi.org/10.1016/j.jcp.2026.114765),
241
+ Journal of Computational Physics, Volume 555, 114765 (2026).
242
+
243
+ - V. Carlier, M.C. Pinto, [**Variational discretizations of ideal magnetohydrodynamics in smooth regime using structure-preserving finite elements**](https://doi.org/10.1016/j.jcp.2024.113647),
244
+ Journal of Computational Physics, Volume 523, 113647 (2025).
245
+
246
+ - Y. Li, M.C. Pinto, F. Holderied, S. Possanner, E. Sonnendrücker, [**Geometric Particle-In-Cell discretizations of a plasma hybrid model with kinetic ions and mass-less fluid electrons**](https://doi.org/10.1016/j.jcp.2023.112671), Journal of Computational Physics 498, 112671 (2023).
247
+
248
+ - 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, 263-271, Springer Nature Switzerland (2023).
249
+
250
+ - F. Holderied, S. Possanner, [**Magneto-hydrodynamic eigenvalue solver for axisymmetric equilibria based on smooth polar splines**](https://doi.org/10.1016/j.jcp.2022.111329), Journal of Computational Physics 464, 111329 (2022).
251
+
252
+ - F. Holderied, S. Possanner, X. Wang, [**MHD-kinetic hybrid code based on structure-preserving finite elements with particles-in-cell**](https://doi.org/10.1016/j.jcp.2021.110143), Journal of Computational Physics 433, 110143 (2021).
253
+
254
+ - F. Holderied, S. Possanner, A. Ratnani, X. Wang, [**Structure-preserving vs. standard particle-in-cell methods: The case of an electron hybrid model**](https://doi.org/10.1016/j.jcp.2019.109108), Journal of Computational Physics 402, 109108 (2020).
@@ -0,0 +1,149 @@
1
+
2
+
3
+ ![STRUPHY Header](https://raw.githubusercontent.com/struphy-hub/.github/refs/heads/main/profile/struphy_header_with_subs.png)
4
+
5
+ <p>
6
+
7
+ <a href="https://github.com/struphy-hub/struphy/releases"><img src="https://img.shields.io/github/v/release/struphy-hub/struphy?label=Release" alt="Release"></a> <a href="https://github.com/struphy-hub/struphy/blob/devel/LICENSE"><img src="https://img.shields.io/badge/License-MIT-violet" alt="License"></a> <a href="https://mybinder.org/v2/gh/struphy-hub/struphy-tutorials/main"><img src="https://img.shields.io/badge/launch-tutorials-579ACA.svg?logo=data:image/png;base64,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" alt="badge"></a> <a href="https://github.com/struphy-hub/struphy/actions/workflows/scheduled-ubuntu.yml"><img src="https://github.com/struphy-hub/struphy/actions/workflows/scheduled-ubuntu.yml/badge.svg" alt="Ubuntu latest"></a> <a href="https://github.com/struphy-hub/struphy/actions/workflows/scheduled-macos.yml"><img src="https://github.com/struphy-hub/struphy/actions/workflows/scheduled-macos.yml/badge.svg" alt="MacOS latest"></a> <a href="https://github.com/struphy-hub/struphy/actions/workflows/static_analysis.yml"><img src="https://github.com/struphy-hub/struphy/actions/workflows/static_analysis.yml/badge.svg" alt="isort and ruff"></a> <a href="https://pypi.org/project/struphy/"><img src="https://img.shields.io/pypi/v/struphy?label=PyPI" alt="PyPI"></a> <a href="https://pypi.org/project/struphy/"><img src="https://img.shields.io/pypi/dm/struphy.svg?label=PyPI%20downloads" alt="PyPI Downloads"></a>
8
+ </p>
9
+
10
+ # Welcome!
11
+
12
+ **This is a Python package for solving partial differential equations (PDEs) mainly - but not exclusively - for plasma physics.**
13
+
14
+ **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
15
+
16
+ - Maxwell’s equations
17
+ - Magneto-hydrodynamics (MHD)
18
+ - Multi-fluid models
19
+ - Vlasov-Poisson and Vlasov-Maxwell kinetic models
20
+ - Drift-kinetic models for strongly magnetized plasma
21
+ - MHD-kinetic hybrid models
22
+
23
+ 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.
24
+
25
+ The code is freely available under an [MIT license](https://github.com/struphy-hub/struphy/blob/devel/LICENSE) - Copyright (c) 2019-2026, Struphy developers, Max Planck Institute for Plasma Physics.
26
+
27
+ ![Max Planck Institute Logo](https://raw.githubusercontent.com/struphy-hub/.github/refs/heads/main/profile/MPI_PP_Logo_Vertical_E_green_rgb_centered.png)
28
+
29
+ ## Quick install
30
+
31
+ Struphy is available on [PyPI](https://pypi.org/project/struphy/), so you can install it with pip:
32
+
33
+ pip install -U struphy
34
+ struphy compile
35
+
36
+ In case you face troubles with install/compile:
37
+
38
+ 1. check the [prerequisites](https://struphy-hub.github.io/struphy/sections/install.html#requirements)
39
+ 2. visit [trouble shooting](https://struphy-hub.github.io/struphy/sections/install.html#trouble-shooting)
40
+
41
+ ## Example: solve Maxwell’s equations
42
+
43
+ Use the command line to generate a default launch file:
44
+
45
+ struphy params Maxwell
46
+
47
+ This will create `params_Maxwell.py` in your current working directory (cwd). You can open the file and - if you feel like it already - change some parameters. Start the simulation with
48
+
49
+ python params_Maxwell.py
50
+
51
+ The default output is in `sim_1/` in your cwd. You can change the output path via the class `EnvironmentOptions` in the parameter file.
52
+
53
+ Parallel simulations are run for example with
54
+
55
+ pip install -U mpi4py
56
+ mpirun -n 4 python params_Maxwell.py
57
+
58
+ You can also put the run command in a batch script.
59
+
60
+ ## Available models
61
+
62
+ Check the list of currently available models in the [documentation](https://struphy-hub.github.io/struphy/sections/models.html). If you want to see a particular model implemented, please let us know via [issues](https://github.com/struphy-hub/struphy/issues).
63
+
64
+ ## Documentation
65
+
66
+ The doc is on [Github pages](https://struphy-hub.github.io/struphy/index.html), we recommend in particular to visit:
67
+
68
+ - [Install](https://struphy-hub.github.io/struphy/sections/install.html)
69
+ - [Userguide](https://struphy-hub.github.io/struphy/sections/userguide.html)
70
+ - [Available models](https://struphy-hub.github.io/struphy/sections/models.html)
71
+ - [Numerical methods](https://struphy-hub.github.io/struphy/sections/numerics.html)
72
+
73
+ ## Python API
74
+
75
+ Try out the Python API in a Jupyter notebook or any Python environment. For example, you can create a simulation object and show the domain and equilibrium magnetic field of the linear MHD model via
76
+
77
+ ``` python
78
+ from struphy import (
79
+ Simulation,
80
+ domains,
81
+ equils,
82
+ )
83
+ from struphy.models import LinearMHD
84
+
85
+ model = LinearMHD()
86
+
87
+ domain = domains.DESCunit()
88
+ equil = equils.DESCequilibrium(use_nfp=False)
89
+
90
+ sim = Simulation(
91
+ model=model,
92
+ domain=domain,
93
+ equil=equil,
94
+ )
95
+
96
+ sim.show_domain(scalars="absB0", window_size = (850, 250), zoom_factor=2.0)
97
+ ```
98
+
99
+ ![](README_files/figure-commonmark/cell-2-output-1.png)
100
+
101
+ This will show the domain and equilibrium magnetic field of the linear MHD model. You can find more examples in the [documentation](https://struphy-hub.github.io/struphy/index.html).
102
+
103
+ ## Tutorials on Binder
104
+
105
+ Get familiar with Struphy right away on [mybinder](https://mybinder.org/v2/gh/struphy-hub/struphy-tutorials/main) - no installation needed.
106
+
107
+ ## Docker
108
+
109
+ If you want to get started right away without installing anything, you can use the [Docker image](https://hub.docker.com/r/spossann/struphy) - just pull and run:
110
+
111
+ docker pull spossann/struphy:main
112
+ docker run -it --rm spossann/struphy:main
113
+ ls struphy_*
114
+
115
+ This will show three available Struphy environments, which you can activate for example via
116
+
117
+ source struphy_fortran_/env_fortran_/bin/activate
118
+
119
+ There is also a [Docker image with just the prerequisites](https://hub.docker.com/r/spossann/ubuntu-for-struphy) (on Ubuntu), so you can install and compile Struphy on top of it yourself:
120
+
121
+ docker pull spossann/ubuntu-for-struphy:main
122
+ docker run -it --rm spossann/ubuntu-for-struphy:main
123
+
124
+ ## Get in touch
125
+
126
+ - [Issues](https://github.com/struphy-hub/struphy/issues)
127
+ - [Discussions](https://github.com/struphy-hub/struphy/discussions)
128
+ - [@spossann](https://github.com/spossann) [stefan.possanner@ipp.mpg.de](mailto:spossann@ipp.mpg.de) (Maintainer)
129
+ - [@max-models](https://github.com/max-models) [max.lindqvist@ipp.mpg.de](mailto:Max.Lindqvist@ipp.mpg.de) (Maintainer)
130
+ - [LinkedIn profile](https://www.linkedin.com/company/struphy/)
131
+
132
+ ## Publications
133
+
134
+ - D. Bell, M.C. Pinto, S. Possanner, E. Sonnendrücker,
135
+ [**The linearized Vlasov–Maxwell system as a Hamiltonian system**](https://doi.org/10.1016/j.jcp.2026.114765),
136
+ Journal of Computational Physics, Volume 555, 114765 (2026).
137
+
138
+ - V. Carlier, M.C. Pinto, [**Variational discretizations of ideal magnetohydrodynamics in smooth regime using structure-preserving finite elements**](https://doi.org/10.1016/j.jcp.2024.113647),
139
+ Journal of Computational Physics, Volume 523, 113647 (2025).
140
+
141
+ - Y. Li, M.C. Pinto, F. Holderied, S. Possanner, E. Sonnendrücker, [**Geometric Particle-In-Cell discretizations of a plasma hybrid model with kinetic ions and mass-less fluid electrons**](https://doi.org/10.1016/j.jcp.2023.112671), Journal of Computational Physics 498, 112671 (2023).
142
+
143
+ - 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, 263-271, Springer Nature Switzerland (2023).
144
+
145
+ - F. Holderied, S. Possanner, [**Magneto-hydrodynamic eigenvalue solver for axisymmetric equilibria based on smooth polar splines**](https://doi.org/10.1016/j.jcp.2022.111329), Journal of Computational Physics 464, 111329 (2022).
146
+
147
+ - F. Holderied, S. Possanner, X. Wang, [**MHD-kinetic hybrid code based on structure-preserving finite elements with particles-in-cell**](https://doi.org/10.1016/j.jcp.2021.110143), Journal of Computational Physics 433, 110143 (2021).
148
+
149
+ - F. Holderied, S. Possanner, A. Ratnani, X. Wang, [**Structure-preserving vs. standard particle-in-cell methods: The case of an electron hybrid model**](https://doi.org/10.1016/j.jcp.2019.109108), Journal of Computational Physics 402, 109108 (2020).
@@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
6
6
 
7
7
  [project]
8
8
  name = "struphy"
9
- version = "3.0.4"
9
+ version = "3.2.0"
10
10
  readme = "README.md"
11
11
  requires-python = ">=3.10"
12
12
  authors = [
@@ -23,70 +23,77 @@ classifiers = [
23
23
  "Programming Language :: Python :: 3",
24
24
  ]
25
25
  dependencies = [
26
- "numpy<=2.2.6",
27
- "cunumpy<=0.1",
28
- "pyccel<=2.2.0, >=2.2.0",
26
+ "numpy<=2.4.3",
27
+ "cunumpy<=0.1.1",
28
+ "pyccel>=2.2.0, <=2.2.3",
29
29
  "feectools<=0.1.3",
30
- "scipy<=1.15.3",
31
- "h5py<=3.15.1",
32
- "matplotlib<=3.10.7",
30
+ "scipy<=1.17.1",
31
+ "h5py<=3.16.0",
32
+ "matplotlib<=3.10.8",
33
33
  "pyyaml<=6.0.3",
34
- "vtk<=9.6.0",
35
- "tqdm<=4.67.3",
34
+ "vtk<=9.6.1",
35
+ "tqdm<=4.68.1",
36
36
  "argcomplete<=3.6.3",
37
- "plotly<=6.4.0",
38
- "pytest<=9.0.2",
37
+ "ipywidgets<=8.1.8",
38
+ "plotly<=6.8.0",
39
+ "pyvista<=0.48.0",
40
+ "trame<=3.13.0",
41
+ "trame-vtk<=2.11.8",
42
+ "trame-vuetify<=3.2.2",
43
+ "nest_asyncio2<=1.7.2",
44
+ "vtk<=9.6.1",
45
+ "pytest<=9.0.3",
39
46
  "pytest-mpi<=0.6",
40
47
  "pytest-testmon<=2.2.0",
48
+ "ruff>=0.15.0, <=0.15.12",
41
49
  "line_profiler<=5.0.2",
42
- "scope-profiler<=0.1.7, >=0.1.7",
50
+ "scope-profiler>=0.1.7, <=0.1.9",
43
51
  ]
44
52
 
45
53
  [project.license]
46
54
  file = "LICENSE"
47
55
 
48
56
  [project.optional-dependencies]
57
+ mpi = [
58
+ "mpi4py<=4.1.1",
59
+ ]
49
60
  phys = [
50
- "gvec<=1.3.1, >=1.1.0",
51
- "desc-opt<=0.16.0",
61
+ "gvec>=1.1.0, <=1.4.1",
62
+ "desc-opt<=0.17.1",
52
63
  ]
53
64
  dev = [
54
65
  "struphy[mpi]",
55
- "notebook<=7.5.4",
56
- "autopep8<=2.3.2",
57
- "isort<=8.0.0",
58
- "flake8<=7.3.0",
59
- "pylint<=4.0.5",
60
- "ssort<=0.16.0",
61
- "add-trailing-comma<=4.0.0",
62
- "ruff<=0.15.4, >=0.15.0",
63
- "pre-commit<=4.5.1",
64
- "nbstripout<=0.9.1",
65
- "tabulate<=0.9.0",
66
- "tomli-w<=1.2.0",
67
- "kaleido<=1.2.0",
68
- "pandas<=3.0.1",
69
- ]
70
- mpi = [
71
- "mpi4py<=4.1.1",
66
+ "notebook",
67
+ "autopep8",
68
+ "isort",
69
+ "flake8",
70
+ "pylint",
71
+ "ssort",
72
+ "add-trailing-comma",
73
+ "pre-commit",
74
+ "nbstripout",
75
+ "tabulate",
76
+ "tomli-w",
77
+ "kaleido",
78
+ "pandas",
72
79
  ]
73
80
  doc = [
74
81
  "struphy[phys]",
75
- "jupyter<=1.1.1",
76
- "nbconvert<=6.5.4",
77
- "ipykernel<=7.2.0",
78
- "sphinx<=9.1.0",
79
- "sphinx-design<=0.7.0",
80
- "lxml_html_clean<=0.4.4",
81
- "sphinxcontrib-napoleon<=0.7",
82
- "sphinx-copybutton<=0.5.2",
83
- "pydata-sphinx-theme<=0.16.1",
84
- "nbsphinx<=0.9.8",
85
- "m2r2<=0.3.4",
86
- "myst-parser<=5.0.0",
87
- "mistune<=0.8.4",
88
- "docutils<=0.22.4",
89
- "ipyparallel<=9.0.2",
82
+ "jupyter",
83
+ "nbconvert",
84
+ "ipykernel",
85
+ "sphinx",
86
+ "sphinx-design",
87
+ "lxml_html_clean",
88
+ "sphinxcontrib-napoleon",
89
+ "sphinx-copybutton",
90
+ "sphinx-collections",
91
+ "pydata-sphinx-theme",
92
+ "nbsphinx",
93
+ "m2r2",
94
+ "myst-parser",
95
+ "docutils",
96
+ "ipyparallel",
90
97
  ]
91
98
  likwid = [
92
99
  "struphy[dev]",