PyParticles3 0.4.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 (152) hide show
  1. pyparticles3-0.4.0/CHANGELOG.md +116 -0
  2. pyparticles3-0.4.0/LICENSE-gpl-3.0.txt +674 -0
  3. pyparticles3-0.4.0/MANIFEST.in +8 -0
  4. pyparticles3-0.4.0/PKG-INFO +395 -0
  5. pyparticles3-0.4.0/PUBLISHING.md +214 -0
  6. pyparticles3-0.4.0/PyParticles3.egg-info/PKG-INFO +395 -0
  7. pyparticles3-0.4.0/PyParticles3.egg-info/SOURCES.txt +150 -0
  8. pyparticles3-0.4.0/PyParticles3.egg-info/dependency_links.txt +1 -0
  9. pyparticles3-0.4.0/PyParticles3.egg-info/entry_points.txt +3 -0
  10. pyparticles3-0.4.0/PyParticles3.egg-info/requires.txt +16 -0
  11. pyparticles3-0.4.0/PyParticles3.egg-info/top_level.txt +1 -0
  12. pyparticles3-0.4.0/README.md +354 -0
  13. pyparticles3-0.4.0/README.rst +149 -0
  14. pyparticles3-0.4.0/doc/Config File.rst +184 -0
  15. pyparticles3-0.4.0/doc/Logo/pyparticles_logo.svg +439 -0
  16. pyparticles3-0.4.0/doc/Makefile +153 -0
  17. pyparticles3-0.4.0/doc/Packages Descriptions.rst +0 -0
  18. pyparticles3-0.4.0/doc/Programming Example II.rst +164 -0
  19. pyparticles3-0.4.0/doc/Programming Example.rst +257 -0
  20. pyparticles3-0.4.0/doc/Testing.rst +228 -0
  21. pyparticles3-0.4.0/doc/conf.py +242 -0
  22. pyparticles3-0.4.0/doc/img/dam_an.jpg +0 -0
  23. pyparticles3-0.4.0/doc/img/dhar.png +0 -0
  24. pyparticles3-0.4.0/doc/img/fall.png +0 -0
  25. pyparticles3-0.4.0/doc/img/fall_an.jpg +0 -0
  26. pyparticles3-0.4.0/doc/img/har.png +0 -0
  27. pyparticles3-0.4.0/doc/img/har_an.jpg +0 -0
  28. pyparticles3-0.4.0/doc/index.rst +158 -0
  29. pyparticles3-0.4.0/doc/intro.rst +4 -0
  30. pyparticles3-0.4.0/doc/logo.png +0 -0
  31. pyparticles3-0.4.0/doc/logo_pyp.png +0 -0
  32. pyparticles3-0.4.0/doc/make.bat +190 -0
  33. pyparticles3-0.4.0/doc/modules.rst +7 -0
  34. pyparticles3-0.4.0/doc/pyparticles.animation.rst +46 -0
  35. pyparticles3-0.4.0/doc/pyparticles.demo.rst +59 -0
  36. pyparticles3-0.4.0/doc/pyparticles.forces.rst +135 -0
  37. pyparticles3-0.4.0/doc/pyparticles.geometry.rst +35 -0
  38. pyparticles3-0.4.0/doc/pyparticles.main.rst +19 -0
  39. pyparticles3-0.4.0/doc/pyparticles.measures.rst +67 -0
  40. pyparticles3-0.4.0/doc/pyparticles.ode.rst +116 -0
  41. pyparticles3-0.4.0/doc/pyparticles.ogl.rst +51 -0
  42. pyparticles3-0.4.0/doc/pyparticles.pset.rst +111 -0
  43. pyparticles3-0.4.0/doc/pyparticles.rst +27 -0
  44. pyparticles3-0.4.0/doc/pyparticles.utils.rst +43 -0
  45. pyparticles3-0.4.0/example/cluster_demo.cfg +58 -0
  46. pyparticles3-0.4.0/example/solar_sys.csv +11 -0
  47. pyparticles3-0.4.0/example/solar_system.csv +13 -0
  48. pyparticles3-0.4.0/man/install.sh +18 -0
  49. pyparticles3-0.4.0/man/pyparticles.1 +21 -0
  50. pyparticles3-0.4.0/pyparticles/__init__.py +26 -0
  51. pyparticles3-0.4.0/pyparticles/__main__.py +7 -0
  52. pyparticles3-0.4.0/pyparticles/animation/__init__.py +21 -0
  53. pyparticles3-0.4.0/pyparticles/animation/animated_cli.py +53 -0
  54. pyparticles3-0.4.0/pyparticles/animation/animated_ogl.py +691 -0
  55. pyparticles3-0.4.0/pyparticles/animation/animated_ogl_compat.py +243 -0
  56. pyparticles3-0.4.0/pyparticles/animation/animated_scatter.py +94 -0
  57. pyparticles3-0.4.0/pyparticles/animation/animation.py +251 -0
  58. pyparticles3-0.4.0/pyparticles/animation/test_animation.py +310 -0
  59. pyparticles3-0.4.0/pyparticles/demo/__init__.py +33 -0
  60. pyparticles3-0.4.0/pyparticles/demo/bubble.py +106 -0
  61. pyparticles3-0.4.0/pyparticles/demo/electromagnetic_demo.py +128 -0
  62. pyparticles3-0.4.0/pyparticles/demo/electrostatic_demo.py +126 -0
  63. pyparticles3-0.4.0/pyparticles/demo/fountain.py +478 -0
  64. pyparticles3-0.4.0/pyparticles/demo/gas_lennard_jones.py +87 -0
  65. pyparticles3-0.4.0/pyparticles/demo/gravity_clusters.py +73 -0
  66. pyparticles3-0.4.0/pyparticles/demo/solar_system.py +222 -0
  67. pyparticles3-0.4.0/pyparticles/demo/springs.py +141 -0
  68. pyparticles3-0.4.0/pyparticles/demo/springs_constr.py +135 -0
  69. pyparticles3-0.4.0/pyparticles/demo/test.py +34 -0
  70. pyparticles3-0.4.0/pyparticles/forces/__init__.py +21 -0
  71. pyparticles3-0.4.0/pyparticles/forces/const_force.py +140 -0
  72. pyparticles3-0.4.0/pyparticles/forces/damping.py +174 -0
  73. pyparticles3-0.4.0/pyparticles/forces/drag.py +167 -0
  74. pyparticles3-0.4.0/pyparticles/forces/electromagnetic.py +105 -0
  75. pyparticles3-0.4.0/pyparticles/forces/electromagnetic_field.py +95 -0
  76. pyparticles3-0.4.0/pyparticles/forces/electrostatic.py +72 -0
  77. pyparticles3-0.4.0/pyparticles/forces/force.py +75 -0
  78. pyparticles3-0.4.0/pyparticles/forces/force_constrained.py +32 -0
  79. pyparticles3-0.4.0/pyparticles/forces/fused_const_drag.py +445 -0
  80. pyparticles3-0.4.0/pyparticles/forces/gravity.py +345 -0
  81. pyparticles3-0.4.0/pyparticles/forces/lennard_jones.py +74 -0
  82. pyparticles3-0.4.0/pyparticles/forces/linear_spring.py +86 -0
  83. pyparticles3-0.4.0/pyparticles/forces/linear_spring_constrained.py +72 -0
  84. pyparticles3-0.4.0/pyparticles/forces/multiple_force.py +134 -0
  85. pyparticles3-0.4.0/pyparticles/forces/pseudo_bubble.py +226 -0
  86. pyparticles3-0.4.0/pyparticles/forces/van_der_waals_force.py +60 -0
  87. pyparticles3-0.4.0/pyparticles/forces/vector_field_force.py +52 -0
  88. pyparticles3-0.4.0/pyparticles/geometry/__init__.py +21 -0
  89. pyparticles3-0.4.0/pyparticles/geometry/dist.py +24 -0
  90. pyparticles3-0.4.0/pyparticles/geometry/intersection.py +62 -0
  91. pyparticles3-0.4.0/pyparticles/geometry/transformations.py +387 -0
  92. pyparticles3-0.4.0/pyparticles/main/__init__.py +21 -0
  93. pyparticles3-0.4.0/pyparticles/main/main.py +466 -0
  94. pyparticles3-0.4.0/pyparticles/measures/__init__.py +21 -0
  95. pyparticles3-0.4.0/pyparticles/measures/elastic_potential_energy.py +67 -0
  96. pyparticles3-0.4.0/pyparticles/measures/gravitational_potential_energy.py +69 -0
  97. pyparticles3-0.4.0/pyparticles/measures/kinetic_energy.py +68 -0
  98. pyparticles3-0.4.0/pyparticles/measures/mass.py +59 -0
  99. pyparticles3-0.4.0/pyparticles/measures/measure.py +156 -0
  100. pyparticles3-0.4.0/pyparticles/measures/momentum.py +144 -0
  101. pyparticles3-0.4.0/pyparticles/measures/total_energy.py +68 -0
  102. pyparticles3-0.4.0/pyparticles/ode/__init__.py +21 -0
  103. pyparticles3-0.4.0/pyparticles/ode/euler_solver.py +214 -0
  104. pyparticles3-0.4.0/pyparticles/ode/euler_solver_constrained.py +49 -0
  105. pyparticles3-0.4.0/pyparticles/ode/leapfrog_solver.py +37 -0
  106. pyparticles3-0.4.0/pyparticles/ode/leapfrog_solver_constrained.py +53 -0
  107. pyparticles3-0.4.0/pyparticles/ode/midpoint_solver.py +43 -0
  108. pyparticles3-0.4.0/pyparticles/ode/midpoint_solver_constrained.py +60 -0
  109. pyparticles3-0.4.0/pyparticles/ode/ode_solver.py +134 -0
  110. pyparticles3-0.4.0/pyparticles/ode/ode_solver_constrained.py +43 -0
  111. pyparticles3-0.4.0/pyparticles/ode/runge_kutta_solver.py +79 -0
  112. pyparticles3-0.4.0/pyparticles/ode/runge_kutta_solver_constrained.py +98 -0
  113. pyparticles3-0.4.0/pyparticles/ode/sim_time.py +56 -0
  114. pyparticles3-0.4.0/pyparticles/ode/stormer_verlet_solver.py +50 -0
  115. pyparticles3-0.4.0/pyparticles/ode/stormer_verlet_solver_constrained.py +73 -0
  116. pyparticles3-0.4.0/pyparticles/ogl/__init__.py +21 -0
  117. pyparticles3-0.4.0/pyparticles/ogl/axis_ogl.py +210 -0
  118. pyparticles3-0.4.0/pyparticles/ogl/draw_particles_ogl.py +313 -0
  119. pyparticles3-0.4.0/pyparticles/ogl/draw_particles_ogl_compat.py +509 -0
  120. pyparticles3-0.4.0/pyparticles/ogl/draw_vector_field.py +221 -0
  121. pyparticles3-0.4.0/pyparticles/ogl/opencl_gl_vbo.py +485 -0
  122. pyparticles3-0.4.0/pyparticles/ogl/trackball.py +131 -0
  123. pyparticles3-0.4.0/pyparticles/ogl/translate_scene.py +87 -0
  124. pyparticles3-0.4.0/pyparticles/pset/__init__.py +21 -0
  125. pyparticles3-0.4.0/pyparticles/pset/boundary.py +69 -0
  126. pyparticles3-0.4.0/pyparticles/pset/cluster.py +28 -0
  127. pyparticles3-0.4.0/pyparticles/pset/constrained_force_interactions.py +63 -0
  128. pyparticles3-0.4.0/pyparticles/pset/constrained_x.py +158 -0
  129. pyparticles3-0.4.0/pyparticles/pset/constraint.py +42 -0
  130. pyparticles3-0.4.0/pyparticles/pset/default_boundary.py +43 -0
  131. pyparticles3-0.4.0/pyparticles/pset/file_cluster.py +131 -0
  132. pyparticles3-0.4.0/pyparticles/pset/logger.py +152 -0
  133. pyparticles3-0.4.0/pyparticles/pset/octree.py +451 -0
  134. pyparticles3-0.4.0/pyparticles/pset/opencl_context.py +374 -0
  135. pyparticles3-0.4.0/pyparticles/pset/particles_set.py +499 -0
  136. pyparticles3-0.4.0/pyparticles/pset/periodic_boundary.py +36 -0
  137. pyparticles3-0.4.0/pyparticles/pset/rand_cluster.py +188 -0
  138. pyparticles3-0.4.0/pyparticles/pset/rebound_boundary.py +68 -0
  139. pyparticles3-0.4.0/pyparticles/utils/__init__.py +21 -0
  140. pyparticles3-0.4.0/pyparticles/utils/parse_args.py +72 -0
  141. pyparticles3-0.4.0/pyparticles/utils/problem_config.py +608 -0
  142. pyparticles3-0.4.0/pyparticles/utils/pypart_global.py +122 -0
  143. pyparticles3-0.4.0/pyparticles/utils/time_formatter.py +50 -0
  144. pyparticles3-0.4.0/pyproject.toml +78 -0
  145. pyparticles3-0.4.0/setup.cfg +4 -0
  146. pyparticles3-0.4.0/setup.py +11 -0
  147. pyparticles3-0.4.0/tests/test_demo_compat.py +246 -0
  148. pyparticles3-0.4.0/tests/test_opencl_compute_only.py +161 -0
  149. pyparticles3-0.4.0/tests/test_opencl_device_selection.py +82 -0
  150. pyparticles3-0.4.0/tests/test_opencl_regression.py +255 -0
  151. pyparticles3-0.4.0/tests/test_opencl_residency.py +128 -0
  152. pyparticles3-0.4.0/tests/test_particles_set_compat.py +38 -0
@@ -0,0 +1,116 @@
1
+ # Changelog
2
+
3
+ All notable changes to the modernized distribution are documented here.
4
+
5
+ ## 0.4.0 - 2026-09-01
6
+
7
+ First stable PyParticles3 release after the `0.4.0rc1` and `0.4.0rc2` validation cycle.
8
+
9
+ ### Release status
10
+
11
+ - promote the validated `0.4.0rc2` code path to the stable `0.4.0` version;
12
+ - keep the historical Python import namespace `pyparticles` while publishing the distribution as `PyParticles3`;
13
+ - keep the `pyparticles3`, `pyparticles_app`, and `python -m pyparticles` entry points;
14
+ - retain Python 3.11, 3.12, and 3.13 CI coverage;
15
+ - retain PyPI Trusted Publishing through GitHub Actions OIDC.
16
+
17
+ ### Installation and OpenCL documentation
18
+
19
+ - make the stable PyPI installation commands explicit;
20
+ - distinguish PyOpenCL OpenCL-compute support from OpenCL/OpenGL interoperability;
21
+ - document `pyopencl.have_gl()` verification;
22
+ - document Debian-family native build prerequisites;
23
+ - document the validated PyOpenCL 2026.1.4 source-build procedure using `PYOPENCL_ENABLE_GL=ON` and `--no-binary=pyopencl`;
24
+ - document that an explicit `PYOPENCL_CTX` selection remains authoritative even when the selected device cannot use `cl_khr_gl_sharing`.
25
+
26
+ ### Validation inherited from rc2
27
+
28
+ The final release is based on the rc2 code path that passed:
29
+
30
+ - clean PyPI installation and CLI smoke tests;
31
+ - OpenCL gravity and integration validation on NVIDIA GPU and Intel CPU implementations;
32
+ - persistent device-residency and transfer-accounting tests;
33
+ - NVIDIA OpenCL/OpenGL shared-buffer rendering;
34
+ - Intel explicit-device fallback without silent migration to NVIDIA;
35
+ - a 2,000,000-particle fountain baseline of roughly 278-296 FPS on a GeForce GTX 1060 6 GB, with fused physics around 0.760 ms and the device-side X-to-VBO copy around 0.324 ms.
36
+
37
+ No physics algorithm or OpenCL kernel behavior is intentionally changed between the validated rc2 code path and the final `0.4.0` release preparation.
38
+
39
+ ## 0.4.0rc2 - release candidate
40
+
41
+ Follow-up release candidate based on installation and multi-ICD validation of `0.4.0rc1`.
42
+
43
+ ### OpenCL/OpenGL interoperability
44
+
45
+ - document that `PyParticles3[opencl]` guarantees OpenCL compute support but does not guarantee a PyOpenCL build with OpenGL interoperability;
46
+ - add an explicit runtime warning when `pyopencl.have_gl()` is `False`;
47
+ - document rebuilding PyOpenCL from source with `PYOPENCL_ENABLE_GL=ON` and verifying `pyopencl.have_gl() is True`;
48
+ - preserve an explicit `PYOPENCL_CTX` device selection when creating a CL/GL sharing context;
49
+ - do not silently migrate an explicitly selected Intel CPU OpenCL workload to an NVIDIA GPU merely to obtain `cl_khr_gl_sharing`;
50
+ - improve CL/GL failure messages so host-synchronized fallback identifies why sharing is unavailable.
51
+
52
+ ### Validation
53
+
54
+ - published `PyParticles3 0.4.0rc2` to PyPI using GitHub Actions Trusted Publishing/OIDC;
55
+ - validated a clean PyPI installation and all published CLI entry points;
56
+ - validated that the standard PyOpenCL wheel can report `have_gl=False` and that PyParticles3 emits the intended diagnostic while retaining OpenCL compute support;
57
+ - rebuilt PyOpenCL 2026.1.4 from source with `PYOPENCL_ENABLE_GL=ON` and validated `pyopencl.have_gl() is True`;
58
+ - validated OpenCL gravity kernels on NVIDIA GTX 1060 and Intel Xeon E5-2697 v2 OpenCL implementations;
59
+ - validated CPU/OpenCL numerical agreement over complete Euler integration runs;
60
+ - validated persistent X/V device residency and transfer accounting;
61
+ - validated the high-performance fountain CL/GL path on NVIDIA;
62
+ - validated that `PYOPENCL_CTX=1:0` keeps Intel selected and explicitly falls back to host synchronization when the Intel device does not advertise `cl_khr_gl_sharing`;
63
+ - validated a 2,000,000-particle fountain baseline on a GeForce GTX 1060 6 GB at roughly 278-296 FPS, with the fused physics kernel around 0.760 ms and X-to-VBO device copy around 0.324 ms.
64
+
65
+ ## 0.4.0rc1 - release candidate
66
+
67
+ First release candidate under the **PyParticles3** distribution name.
68
+
69
+ ### Packaging
70
+
71
+ - replace legacy `distutils` metadata with `pyproject.toml` and `setuptools.build_meta`;
72
+ - add wheel and source-distribution builds;
73
+ - add `pyparticles3` console entry point while preserving `pyparticles_app`;
74
+ - add `python -m pyparticles` entry point;
75
+ - declare PyPI project URLs pointing to the modern GitHub repository;
76
+ - add PyPI Trusted Publishing workflow using GitHub Actions OIDC;
77
+ - add CI build/install smoke tests;
78
+ - preserve GPL-3.0-or-later licensing and original Simone Riva attribution.
79
+
80
+ ### Python and scientific stack modernization
81
+
82
+ - Python 3 compatibility work;
83
+ - NumPy 2 compatibility fixes;
84
+ - modern SciPy sparse API usage;
85
+ - modern PyOpenGL/FreeGLUT compatibility layer;
86
+ - modern PyOpenCL API compatibility.
87
+
88
+ ### OpenCL
89
+
90
+ - persistent device buffers and host/device residency tracking;
91
+ - accelerated gravity, drag, Euler and selected demo paths;
92
+ - compute-only modes that avoid unnecessary host synchronization;
93
+ - fused fountain force/integration/boundary kernel.
94
+
95
+ ### OpenCL/OpenGL interoperability
96
+
97
+ - OpenGL VBOs shared with OpenCL through `cl_khr_gl_sharing`;
98
+ - double-buffered shared position VBOs;
99
+ - per-buffer OpenGL fences;
100
+ - optional fused simulation-to-render VBO mirror;
101
+ - deterministic cleanup of shared resources before GL context shutdown.
102
+
103
+ ### Profiling and rendering
104
+
105
+ - OpenCL event profiling;
106
+ - asynchronous `GL_TIME_ELAPSED` particle draw profiling;
107
+ - controlled OpenGL benchmark modes;
108
+ - `no_msaa` optimized default for the fountain demo;
109
+ - CL/GL frame profiler for reproducible performance analysis.
110
+
111
+ ### Tests
112
+
113
+ - compatibility and numerical regression tests;
114
+ - OpenCL compute tests when a usable device is available;
115
+ - fused fountain render-mirror correctness test;
116
+ - cleanup callback lifetime regression test.