PyParticles3 0.4.0rc1__py3-none-any.whl

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 (100) hide show
  1. pyparticles/__init__.py +26 -0
  2. pyparticles/__main__.py +7 -0
  3. pyparticles/animation/__init__.py +21 -0
  4. pyparticles/animation/animated_cli.py +53 -0
  5. pyparticles/animation/animated_ogl.py +691 -0
  6. pyparticles/animation/animated_ogl_compat.py +243 -0
  7. pyparticles/animation/animated_scatter.py +94 -0
  8. pyparticles/animation/animation.py +251 -0
  9. pyparticles/animation/test_animation.py +310 -0
  10. pyparticles/demo/__init__.py +33 -0
  11. pyparticles/demo/bubble.py +106 -0
  12. pyparticles/demo/electromagnetic_demo.py +128 -0
  13. pyparticles/demo/electrostatic_demo.py +126 -0
  14. pyparticles/demo/fountain.py +478 -0
  15. pyparticles/demo/gas_lennard_jones.py +87 -0
  16. pyparticles/demo/gravity_clusters.py +73 -0
  17. pyparticles/demo/solar_system.py +222 -0
  18. pyparticles/demo/springs.py +141 -0
  19. pyparticles/demo/springs_constr.py +135 -0
  20. pyparticles/demo/test.py +34 -0
  21. pyparticles/forces/__init__.py +21 -0
  22. pyparticles/forces/const_force.py +140 -0
  23. pyparticles/forces/damping.py +174 -0
  24. pyparticles/forces/drag.py +167 -0
  25. pyparticles/forces/electromagnetic.py +105 -0
  26. pyparticles/forces/electromagnetic_field.py +95 -0
  27. pyparticles/forces/electrostatic.py +72 -0
  28. pyparticles/forces/force.py +75 -0
  29. pyparticles/forces/force_constrained.py +32 -0
  30. pyparticles/forces/fused_const_drag.py +445 -0
  31. pyparticles/forces/gravity.py +345 -0
  32. pyparticles/forces/lennard_jones.py +74 -0
  33. pyparticles/forces/linear_spring.py +86 -0
  34. pyparticles/forces/linear_spring_constrained.py +72 -0
  35. pyparticles/forces/multiple_force.py +134 -0
  36. pyparticles/forces/pseudo_bubble.py +226 -0
  37. pyparticles/forces/van_der_waals_force.py +60 -0
  38. pyparticles/forces/vector_field_force.py +52 -0
  39. pyparticles/geometry/__init__.py +21 -0
  40. pyparticles/geometry/dist.py +24 -0
  41. pyparticles/geometry/intersection.py +62 -0
  42. pyparticles/geometry/transformations.py +387 -0
  43. pyparticles/main/__init__.py +21 -0
  44. pyparticles/main/main.py +466 -0
  45. pyparticles/measures/__init__.py +21 -0
  46. pyparticles/measures/elastic_potential_energy.py +67 -0
  47. pyparticles/measures/gravitational_potential_energy.py +69 -0
  48. pyparticles/measures/kinetic_energy.py +68 -0
  49. pyparticles/measures/mass.py +59 -0
  50. pyparticles/measures/measure.py +156 -0
  51. pyparticles/measures/momentum.py +144 -0
  52. pyparticles/measures/total_energy.py +68 -0
  53. pyparticles/ode/__init__.py +21 -0
  54. pyparticles/ode/euler_solver.py +214 -0
  55. pyparticles/ode/euler_solver_constrained.py +49 -0
  56. pyparticles/ode/leapfrog_solver.py +37 -0
  57. pyparticles/ode/leapfrog_solver_constrained.py +53 -0
  58. pyparticles/ode/midpoint_solver.py +43 -0
  59. pyparticles/ode/midpoint_solver_constrained.py +60 -0
  60. pyparticles/ode/ode_solver.py +134 -0
  61. pyparticles/ode/ode_solver_constrained.py +43 -0
  62. pyparticles/ode/runge_kutta_solver.py +79 -0
  63. pyparticles/ode/runge_kutta_solver_constrained.py +98 -0
  64. pyparticles/ode/sim_time.py +56 -0
  65. pyparticles/ode/stormer_verlet_solver.py +50 -0
  66. pyparticles/ode/stormer_verlet_solver_constrained.py +73 -0
  67. pyparticles/ogl/__init__.py +21 -0
  68. pyparticles/ogl/axis_ogl.py +210 -0
  69. pyparticles/ogl/draw_particles_ogl.py +313 -0
  70. pyparticles/ogl/draw_particles_ogl_compat.py +509 -0
  71. pyparticles/ogl/draw_vector_field.py +221 -0
  72. pyparticles/ogl/opencl_gl_vbo.py +485 -0
  73. pyparticles/ogl/trackball.py +131 -0
  74. pyparticles/ogl/translate_scene.py +87 -0
  75. pyparticles/pset/__init__.py +21 -0
  76. pyparticles/pset/boundary.py +69 -0
  77. pyparticles/pset/cluster.py +28 -0
  78. pyparticles/pset/constrained_force_interactions.py +63 -0
  79. pyparticles/pset/constrained_x.py +158 -0
  80. pyparticles/pset/constraint.py +42 -0
  81. pyparticles/pset/default_boundary.py +43 -0
  82. pyparticles/pset/file_cluster.py +131 -0
  83. pyparticles/pset/logger.py +152 -0
  84. pyparticles/pset/octree.py +451 -0
  85. pyparticles/pset/opencl_context.py +335 -0
  86. pyparticles/pset/particles_set.py +499 -0
  87. pyparticles/pset/periodic_boundary.py +36 -0
  88. pyparticles/pset/rand_cluster.py +188 -0
  89. pyparticles/pset/rebound_boundary.py +68 -0
  90. pyparticles/utils/__init__.py +21 -0
  91. pyparticles/utils/parse_args.py +72 -0
  92. pyparticles/utils/problem_config.py +608 -0
  93. pyparticles/utils/pypart_global.py +87 -0
  94. pyparticles/utils/time_formatter.py +50 -0
  95. pyparticles3-0.4.0rc1.dist-info/METADATA +196 -0
  96. pyparticles3-0.4.0rc1.dist-info/RECORD +100 -0
  97. pyparticles3-0.4.0rc1.dist-info/WHEEL +5 -0
  98. pyparticles3-0.4.0rc1.dist-info/entry_points.txt +3 -0
  99. pyparticles3-0.4.0rc1.dist-info/licenses/LICENSE-gpl-3.0.txt +674 -0
  100. pyparticles3-0.4.0rc1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,50 @@
1
+ # PyParticles : Particles simulation in python
2
+ # Copyright (C) 2012 Simone Riva
3
+ #
4
+ # This program is free software: you can redistribute it and/or modify
5
+ # it under the terms of the GNU General Public License as published by
6
+ # the Free Software Foundation, either version 3 of the License, or
7
+ # (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU General Public License
15
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
+
17
+
18
+ import time
19
+
20
+ class MyTimeFormatter( object ):
21
+
22
+ def __init__(self):
23
+ pass
24
+
25
+
26
+ def to_str( self , t ):
27
+
28
+ tf = [ "%4dy " , "%3dd " , "%02dh " , "%02dm " , "%02ds " , "%07.3fms " ]
29
+
30
+ days_y = 365.256363004
31
+ sec_y = days_y * 3600 * 24
32
+
33
+ years = int( t / sec_y )
34
+ days = int( t / (3600*24) - years*days_y )
35
+ hr = int( t / 3600 - days*24 - days_y*years*24 )
36
+ minu = int( t / 60 - hr*60 - days*(24*60) - days_y*years*24*60 )
37
+ sec = int( t - minu*60 - hr*3600 - days*(24*3600) - days_y*years*24*60*60 )
38
+ msec = float( 1000 * ( t - int( t ) ) )
39
+
40
+ res = ""
41
+
42
+ i = 0
43
+ f = False
44
+ for tt in list( [ years , days , hr , minu , sec , msec ] ):
45
+ if tt > 0 or f :
46
+ res = res + tf[i] % tt
47
+ f = True
48
+ i+=1
49
+
50
+ return res
@@ -0,0 +1,196 @@
1
+ Metadata-Version: 2.4
2
+ Name: PyParticles3
3
+ Version: 0.4.0rc1
4
+ Summary: Modern educational particle simulation toolbox with OpenCL/OpenGL acceleration
5
+ Author: Simone Riva
6
+ Maintainer: jamaj69
7
+ License-Expression: GPL-3.0-or-later
8
+ Project-URL: Homepage, https://github.com/jamaj69/pyparticles
9
+ Project-URL: Source, https://github.com/jamaj69/pyparticles
10
+ Project-URL: Documentation, https://github.com/jamaj69/pyparticles#readme
11
+ Project-URL: Issues, https://github.com/jamaj69/pyparticles/issues
12
+ Project-URL: Original Project, https://github.com/simon-r/PyParticles
13
+ Keywords: particles,simulation,physics,opencl,opengl,gpu,scientific-computing,education
14
+ Classifier: Development Status :: 4 - Beta
15
+ Classifier: Intended Audience :: Education
16
+ Classifier: Intended Audience :: Science/Research
17
+ Classifier: Topic :: Scientific/Engineering :: Physics
18
+ Classifier: Topic :: Scientific/Engineering :: Mathematics
19
+ Classifier: Programming Language :: Python :: 3
20
+ Classifier: Programming Language :: Python :: 3.11
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Programming Language :: Python :: 3.13
23
+ Classifier: Operating System :: POSIX :: Linux
24
+ Requires-Python: >=3.11
25
+ Description-Content-Type: text/markdown
26
+ License-File: LICENSE-gpl-3.0.txt
27
+ Requires-Dist: numpy>=2.0
28
+ Requires-Dist: scipy>=1.14
29
+ Requires-Dist: PyOpenGL>=3.1.7
30
+ Requires-Dist: matplotlib>=3.8
31
+ Provides-Extra: opencl
32
+ Requires-Dist: pyopencl>=2026.1; extra == "opencl"
33
+ Provides-Extra: dev
34
+ Requires-Dist: build>=1.2; extra == "dev"
35
+ Requires-Dist: twine>=5; extra == "dev"
36
+ Provides-Extra: docs
37
+ Requires-Dist: mkdocs>=1.6; extra == "docs"
38
+ Requires-Dist: mkdocs-material>=9.5; extra == "docs"
39
+ Requires-Dist: pymdown-extensions>=10; extra == "docs"
40
+ Dynamic: license-file
41
+
42
+ # PyParticles3
43
+
44
+ **PyParticles3** is an independent modernization and continuation of Simone Riva's original **PyParticles** project.
45
+
46
+ The goal is to preserve the original project's unusually clear, educational architecture while updating it for modern Python, NumPy, SciPy, PyOpenGL and PyOpenCL environments. PyParticles3 is also a practical study project for GPU particle simulation, OpenCL acceleration and OpenCL/OpenGL interoperability.
47
+
48
+ > PyParticles3 is not presented as an official release endorsed by Simone Riva. Original copyright notices and the GPL-3.0-or-later license are preserved.
49
+
50
+ ## Highlights
51
+
52
+ - simple `ParticlesSet -> Force -> Solver -> Animation/Renderer` architecture;
53
+ - Euler, Leapfrog, Runge-Kutta, Midpoint and Stormer-Verlet style integrators;
54
+ - gravity, springs, constant force, drag, damping, Lennard-Jones, electrostatic and electromagnetic models;
55
+ - constrained particles and constrained force interactions;
56
+ - OpenGL interactive visualization;
57
+ - optional PyOpenCL acceleration;
58
+ - persistent OpenCL buffers to avoid unnecessary PCIe transfers;
59
+ - fused OpenCL integration paths;
60
+ - OpenCL/OpenGL shared VBO rendering;
61
+ - double-buffered CL/GL synchronization with GL fences;
62
+ - asynchronous OpenGL GPU timer queries;
63
+ - an optimized `fountain` example used as a GPU performance case study.
64
+
65
+ ## Installation
66
+
67
+ The first PyPI release is planned as `PyParticles3 0.4.0rc1`.
68
+
69
+ Once published:
70
+
71
+ ```bash
72
+ python -m pip install PyParticles3
73
+ ```
74
+
75
+ For OpenCL support:
76
+
77
+ ```bash
78
+ python -m pip install 'PyParticles3[opencl]'
79
+ ```
80
+
81
+ The OpenCL runtime/ICD and an OpenGL/FreeGLUT implementation are system-level dependencies and are not installed by pip.
82
+
83
+ ## Current import namespace
84
+
85
+ The initial PyParticles3 packaging release intentionally keeps the historical Python import namespace:
86
+
87
+ ```python
88
+ import pyparticles
89
+ ```
90
+
91
+ This avoids mixing a package-wide namespace migration with the packaging release. A future release may introduce a dedicated `pyparticles3` namespace after a controlled compatibility migration.
92
+
93
+ ## Command line
94
+
95
+ The modern package exposes:
96
+
97
+ ```bash
98
+ pyparticles3 --help
99
+ pyparticles3 --version
100
+ ```
101
+
102
+ The historical command is also kept as a compatibility entry point:
103
+
104
+ ```bash
105
+ pyparticles_app --help
106
+ ```
107
+
108
+ Examples:
109
+
110
+ ```bash
111
+ pyparticles3 --demo springs
112
+ pyparticles3 --demo solar_system
113
+ pyparticles3 --demo bubble
114
+ pyparticles3 --demo gas_lj
115
+ pyparticles3 --demo elmag_field
116
+ pyparticles3 --demo galaxy
117
+ pyparticles3 --demo fountain
118
+ ```
119
+
120
+ ## Architecture
121
+
122
+ ```text
123
+ ParticlesSet
124
+ |
125
+ +--> Force / MultipleForce
126
+ | |
127
+ | v
128
+ +----> ODE Solver
129
+ |
130
+ v
131
+ Animation
132
+ |
133
+ v
134
+ Renderer
135
+ ```
136
+
137
+ The accelerated paths preserve these conceptual roles rather than replacing the whole program with an opaque GPU pipeline.
138
+
139
+ ## OpenCL/OpenGL fountain path
140
+
141
+ The modern `fountain` demo can keep simulation state resident on the GPU and render from shared OpenGL buffers. The optimized fused path writes both the canonical OpenCL position buffer and the shared render VBO from the integration kernel, eliminating a separate device-to-device position copy.
142
+
143
+ Profiling can be enabled with:
144
+
145
+ ```bash
146
+ PYPARTICLES_PROFILE_CLGL=1 \
147
+ PYPARTICLES_PROFILE_FRAMES=1000 \
148
+ PYPARTICLES_PROFILE_WARMUP=200 \
149
+ pyparticles3 --demo fountain
150
+ ```
151
+
152
+ The experimental fused render mirror is currently selected with:
153
+
154
+ ```bash
155
+ PYPARTICLES_CLGL_FUSED_MIRROR=1 \
156
+ pyparticles3 --demo fountain
157
+ ```
158
+
159
+ ## Development
160
+
161
+ ```bash
162
+ git clone https://github.com/jamaj69/pyparticles.git
163
+ cd pyparticles
164
+ git switch package/pyparticles3
165
+
166
+ python -m venv .venv
167
+ source .venv/bin/activate
168
+ python -m pip install -U pip
169
+ python -m pip install -e '.[dev]'
170
+
171
+ python -m compileall -q pyparticles tests
172
+ python -W default -m unittest discover -v -s tests
173
+ ```
174
+
175
+ Build the PyPI artifacts with:
176
+
177
+ ```bash
178
+ python -m build
179
+ python -m twine check dist/*
180
+ ```
181
+
182
+ ## Project links
183
+
184
+ - Source: https://github.com/jamaj69/pyparticles
185
+ - Issues: https://github.com/jamaj69/pyparticles/issues
186
+ - Original project: https://github.com/simon-r/PyParticles
187
+
188
+ When releases are published through PyPI Trusted Publishing from this GitHub repository, PyPI can verify the GitHub project links carried in the distribution metadata.
189
+
190
+ ## Origin and attribution
191
+
192
+ PyParticles was created by **Simone Riva** in 2012. PyParticles3 is an independent modernization built from that GPL-licensed codebase. The modernization focuses on Python 3 compatibility, modern scientific Python libraries, testing, GPU acceleration, CL/GL interoperability and documentation while preserving the original educational structure.
193
+
194
+ ## License
195
+
196
+ GPL-3.0-or-later. See `LICENSE-gpl-3.0.txt`.
@@ -0,0 +1,100 @@
1
+ pyparticles/__init__.py,sha256=Mqc8FcYcmqLoqBuFBHNM_hBXQVfeaTpzOaJdmcGRf2s,907
2
+ pyparticles/__main__.py,sha256=DimbxF9a6U_jTcTVs3a4Vq0JtN3v1yizDD3fQCieG3c,161
3
+ pyparticles/animation/__init__.py,sha256=YWGJrPjamB49wRPTqdjfo6-T1lUvlLfshIqUGsPNh4Q,857
4
+ pyparticles/animation/animated_cli.py,sha256=kUlNFN7X2UpmPUOdTZtOlscglcKWDUzVVBH7jyLcBYo,1635
5
+ pyparticles/animation/animated_ogl.py,sha256=nZwq9peYMHakqM0ZAXJbdRCBjR3YQaNYs7pYhPvr96w,20897
6
+ pyparticles/animation/animated_ogl_compat.py,sha256=KQNhmiYYCULXryse3gotOOBOJAx-D4l-vfJ-bv5hMfw,8482
7
+ pyparticles/animation/animated_scatter.py,sha256=xLCOUit0zzT99CZf6pzc6iTe9kRG615-ecYS0Duikow,2961
8
+ pyparticles/animation/animation.py,sha256=axKzZ-9xDDntIY9FG4SBHSXJHIPA0I6HAJqHcO7JbNs,7025
9
+ pyparticles/animation/test_animation.py,sha256=TRbb7wA91Z_VBNFxN-vX5_ovkW8UrcNUxVmBG5_DeFE,9773
10
+ pyparticles/demo/__init__.py,sha256=6X6qEyq3c85ivWMm7vJYWHAGCzI3QSm3tGCd70rujq8,1367
11
+ pyparticles/demo/bubble.py,sha256=J-nzKma90z_ytEPQ0x0Dh9gc9vM8jt4koFSx_GFgccw,2983
12
+ pyparticles/demo/electromagnetic_demo.py,sha256=PmjE1VOXqBNSO6pLIFsu8kWEennCvDPVtWprkumopjE,3932
13
+ pyparticles/demo/electrostatic_demo.py,sha256=fsUBVuVxa84Unh64ptaTomycnz-kbcV0AO_k074cToo,3591
14
+ pyparticles/demo/fountain.py,sha256=PkFya7SRERu7BqM4OC9CLuayV_hUx0xxklFGQ3DBpfY,19268
15
+ pyparticles/demo/gas_lennard_jones.py,sha256=ptFopN54bGSfrrSmcD9OcvdpE58fn3Mu5WQSGimL294,2531
16
+ pyparticles/demo/gravity_clusters.py,sha256=qOApDKIwLsmiotbFGOdsSK_UrIIC7HMUruIhgOb_dgM,2080
17
+ pyparticles/demo/solar_system.py,sha256=H-uxt40m8u_J1qK9aKvIwdcBT1T-CI0IZrXJQLHpSTw,7086
18
+ pyparticles/demo/springs.py,sha256=VthvlgVlX_LAH_Ix-1t5WbCtJfJeoI2q6IupzDTP2dI,3840
19
+ pyparticles/demo/springs_constr.py,sha256=VKl8FCKQHEHqMjiN7RJfGUNjflVwziwz6fHC5PnOxaI,4004
20
+ pyparticles/demo/test.py,sha256=eJgVFAfrik4YDp0LXgxiY52eCp0qSN93G7uwV0BP2io,1097
21
+ pyparticles/forces/__init__.py,sha256=SfGt0zuyycRf9l-_fov-zBtjfdynjlwFTmnT1KgAzQk,858
22
+ pyparticles/forces/const_force.py,sha256=jXw3iszRhG6fo6OJrUCcSO0eEaZ-HOiVV_HJK6N88kU,3948
23
+ pyparticles/forces/damping.py,sha256=jIwWqvlNTYJN-mvXqjE7FFsRicl2GYNV57Fk4rEyrGs,5007
24
+ pyparticles/forces/drag.py,sha256=clZ3X9tHn1z2n8O_BDdoTbV5uyLomR3jt0Y9iFhh7Hg,4730
25
+ pyparticles/forces/electromagnetic.py,sha256=gV3_t7TwWqaoqH_j8nFr2rnUm4VS77VT5f-e8MGyTU0,3308
26
+ pyparticles/forces/electromagnetic_field.py,sha256=2h0Nkoi96AYPXm6ijQquOKjL9ZQE5xXtI04QpnAgC6Y,2651
27
+ pyparticles/forces/electrostatic.py,sha256=nt6DIH1pFr7cx7QJyuQkPAIoOdyTkhI51l5AbU8uVN8,2298
28
+ pyparticles/forces/force.py,sha256=9KiF8mXs_fcNhI3GdNHZLmWWripJEZ4FwHLsGnSTBm0,2710
29
+ pyparticles/forces/force_constrained.py,sha256=pRm1O4LUgiYOuMiNpdKOAF0SYmOh-6LCQEqS6IrSBfs,1185
30
+ pyparticles/forces/fused_const_drag.py,sha256=mtG6YHJP8BCZiCJaMRr-RoJbCGdP_p9isY5ABXY--E0,14692
31
+ pyparticles/forces/gravity.py,sha256=oJBljaDvcHpjag_bm4fHsPTCfxw3raKekUgA4ttsXCc,10487
32
+ pyparticles/forces/lennard_jones.py,sha256=54n1ii1R12qgdpFqThdOPDAecNkbuJWcj4y07FINk7M,2210
33
+ pyparticles/forces/linear_spring.py,sha256=L6VAu251z_BV0-AKX-P-rGpZ33E-kJ_Jv5kKRIHgxYU,2392
34
+ pyparticles/forces/linear_spring_constrained.py,sha256=TDvHHypK3WjDucNfNaidtCLLwYi0GGJLhz35AscrPaw,2172
35
+ pyparticles/forces/multiple_force.py,sha256=KvROEsLMq6BMlH5A9qRG5Z5YPCZnUe19sx7414eB6gw,4500
36
+ pyparticles/forces/pseudo_bubble.py,sha256=NblMuNammFJ9lVOgC11FZrYBLlgtkHlxu0fAt_BF2xo,6400
37
+ pyparticles/forces/van_der_waals_force.py,sha256=8GqaCT10BRq6z3ISsrx7DiCets8Lu1Q4zTm-m45IcdE,1705
38
+ pyparticles/forces/vector_field_force.py,sha256=S-Qps149mRaT_cPtljDg1uuynaHz6dbEMvBBZIsZgfI,1607
39
+ pyparticles/geometry/__init__.py,sha256=SfGt0zuyycRf9l-_fov-zBtjfdynjlwFTmnT1KgAzQk,858
40
+ pyparticles/geometry/dist.py,sha256=q842yPnjeBQkDNgHhNZYjCZKc_NzS2eHM4grSPFcfR0,876
41
+ pyparticles/geometry/intersection.py,sha256=un1gI4SnPF9IeBI0Kh9iO8QgWYOTP-08Wf93Qy_kglk,1932
42
+ pyparticles/geometry/transformations.py,sha256=esfLTNC3I1AfZOrz5KF-2mvOIRy91z2MxiGUGcco2Kc,11728
43
+ pyparticles/main/__init__.py,sha256=SfGt0zuyycRf9l-_fov-zBtjfdynjlwFTmnT1KgAzQk,858
44
+ pyparticles/main/main.py,sha256=kGnRj9e_RbstQKBF51nyM3LWifnzLOFnE4lJ0V9hN54,11817
45
+ pyparticles/measures/__init__.py,sha256=SfGt0zuyycRf9l-_fov-zBtjfdynjlwFTmnT1KgAzQk,858
46
+ pyparticles/measures/elastic_potential_energy.py,sha256=msISBKcyfdbuGOkcnClUX97fwChQoVRTBa8L4CdUSnw,2023
47
+ pyparticles/measures/gravitational_potential_energy.py,sha256=MXxoOhrkpC5_NZhC6BKPn7ZUKHPKB2Lp5gQVjVTLt9I,2100
48
+ pyparticles/measures/kinetic_energy.py,sha256=SE9rwyOoTef9Hn2YgqHe7yeGzT5Npyg1pt4iNMZFyts,1983
49
+ pyparticles/measures/mass.py,sha256=sqW2WtIGw5sSRWj3ZgwGr0Fb5GJm1wwH0g4LMB7O58c,1672
50
+ pyparticles/measures/measure.py,sha256=QFJ_PuaRK4vmVMdO_1o9C0IErh7BTnyLgg7UNei_DnQ,5202
51
+ pyparticles/measures/momentum.py,sha256=jQTGa1wWiQ5rH_3luXD9jhYGqvVTj4CKx6auGf2o2Uc,4267
52
+ pyparticles/measures/total_energy.py,sha256=XKv2_gSwgWpcAEWxek1RXV6bibpKMz0yxPDZLG2i3CY,2045
53
+ pyparticles/ode/__init__.py,sha256=SfGt0zuyycRf9l-_fov-zBtjfdynjlwFTmnT1KgAzQk,858
54
+ pyparticles/ode/euler_solver.py,sha256=CK2sxgiTRRlYxF_59L3dKclYJFFYx_ujM-JHKPbhqYA,7208
55
+ pyparticles/ode/euler_solver_constrained.py,sha256=tD8mffDHMEAXCQdPKQUEH0lCKwPlRkbVeC-zW2PEw9A,2034
56
+ pyparticles/ode/leapfrog_solver.py,sha256=B11_90B0fiwk74yaICMIgEXzMKaieCPHY_ejDEhFQBc,1350
57
+ pyparticles/ode/leapfrog_solver_constrained.py,sha256=C2pg4yoK-Rm71RbSRiLIj3HpbpkxHEBLxh6dBMojmtQ,2312
58
+ pyparticles/ode/midpoint_solver.py,sha256=3DTjWVWrf887x_friEKFd67w0vv1FCfEiOU5U2yzy5c,1544
59
+ pyparticles/ode/midpoint_solver_constrained.py,sha256=ry5P4pJdGmI2jM3-0wRAcAccgU6ZijCfzcLWxdlXEn0,2521
60
+ pyparticles/ode/ode_solver.py,sha256=7xchJu3-iykDUs2ARaBQd9sCAr37aan8sMbPqYc91t8,4085
61
+ pyparticles/ode/ode_solver_constrained.py,sha256=E-iV40jp1SPOfYYIgdjL1N60XujOlGDrsqXEoVxTZw4,1550
62
+ pyparticles/ode/runge_kutta_solver.py,sha256=MzjA_igEg2BeRVfgap44yOC4qPjxoWNKuXFPOoawLdk,2842
63
+ pyparticles/ode/runge_kutta_solver_constrained.py,sha256=Ikd8bBnCkyFtgEOe4TQoX3CCIUnMEY1mnmYtRB7sELg,4171
64
+ pyparticles/ode/sim_time.py,sha256=7ed5q-keQHOylD01SzwONG7HcboUbhqYIJXFtfP6grI,1710
65
+ pyparticles/ode/stormer_verlet_solver.py,sha256=RLLR7K93xNN6m7aeN46VNoIlrrwq4jcjWExQ7IVrkJk,1960
66
+ pyparticles/ode/stormer_verlet_solver_constrained.py,sha256=99Kgt4Q8iszgFyKF4uM7lAk1pNslpoIS_gGPC6gb1hI,3051
67
+ pyparticles/ogl/__init__.py,sha256=SfGt0zuyycRf9l-_fov-zBtjfdynjlwFTmnT1KgAzQk,858
68
+ pyparticles/ogl/axis_ogl.py,sha256=uzE1ipA8_W7dyNvFrfkSkioXlcEA33nSkF8gDsC3n_k,6440
69
+ pyparticles/ogl/draw_particles_ogl.py,sha256=DmSh9PQyUPtDcFUxDgDnHtfhTHbDrm1DYT7fbc6Mhp8,9974
70
+ pyparticles/ogl/draw_particles_ogl_compat.py,sha256=IQb8h9g_ggoNgPk-0bZ48WxMU1v6eVu-nzHLHs1DC3Y,17486
71
+ pyparticles/ogl/draw_vector_field.py,sha256=nS00OXtc1UWzGishL6NaAtn-XAokpf79tdA4nrSobw8,6765
72
+ pyparticles/ogl/opencl_gl_vbo.py,sha256=9Ad7-OXpHjmKTYOjn7AcpHNO88QyWdJ4Sn7xzn9A3XE,17276
73
+ pyparticles/ogl/trackball.py,sha256=N50FiUXBmzoJq-pHP1Ld7g7kCb6kpb8UOHKL5epzNNI,4249
74
+ pyparticles/ogl/translate_scene.py,sha256=MMhNAJD9I9pCunN8-6HsYU8DzniiG6xglhSnPW2zO_4,2440
75
+ pyparticles/pset/__init__.py,sha256=SfGt0zuyycRf9l-_fov-zBtjfdynjlwFTmnT1KgAzQk,858
76
+ pyparticles/pset/boundary.py,sha256=BRCnoVTG41AlO3a7qC90JGEejCumW0cXJDVmUg4Qajk,2134
77
+ pyparticles/pset/cluster.py,sha256=QtALI9BJPwVGHmWU9lPCvyAVjQoBvTxcbqHG9YvSKDM,914
78
+ pyparticles/pset/constrained_force_interactions.py,sha256=PGQMVfX5YNBsXWPVALSsX8F9sZ3hs3VHFhlg1Am2lqw,1961
79
+ pyparticles/pset/constrained_x.py,sha256=5J8hqnRw7If-vm4bbW0g1b5PxT4AyrMuy_DNIAnpSJE,5381
80
+ pyparticles/pset/constraint.py,sha256=dFDxswFsvd0RehC7jO8f_s_aGxp8fEJuvqbupyAXLKc,1128
81
+ pyparticles/pset/default_boundary.py,sha256=s77GDU0_2GyvyZaCgCKotmBED6gwMutclggvHPWYsBE,1441
82
+ pyparticles/pset/file_cluster.py,sha256=sGitftkajVWM5AW--cAYPOEd8NsIksvYWVuyqTO-8Pk,3421
83
+ pyparticles/pset/logger.py,sha256=HkPSKI0jEr-UwHLeyLXTE0EEXXztno5bZolk4Wr-5fg,4707
84
+ pyparticles/pset/octree.py,sha256=G1KMPQTjCmZyR1RJ0IZn_bKpw2cvdodxxqvKjJlLk7k,14985
85
+ pyparticles/pset/opencl_context.py,sha256=8nZhzTdKSo7iVXQYZzscZ2QBlB03qDK01FIio8xl3oE,11683
86
+ pyparticles/pset/particles_set.py,sha256=CMvPYHXkcmPGWrSLOWEz3qi68L7LK5fZte6cvz3wBd8,16543
87
+ pyparticles/pset/periodic_boundary.py,sha256=02QGzAFZPOfbSPQUCWliftAlcjr-GgmaXibWHfL-kfw,1273
88
+ pyparticles/pset/rand_cluster.py,sha256=a3PQ497wen10d5YPPCGlV86Uxyb15W-pWc_ER3D5d6o,5299
89
+ pyparticles/pset/rebound_boundary.py,sha256=VjVXPpsZ--z2rIWJ4fD7JeTwph8schrbTQjdQpVTDH4,2087
90
+ pyparticles/utils/__init__.py,sha256=YWGJrPjamB49wRPTqdjfo6-T1lUvlLfshIqUGsPNh4Q,857
91
+ pyparticles/utils/parse_args.py,sha256=Qaz7z6G5jFO5KaVkMKnN_WcVyDVMol2HoJTuVuRg8q4,2273
92
+ pyparticles/utils/problem_config.py,sha256=6FYatMR2gWq8KS9Amk3cDCOTMxyUXCK3zkLsXHG_muU,23753
93
+ pyparticles/utils/pypart_global.py,sha256=Up4Lm119QxRMK3XQKppgMmw6N_i_RXhJ7BF_Irb_HOE,3029
94
+ pyparticles/utils/time_formatter.py,sha256=OVOCP2eTfAIlz1XrV3yPelXApI6JmV_Qsr2i5X9HJ38,1660
95
+ pyparticles3-0.4.0rc1.dist-info/licenses/LICENSE-gpl-3.0.txt,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
96
+ pyparticles3-0.4.0rc1.dist-info/METADATA,sha256=iuvQNyZKWav703JzOrCFZEHy5jjovp_e3XZM5XiTBCY,6388
97
+ pyparticles3-0.4.0rc1.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
98
+ pyparticles3-0.4.0rc1.dist-info/entry_points.txt,sha256=OTWMifSShnvWdMBY6Sjg6kbHDSSBFCfurheDa8eV1sg,105
99
+ pyparticles3-0.4.0rc1.dist-info/top_level.txt,sha256=bsS4msJ7XYbilhsrlVsXGEdg1tHKp3tBlt6myUY3k2A,12
100
+ pyparticles3-0.4.0rc1.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (84.0.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ pyparticles3 = pyparticles.main.main:main
3
+ pyparticles_app = pyparticles.main.main:main