physicskit 0.1.0__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 (484) hide show
  1. physicskit/__init__.py +51 -0
  2. physicskit/astro/__init__.py +66 -0
  3. physicskit/astro/cosmic_web.py +395 -0
  4. physicskit/astro/galactic_dynamics.py +137 -0
  5. physicskit/astro/nbody.py +208 -0
  6. physicskit/astro/orbital_mechanics.py +220 -0
  7. physicskit/astro/stellar_dynamo.py +628 -0
  8. physicskit/astro/stellar_structure.py +198 -0
  9. physicskit/astro/tests/__init__.py +0 -0
  10. physicskit/astro/tests/conftest.py +7 -0
  11. physicskit/astro/tests/test_cosmic_web.py +159 -0
  12. physicskit/astro/tests/test_galactic_dynamics.py +46 -0
  13. physicskit/astro/tests/test_nbody.py +81 -0
  14. physicskit/astro/tests/test_orbital_mechanics.py +73 -0
  15. physicskit/astro/tests/test_stellar_dynamo.py +198 -0
  16. physicskit/astro/tests/test_stellar_structure.py +52 -0
  17. physicskit/astro/tests/test_visualizers.py +159 -0
  18. physicskit/astro/visualizers.py +628 -0
  19. physicskit/chaos/__init__.py +55 -0
  20. physicskit/chaos/core/__init__.py +3 -0
  21. physicskit/chaos/core/base_system.py +342 -0
  22. physicskit/chaos/core/integrators.py +40 -0
  23. physicskit/chaos/exceptions.py +24 -0
  24. physicskit/chaos/quantum/__init__.py +38 -0
  25. physicskit/chaos/quantum/billiards.py +274 -0
  26. physicskit/chaos/quantum/husimi.py +85 -0
  27. physicskit/chaos/quantum/maps.py +366 -0
  28. physicskit/chaos/systems/__init__.py +38 -0
  29. physicskit/chaos/systems/billiards.py +1131 -0
  30. physicskit/chaos/systems/continuous.py +1276 -0
  31. physicskit/chaos/systems/maps.py +557 -0
  32. physicskit/chaos/tests/__init__.py +0 -0
  33. physicskit/chaos/tests/test_basins.py +76 -0
  34. physicskit/chaos/tests/test_bifurcation.py +132 -0
  35. physicskit/chaos/tests/test_billiards.py +115 -0
  36. physicskit/chaos/tests/test_continuous.py +224 -0
  37. physicskit/chaos/tests/test_dimension.py +69 -0
  38. physicskit/chaos/tests/test_divergence.py +90 -0
  39. physicskit/chaos/tests/test_dynamic_plots.py +269 -0
  40. physicskit/chaos/tests/test_integrators.py +96 -0
  41. physicskit/chaos/tests/test_io.py +41 -0
  42. physicskit/chaos/tests/test_maps.py +110 -0
  43. physicskit/chaos/tests/test_metrics.py +115 -0
  44. physicskit/chaos/tests/test_phase_space.py +73 -0
  45. physicskit/chaos/tests/test_properties.py +116 -0
  46. physicskit/chaos/tests/test_quantum_billiards.py +94 -0
  47. physicskit/chaos/tests/test_quantum_maps.py +144 -0
  48. physicskit/chaos/tests/test_recurrence.py +51 -0
  49. physicskit/chaos/tests/test_repr_and_api_consistency.py +134 -0
  50. physicskit/chaos/tests/test_section.py +49 -0
  51. physicskit/chaos/tests/test_spectral.py +48 -0
  52. physicskit/chaos/tests/test_streamlit_app.py +45 -0
  53. physicskit/chaos/tests/test_timeseries.py +131 -0
  54. physicskit/chaos/tests/test_viewer3d.py +41 -0
  55. physicskit/chaos/utils/__init__.py +46 -0
  56. physicskit/chaos/utils/dimension.py +139 -0
  57. physicskit/chaos/utils/io.py +95 -0
  58. physicskit/chaos/utils/metrics.py +304 -0
  59. physicskit/chaos/utils/recurrence.py +122 -0
  60. physicskit/chaos/utils/spectral.py +69 -0
  61. physicskit/chaos/utils/timeseries.py +303 -0
  62. physicskit/chaos/visualizers/__init__.py +85 -0
  63. physicskit/chaos/visualizers/basins.py +185 -0
  64. physicskit/chaos/visualizers/bifurcation.py +273 -0
  65. physicskit/chaos/visualizers/divergence.py +374 -0
  66. physicskit/chaos/visualizers/dynamic_plots.py +1372 -0
  67. physicskit/chaos/visualizers/phase_space.py +133 -0
  68. physicskit/chaos/visualizers/quantum.py +299 -0
  69. physicskit/chaos/visualizers/recurrence.py +91 -0
  70. physicskit/chaos/visualizers/section.py +161 -0
  71. physicskit/chaos/visualizers/theme.py +31 -0
  72. physicskit/chaos/visualizers/viewer3d.py +82 -0
  73. physicskit/classical/__init__.py +55 -0
  74. physicskit/classical/core/__init__.py +17 -0
  75. physicskit/classical/core/base_system.py +510 -0
  76. physicskit/classical/core/integrators.py +397 -0
  77. physicskit/classical/systems/__init__.py +32 -0
  78. physicskit/classical/systems/chains.py +334 -0
  79. physicskit/classical/systems/hamiltonian.py +215 -0
  80. physicskit/classical/systems/lagrangian.py +308 -0
  81. physicskit/classical/systems/newtonian.py +536 -0
  82. physicskit/classical/systems/rotations.py +614 -0
  83. physicskit/classical/tests/__init__.py +0 -0
  84. physicskit/classical/tests/conftest.py +7 -0
  85. physicskit/classical/tests/test_base_system.py +113 -0
  86. physicskit/classical/tests/test_chains.py +84 -0
  87. physicskit/classical/tests/test_conservation.py +244 -0
  88. physicskit/classical/tests/test_conservation_utils.py +47 -0
  89. physicskit/classical/tests/test_hamiltonian.py +44 -0
  90. physicskit/classical/tests/test_integrators.py +123 -0
  91. physicskit/classical/tests/test_lagrangian.py +69 -0
  92. physicskit/classical/tests/test_newtonian.py +45 -0
  93. physicskit/classical/tests/test_rotations.py +160 -0
  94. physicskit/classical/tests/test_stepsize.py +149 -0
  95. physicskit/classical/tests/test_symbolic.py +125 -0
  96. physicskit/classical/tests/test_visualizers.py +172 -0
  97. physicskit/classical/utils/__init__.py +20 -0
  98. physicskit/classical/utils/conservation.py +126 -0
  99. physicskit/classical/utils/stepsize.py +187 -0
  100. physicskit/classical/utils/symbolic.py +235 -0
  101. physicskit/classical/visualizers/__init__.py +25 -0
  102. physicskit/classical/visualizers/animations.py +508 -0
  103. physicskit/classical/visualizers/interactive.py +113 -0
  104. physicskit/classical/visualizers/modal_analysis.py +97 -0
  105. physicskit/classical/visualizers/phase_space.py +214 -0
  106. physicskit/condensed/__init__.py +122 -0
  107. physicskit/condensed/anderson_localization.py +155 -0
  108. physicskit/condensed/correlated.py +284 -0
  109. physicskit/condensed/ginzburg_landau.py +220 -0
  110. physicskit/condensed/landau_levels.py +246 -0
  111. physicskit/condensed/laughlin.py +229 -0
  112. physicskit/condensed/models.py +627 -0
  113. physicskit/condensed/tests/__init__.py +0 -0
  114. physicskit/condensed/tests/test_condensed.py +518 -0
  115. physicskit/condensed/tests/test_visualizers.py +87 -0
  116. physicskit/condensed/tight_binding.py +445 -0
  117. physicskit/condensed/topological_insulator_3d.py +178 -0
  118. physicskit/condensed/topology.py +217 -0
  119. physicskit/condensed/visualizers.py +296 -0
  120. physicskit/condensed/weyl.py +180 -0
  121. physicskit/constants.py +184 -0
  122. physicskit/fields/__init__.py +111 -0
  123. physicskit/fields/electrodynamics.py +671 -0
  124. physicskit/fields/quantum_fields.py +510 -0
  125. physicskit/fields/solitons.py +527 -0
  126. physicskit/fields/tests/__init__.py +0 -0
  127. physicskit/fields/tests/conftest.py +7 -0
  128. physicskit/fields/tests/test_field_animations.py +154 -0
  129. physicskit/fields/tests/test_fields.py +439 -0
  130. physicskit/fields/tests/test_visualizers.py +101 -0
  131. physicskit/fields/visualizers.py +503 -0
  132. physicskit/fluids/__init__.py +134 -0
  133. physicskit/fluids/core/__init__.py +23 -0
  134. physicskit/fluids/core/grid.py +165 -0
  135. physicskit/fluids/core/timestepping.py +231 -0
  136. physicskit/fluids/exceptions.py +26 -0
  137. physicskit/fluids/systems/__init__.py +70 -0
  138. physicskit/fluids/systems/compressible_flow.py +281 -0
  139. physicskit/fluids/systems/instabilities.py +343 -0
  140. physicskit/fluids/systems/navier_stokes.py +221 -0
  141. physicskit/fluids/systems/potential_flow.py +440 -0
  142. physicskit/fluids/systems/viscous_flow.py +425 -0
  143. physicskit/fluids/systems/vortex_dynamics.py +304 -0
  144. physicskit/fluids/tests/__init__.py +0 -0
  145. physicskit/fluids/tests/conftest.py +7 -0
  146. physicskit/fluids/tests/test_compressible_flow.py +66 -0
  147. physicskit/fluids/tests/test_instabilities.py +115 -0
  148. physicskit/fluids/tests/test_navier_stokes.py +67 -0
  149. physicskit/fluids/tests/test_potential_flow.py +92 -0
  150. physicskit/fluids/tests/test_static_visualizers.py +91 -0
  151. physicskit/fluids/tests/test_utils.py +100 -0
  152. physicskit/fluids/tests/test_viscous_flow.py +110 -0
  153. physicskit/fluids/tests/test_visualizers.py +34 -0
  154. physicskit/fluids/tests/test_vortex_dynamics.py +88 -0
  155. physicskit/fluids/utils/__init__.py +18 -0
  156. physicskit/fluids/utils/dimensionless.py +239 -0
  157. physicskit/fluids/utils/spectral_analysis.py +142 -0
  158. physicskit/fluids/visualizers/__init__.py +14 -0
  159. physicskit/fluids/visualizers/compressible.py +39 -0
  160. physicskit/fluids/visualizers/flow_fields.py +252 -0
  161. physicskit/fluids/visualizers/potential_flow.py +51 -0
  162. physicskit/fluids/visualizers/spectra.py +62 -0
  163. physicskit/fluids/visualizers/theme.py +38 -0
  164. physicskit/integrators/__init__.py +52 -0
  165. physicskit/integrators/adaptive.py +199 -0
  166. physicskit/integrators/fixed_step.py +360 -0
  167. physicskit/integrators/tests/__init__.py +0 -0
  168. physicskit/integrators/tests/test_integrators.py +101 -0
  169. physicskit/optics/__init__.py +124 -0
  170. physicskit/optics/_compat.py +5 -0
  171. physicskit/optics/gaussian.py +382 -0
  172. physicskit/optics/quantum_optics.py +428 -0
  173. physicskit/optics/ray.py +469 -0
  174. physicskit/optics/tests/__init__.py +0 -0
  175. physicskit/optics/tests/test_diffraction_animation.py +38 -0
  176. physicskit/optics/tests/test_gaussian.py +170 -0
  177. physicskit/optics/tests/test_quantum_optics.py +147 -0
  178. physicskit/optics/tests/test_ray.py +177 -0
  179. physicskit/optics/tests/test_visualizers.py +58 -0
  180. physicskit/optics/tests/test_wave.py +146 -0
  181. physicskit/optics/visualizers.py +264 -0
  182. physicskit/optics/wave.py +365 -0
  183. physicskit/particle/__init__.py +152 -0
  184. physicskit/particle/collider.py +382 -0
  185. physicskit/particle/confinement.py +125 -0
  186. physicskit/particle/decays.py +357 -0
  187. physicskit/particle/electroweak.py +300 -0
  188. physicskit/particle/kinematics.py +271 -0
  189. physicskit/particle/neutrinos.py +84 -0
  190. physicskit/particle/nuclear.py +100 -0
  191. physicskit/particle/scattering.py +159 -0
  192. physicskit/particle/tests/__init__.py +0 -0
  193. physicskit/particle/tests/conftest.py +7 -0
  194. physicskit/particle/tests/test_collider.py +119 -0
  195. physicskit/particle/tests/test_confinement.py +42 -0
  196. physicskit/particle/tests/test_decays.py +112 -0
  197. physicskit/particle/tests/test_electroweak.py +97 -0
  198. physicskit/particle/tests/test_kinematics.py +138 -0
  199. physicskit/particle/tests/test_neutrinos.py +36 -0
  200. physicskit/particle/tests/test_nuclear.py +45 -0
  201. physicskit/particle/tests/test_scattering.py +64 -0
  202. physicskit/particle/tests/test_visualizers.py +214 -0
  203. physicskit/particle/visualizers/__init__.py +38 -0
  204. physicskit/particle/visualizers/animations.py +705 -0
  205. physicskit/particle/visualizers/static.py +101 -0
  206. physicskit/plasma/__init__.py +176 -0
  207. physicskit/plasma/acceleration.py +152 -0
  208. physicskit/plasma/instabilities.py +417 -0
  209. physicskit/plasma/kinetic.py +588 -0
  210. physicskit/plasma/mhd.py +463 -0
  211. physicskit/plasma/single_particle.py +562 -0
  212. physicskit/plasma/tests/__init__.py +0 -0
  213. physicskit/plasma/tests/conftest.py +7 -0
  214. physicskit/plasma/tests/test_new_time_domain_features.py +222 -0
  215. physicskit/plasma/tests/test_plasma.py +232 -0
  216. physicskit/plasma/tests/test_visualizers.py +79 -0
  217. physicskit/plasma/turbulence.py +219 -0
  218. physicskit/plasma/visualizers.py +868 -0
  219. physicskit/plasma/waves.py +549 -0
  220. physicskit/quantum/__init__.py +180 -0
  221. physicskit/quantum/_compat.py +20 -0
  222. physicskit/quantum/chapters/__init__.py +0 -0
  223. physicskit/quantum/chapters/entanglement.py +489 -0
  224. physicskit/quantum/chapters/harmonic_spin.py +517 -0
  225. physicskit/quantum/chapters/hydrogen_am.py +292 -0
  226. physicskit/quantum/chapters/perturbation.py +350 -0
  227. physicskit/quantum/chapters/potentials.py +997 -0
  228. physicskit/quantum/chapters/spin.py +306 -0
  229. physicskit/quantum/chapters/wave_packets.py +541 -0
  230. physicskit/quantum/core/__init__.py +0 -0
  231. physicskit/quantum/core/eigensolvers.py +311 -0
  232. physicskit/quantum/core/operators.py +296 -0
  233. physicskit/quantum/core/solvers.py +271 -0
  234. physicskit/quantum/tests/__init__.py +0 -0
  235. physicskit/quantum/tests/conftest.py +7 -0
  236. physicskit/quantum/tests/test_animations.py +225 -0
  237. physicskit/quantum/tests/test_compat.py +43 -0
  238. physicskit/quantum/tests/test_eigensolvers.py +24 -0
  239. physicskit/quantum/tests/test_entanglement.py +127 -0
  240. physicskit/quantum/tests/test_harmonic_spin.py +140 -0
  241. physicskit/quantum/tests/test_hydrogen_am.py +48 -0
  242. physicskit/quantum/tests/test_measure.py +110 -0
  243. physicskit/quantum/tests/test_operators.py +105 -0
  244. physicskit/quantum/tests/test_perturbation.py +112 -0
  245. physicskit/quantum/tests/test_physics_checks.py +131 -0
  246. physicskit/quantum/tests/test_potentials.py +191 -0
  247. physicskit/quantum/tests/test_solvers.py +70 -0
  248. physicskit/quantum/tests/test_spin.py +22 -0
  249. physicskit/quantum/tests/test_unitarity.py +84 -0
  250. physicskit/quantum/tests/test_wave_packets.py +53 -0
  251. physicskit/quantum/utils/__init__.py +0 -0
  252. physicskit/quantum/utils/measure.py +253 -0
  253. physicskit/quantum/visualizers/__init__.py +0 -0
  254. physicskit/quantum/visualizers/bloch_sphere.py +205 -0
  255. physicskit/quantum/visualizers/entanglement.py +58 -0
  256. physicskit/quantum/visualizers/orbitals.py +187 -0
  257. physicskit/quantum/visualizers/phase_space.py +179 -0
  258. physicskit/quantum/visualizers/wavefunctions.py +230 -0
  259. physicskit/relativity/__init__.py +61 -0
  260. physicskit/relativity/chapters/__init__.py +33 -0
  261. physicskit/relativity/chapters/cosmology.py +190 -0
  262. physicskit/relativity/chapters/gw_merger.py +399 -0
  263. physicskit/relativity/chapters/kerr.py +371 -0
  264. physicskit/relativity/chapters/lensing.py +196 -0
  265. physicskit/relativity/chapters/neutron_star.py +149 -0
  266. physicskit/relativity/chapters/schwarzschild.py +412 -0
  267. physicskit/relativity/chapters/timekeeping.py +133 -0
  268. physicskit/relativity/core/__init__.py +12 -0
  269. physicskit/relativity/core/geodesics.py +216 -0
  270. physicskit/relativity/core/kerr_raytracer.py +259 -0
  271. physicskit/relativity/core/raytracer.py +241 -0
  272. physicskit/relativity/core/tensors.py +468 -0
  273. physicskit/relativity/tests/__init__.py +0 -0
  274. physicskit/relativity/tests/test_conservations.py +54 -0
  275. physicskit/relativity/tests/test_constants.py +34 -0
  276. physicskit/relativity/tests/test_cosmology.py +61 -0
  277. physicskit/relativity/tests/test_gw_merger.py +117 -0
  278. physicskit/relativity/tests/test_kerr.py +116 -0
  279. physicskit/relativity/tests/test_kerr_raytracer.py +103 -0
  280. physicskit/relativity/tests/test_lensing.py +75 -0
  281. physicskit/relativity/tests/test_neutron_star.py +48 -0
  282. physicskit/relativity/tests/test_raytracer.py +67 -0
  283. physicskit/relativity/tests/test_schwarzschild.py +126 -0
  284. physicskit/relativity/tests/test_shadow_render.py +81 -0
  285. physicskit/relativity/tests/test_tensors.py +86 -0
  286. physicskit/relativity/tests/test_timekeeping.py +51 -0
  287. physicskit/relativity/tests/test_visualizers_misc.py +115 -0
  288. physicskit/relativity/utils/__init__.py +1 -0
  289. physicskit/relativity/utils/constants.py +232 -0
  290. physicskit/relativity/visualizers/__init__.py +46 -0
  291. physicskit/relativity/visualizers/interactive.py +127 -0
  292. physicskit/relativity/visualizers/shadow_render.py +367 -0
  293. physicskit/relativity/visualizers/spacetime_3d.py +92 -0
  294. physicskit/relativity/visualizers/spacetime_diagrams.py +198 -0
  295. physicskit/relativity/visualizers/wave_plots.py +185 -0
  296. physicskit/rmt/__init__.py +8 -0
  297. physicskit/rmt/ensembles/__init__.py +108 -0
  298. physicskit/rmt/ensembles/banded.py +114 -0
  299. physicskit/rmt/ensembles/base.py +135 -0
  300. physicskit/rmt/ensembles/bdg.py +218 -0
  301. physicskit/rmt/ensembles/chiral.py +308 -0
  302. physicskit/rmt/ensembles/circular.py +104 -0
  303. physicskit/rmt/ensembles/crossover.py +82 -0
  304. physicskit/rmt/ensembles/density_matrix.py +148 -0
  305. physicskit/rmt/ensembles/effective_hamiltonian.py +230 -0
  306. physicskit/rmt/ensembles/embedded.py +207 -0
  307. physicskit/rmt/ensembles/gaussian.py +153 -0
  308. physicskit/rmt/ensembles/ginibre.py +110 -0
  309. physicskit/rmt/ensembles/girko.py +190 -0
  310. physicskit/rmt/ensembles/graph_laplacian.py +92 -0
  311. physicskit/rmt/ensembles/haar.py +57 -0
  312. physicskit/rmt/ensembles/jacobi.py +182 -0
  313. physicskit/rmt/ensembles/poisson.py +77 -0
  314. physicskit/rmt/ensembles/polynomial.py +139 -0
  315. physicskit/rmt/ensembles/pt_symmetric.py +120 -0
  316. physicskit/rmt/ensembles/single_ring.py +170 -0
  317. physicskit/rmt/ensembles/sparse.py +95 -0
  318. physicskit/rmt/ensembles/syk.py +170 -0
  319. physicskit/rmt/ensembles/truncated_unitary.py +80 -0
  320. physicskit/rmt/ensembles/universality.py +92 -0
  321. physicskit/rmt/ensembles/wishart.py +88 -0
  322. physicskit/rmt/py.typed +0 -0
  323. physicskit/rmt/spectrum.py +82 -0
  324. physicskit/rmt/stats/__init__.py +160 -0
  325. physicskit/rmt/stats/characteristic_polynomial.py +77 -0
  326. physicskit/rmt/stats/circular_law.py +54 -0
  327. physicskit/rmt/stats/correlations.py +162 -0
  328. physicskit/rmt/stats/density.py +70 -0
  329. physicskit/rmt/stats/entanglement.py +36 -0
  330. physicskit/rmt/stats/free_probability.py +202 -0
  331. physicskit/rmt/stats/localization.py +338 -0
  332. physicskit/rmt/stats/marchenko_pastur.py +55 -0
  333. physicskit/rmt/stats/pt_symmetric.py +265 -0
  334. physicskit/rmt/stats/ratios.py +110 -0
  335. physicskit/rmt/stats/real_ginibre.py +134 -0
  336. physicskit/rmt/stats/rigidity.py +272 -0
  337. physicskit/rmt/stats/single_ring.py +95 -0
  338. physicskit/rmt/stats/spacing.py +150 -0
  339. physicskit/rmt/stats/tracy_widom.py +175 -0
  340. physicskit/rmt/stats/truncated_unitary.py +40 -0
  341. physicskit/rmt/stats/unfolding.py +37 -0
  342. physicskit/rmt/stats/wachter.py +67 -0
  343. physicskit/rmt/tests/__init__.py +0 -0
  344. physicskit/rmt/tests/cache_utils.py +107 -0
  345. physicskit/rmt/tests/conftest.py +8 -0
  346. physicskit/rmt/tests/test_banded.py +86 -0
  347. physicskit/rmt/tests/test_base.py +29 -0
  348. physicskit/rmt/tests/test_bdg.py +133 -0
  349. physicskit/rmt/tests/test_characteristic_polynomial.py +50 -0
  350. physicskit/rmt/tests/test_chiral.py +273 -0
  351. physicskit/rmt/tests/test_circular.py +225 -0
  352. physicskit/rmt/tests/test_crossover.py +72 -0
  353. physicskit/rmt/tests/test_density.py +23 -0
  354. physicskit/rmt/tests/test_density_matrix.py +181 -0
  355. physicskit/rmt/tests/test_effective_hamiltonian.py +140 -0
  356. physicskit/rmt/tests/test_embedded.py +169 -0
  357. physicskit/rmt/tests/test_free_probability.py +81 -0
  358. physicskit/rmt/tests/test_gaussian_ensembles.py +22 -0
  359. physicskit/rmt/tests/test_gaussian_semicircle.py +127 -0
  360. physicskit/rmt/tests/test_ginibre_circular_law.py +131 -0
  361. physicskit/rmt/tests/test_girko.py +178 -0
  362. physicskit/rmt/tests/test_graph_laplacian.py +102 -0
  363. physicskit/rmt/tests/test_haar.py +118 -0
  364. physicskit/rmt/tests/test_jacobi_wachter.py +136 -0
  365. physicskit/rmt/tests/test_localization.py +240 -0
  366. physicskit/rmt/tests/test_poisson.py +149 -0
  367. physicskit/rmt/tests/test_polynomial.py +107 -0
  368. physicskit/rmt/tests/test_pt_symmetric.py +178 -0
  369. physicskit/rmt/tests/test_random_state.py +19 -0
  370. physicskit/rmt/tests/test_real_ginibre.py +112 -0
  371. physicskit/rmt/tests/test_rigidity_universality.py +167 -0
  372. physicskit/rmt/tests/test_single_ring.py +132 -0
  373. physicskit/rmt/tests/test_spacing_and_ratios.py +122 -0
  374. physicskit/rmt/tests/test_sparse.py +71 -0
  375. physicskit/rmt/tests/test_spectrum.py +27 -0
  376. physicskit/rmt/tests/test_syk.py +136 -0
  377. physicskit/rmt/tests/test_tracy_widom.py +113 -0
  378. physicskit/rmt/tests/test_tridiagonal.py +41 -0
  379. physicskit/rmt/tests/test_truncated_unitary.py +80 -0
  380. physicskit/rmt/tests/test_validation_base.py +25 -0
  381. physicskit/rmt/tests/test_validation_misc.py +67 -0
  382. physicskit/rmt/tests/test_wishart_marchenko_pastur.py +120 -0
  383. physicskit/rmt/utils/__init__.py +0 -0
  384. physicskit/rmt/utils/haar.py +128 -0
  385. physicskit/rmt/utils/random_state.py +24 -0
  386. physicskit/rmt/utils/tridiagonal.py +167 -0
  387. physicskit/rmt/validation/__init__.py +36 -0
  388. physicskit/rmt/validation/base.py +126 -0
  389. physicskit/rmt/validation/circular_law.py +80 -0
  390. physicskit/rmt/validation/marchenko_pastur.py +53 -0
  391. physicskit/rmt/validation/ratio_distribution.py +53 -0
  392. physicskit/rmt/validation/real_ginibre.py +60 -0
  393. physicskit/rmt/validation/sine_kernel.py +57 -0
  394. physicskit/rmt/validation/single_ring.py +68 -0
  395. physicskit/rmt/validation/tracy_widom.py +89 -0
  396. physicskit/rmt/validation/universality.py +100 -0
  397. physicskit/rmt/validation/wachter.py +52 -0
  398. physicskit/rmt/validation/wigner_semicircle.py +40 -0
  399. physicskit/rmt/validation/wigner_surmise.py +58 -0
  400. physicskit/semiclassical/__init__.py +94 -0
  401. physicskit/semiclassical/_compat.py +5 -0
  402. physicskit/semiclassical/core/__init__.py +41 -0
  403. physicskit/semiclassical/core/gutzwiller.py +215 -0
  404. physicskit/semiclassical/core/path_integral.py +594 -0
  405. physicskit/semiclassical/core/propagators.py +579 -0
  406. physicskit/semiclassical/core/wkb.py +308 -0
  407. physicskit/semiclassical/systems/__init__.py +13 -0
  408. physicskit/semiclassical/systems/scarring.py +278 -0
  409. physicskit/semiclassical/tests/__init__.py +0 -0
  410. physicskit/semiclassical/tests/test_gutzwiller.py +35 -0
  411. physicskit/semiclassical/tests/test_path_integral.py +194 -0
  412. physicskit/semiclassical/tests/test_propagators.py +82 -0
  413. physicskit/semiclassical/tests/test_scarring.py +43 -0
  414. physicskit/semiclassical/tests/test_visualizers.py +89 -0
  415. physicskit/semiclassical/tests/test_wkb.py +30 -0
  416. physicskit/semiclassical/visualizers/__init__.py +17 -0
  417. physicskit/semiclassical/visualizers/gutzwiller.py +55 -0
  418. physicskit/semiclassical/visualizers/path_integral.py +195 -0
  419. physicskit/semiclassical/visualizers/propagators.py +89 -0
  420. physicskit/semiclassical/visualizers/scarring.py +146 -0
  421. physicskit/semiclassical/visualizers/wkb.py +55 -0
  422. physicskit/statphys/__init__.py +80 -0
  423. physicskit/statphys/chapters/__init__.py +43 -0
  424. physicskit/statphys/chapters/ehrenfest_urn.py +112 -0
  425. physicskit/statphys/chapters/ising_lattice.py +431 -0
  426. physicskit/statphys/chapters/kpz_growth.py +129 -0
  427. physicskit/statphys/chapters/molecular_dynamics.py +258 -0
  428. physicskit/statphys/chapters/nonequilibrium_work.py +146 -0
  429. physicskit/statphys/chapters/percolation.py +305 -0
  430. physicskit/statphys/chapters/random_walk.py +142 -0
  431. physicskit/statphys/chapters/renormalization.py +148 -0
  432. physicskit/statphys/chapters/sandpile.py +109 -0
  433. physicskit/statphys/chapters/spin_glass.py +275 -0
  434. physicskit/statphys/core/__init__.py +10 -0
  435. physicskit/statphys/core/kpz_engine.py +53 -0
  436. physicskit/statphys/core/md_engine.py +157 -0
  437. physicskit/statphys/core/monte_carlo.py +462 -0
  438. physicskit/statphys/core/random_walk_engine.py +68 -0
  439. physicskit/statphys/core/sandpile_engine.py +52 -0
  440. physicskit/statphys/tests/__init__.py +0 -0
  441. physicskit/statphys/tests/test_dynamics.py +66 -0
  442. physicskit/statphys/tests/test_ehrenfest_urn.py +44 -0
  443. physicskit/statphys/tests/test_finite_size_scaling.py +62 -0
  444. physicskit/statphys/tests/test_interactive.py +33 -0
  445. physicskit/statphys/tests/test_ising.py +68 -0
  446. physicskit/statphys/tests/test_kpz.py +55 -0
  447. physicskit/statphys/tests/test_landau_theory.py +49 -0
  448. physicskit/statphys/tests/test_md_engine.py +31 -0
  449. physicskit/statphys/tests/test_molecular_dynamics.py +72 -0
  450. physicskit/statphys/tests/test_nonequilibrium_work.py +33 -0
  451. physicskit/statphys/tests/test_partition_function.py +26 -0
  452. physicskit/statphys/tests/test_percolation.py +116 -0
  453. physicskit/statphys/tests/test_potts_model.py +46 -0
  454. physicskit/statphys/tests/test_random_walk.py +50 -0
  455. physicskit/statphys/tests/test_renormalization.py +44 -0
  456. physicskit/statphys/tests/test_sandpile.py +44 -0
  457. physicskit/statphys/tests/test_spin_glass.py +73 -0
  458. physicskit/statphys/tests/test_thermodynamics.py +121 -0
  459. physicskit/statphys/tests/test_xy_model.py +45 -0
  460. physicskit/statphys/utils/__init__.py +1 -0
  461. physicskit/statphys/utils/dynamics.py +100 -0
  462. physicskit/statphys/utils/finite_size_scaling.py +171 -0
  463. physicskit/statphys/utils/landau_theory.py +151 -0
  464. physicskit/statphys/utils/partition_function.py +109 -0
  465. physicskit/statphys/utils/thermodynamics.py +356 -0
  466. physicskit/statphys/visualizers/__init__.py +87 -0
  467. physicskit/statphys/visualizers/interactive.py +161 -0
  468. physicskit/statphys/visualizers/jarzynski_render.py +44 -0
  469. physicskit/statphys/visualizers/kpz_render.py +65 -0
  470. physicskit/statphys/visualizers/lattice_render.py +212 -0
  471. physicskit/statphys/visualizers/particle_render.py +121 -0
  472. physicskit/statphys/visualizers/random_walk_render.py +106 -0
  473. physicskit/statphys/visualizers/rg_render.py +45 -0
  474. physicskit/statphys/visualizers/sandpile_render.py +65 -0
  475. physicskit/statphys/visualizers/spin_glass_render.py +40 -0
  476. physicskit/statphys/visualizers/urn_render.py +38 -0
  477. physicskit/statphys/visualizers/vortex_render.py +84 -0
  478. physicskit/tests/__init__.py +0 -0
  479. physicskit/tests/test_constants.py +38 -0
  480. physicskit-0.1.0.dist-info/METADATA +196 -0
  481. physicskit-0.1.0.dist-info/RECORD +484 -0
  482. physicskit-0.1.0.dist-info/WHEEL +5 -0
  483. physicskit-0.1.0.dist-info/licenses/LICENSE +21 -0
  484. physicskit-0.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,366 @@
1
+ """Quantized versions of physicskit.chaos's classical maps: the kicked rotor and the baker's map.
2
+
3
+ Both are built the standard way in the quantum-chaos literature: as a
4
+ finite-dimensional (``dim``-by-``dim``) unitary "Floquet" operator advancing a
5
+ state vector by one map iteration, constructed from the discrete Fourier
6
+ transform (DFT) rather than by discretizing a differential equation. This
7
+ makes them cheap to build and exactly unitary to machine precision, at the
8
+ cost of only being able to represent states in a single Hilbert space
9
+ dimension at a time (there is no continuum limit to refine towards, unlike
10
+ :class:`~physicskit.chaos.quantum.billiards.QuantumBilliard`); the classical limit is
11
+ instead approached by taking ``dim -> infinity`` (equivalently ``hbar -> 0``).
12
+
13
+ Random-matrix-theory analyses of these maps' spectra (e.g. nearest-neighbor
14
+ spacing distributions, spectral rigidity) are intentionally *not* provided
15
+ here -- that is the job of the separate ``physicskit.rmt`` package, which can consume
16
+ the eigenphases returned by :meth:`QuantumKickedRotor.eigenphases` or
17
+ :meth:`QuantumBakersMap.eigenphases` directly.
18
+ """
19
+
20
+ from __future__ import annotations
21
+
22
+ import numpy as np
23
+ from numpy.typing import ArrayLike, NDArray
24
+
25
+ from physicskit.chaos.core.base_system import get_init_params
26
+ from physicskit.chaos.exceptions import InvalidParameterError
27
+ from physicskit.chaos.quantum.husimi import husimi_function
28
+
29
+
30
+ def _dft_matrix(n: int) -> NDArray[np.complex128]:
31
+ """The ``n``-by-``n`` unitary discrete Fourier transform matrix."""
32
+ j = np.arange(n)
33
+ matrix = np.exp(-2j * np.pi * np.outer(j, j) / n) / np.sqrt(n)
34
+ return np.asarray(matrix, dtype=np.complex128)
35
+
36
+
37
+ def _init_repr(obj: object) -> str:
38
+ """Build an ``eval``-able-looking repr from an object's ``__init__`` signature.
39
+
40
+ Local copy of :func:`physicskit.chaos.core.base_system._init_repr` (kept private
41
+ there); see :func:`~physicskit.chaos.core.base_system.get_init_params`.
42
+ """
43
+ parts = [f"{name}={value!r}" for name, value in get_init_params(obj).items()]
44
+ return f"{type(obj).__name__}({', '.join(parts)})"
45
+
46
+
47
+ class QuantumKickedRotor:
48
+ """The quantum kicked rotor: the standard map's quantization.
49
+
50
+ Built as the one-period Floquet operator of a rotor periodically kicked
51
+ by a potential ``k * cos(theta)``, in exact correspondence with
52
+ physicskit.chaos's classical :class:`~physicskit.chaos.systems.maps.StandardMap`
53
+ (``p_new = p + k*sin(theta)``, ``theta_new = theta + p_new``): the
54
+ Hilbert space is the `dim`-point position (angle) representation on
55
+ ``[0, 2*pi)``, and the Floquet operator alternates a kick phase (diagonal
56
+ in the angle basis) with a free-rotation phase (diagonal in the momentum
57
+ basis), transforming between the two via the discrete Fourier transform.
58
+
59
+ As `dim` grows (equivalently, as `hbar` shrinks towards its default
60
+ ``2*pi/dim``), the quantum dynamics of a narrow wavepacket increasingly
61
+ tracks the corresponding classical
62
+ :class:`~physicskit.chaos.systems.maps.StandardMap` orbit, until the packet
63
+ spreads across a chaotic region -- the quantum-classical correspondence
64
+ breaking down being one of the central phenomena of quantum chaos.
65
+
66
+ Parameters
67
+ ----------
68
+ k : float, default 1.0
69
+ Kick strength; matches the classical
70
+ :class:`~physicskit.chaos.systems.maps.StandardMap`'s `k` exactly.
71
+ dim : int, default 64
72
+ Hilbert space dimension (number of angle basis states).
73
+ hbar : float, optional
74
+ Effective Planck constant; defaults to ``2*pi/dim``, the standard
75
+ choice that keeps the quantized torus's phase-space cell count equal
76
+ to `dim`.
77
+
78
+ Attributes
79
+ ----------
80
+ k : float
81
+ Kick strength.
82
+ dim : int
83
+ Hilbert space dimension.
84
+ hbar : float
85
+ Effective Planck constant.
86
+
87
+ Raises
88
+ ------
89
+ InvalidParameterError
90
+ If `dim` is smaller than 2.
91
+ """
92
+
93
+ def __init__(self, k: float = 1.0, dim: int = 64, hbar: float | None = None):
94
+ if dim < 2:
95
+ raise InvalidParameterError("dim must be at least 2")
96
+ self.k = float(k)
97
+ self.dim = int(dim)
98
+ self.hbar = float(hbar) if hbar is not None else 2.0 * np.pi / self.dim
99
+
100
+ def floquet_operator(self) -> NDArray[np.complex128]:
101
+ """Build the one-period Floquet (evolution) operator.
102
+
103
+ Returns
104
+ -------
105
+ ndarray of complex, shape (dim, dim)
106
+ Unitary matrix advancing a state, in the angle representation,
107
+ by one kick-and-rotation period.
108
+ """
109
+ n = self.dim
110
+ theta = 2.0 * np.pi * np.arange(n) / n
111
+ momentum = np.arange(n)
112
+ kick_phase = np.exp(-1j * (self.k / self.hbar) * np.cos(theta))
113
+ kinetic_phase = np.exp(-1j * self.hbar * momentum**2 / 2.0)
114
+ dft = _dft_matrix(n)
115
+ result = dft.conj().T @ (kinetic_phase[:, None] * dft) @ np.diag(kick_phase)
116
+ return np.asarray(result, dtype=np.complex128)
117
+
118
+ def evolve(self, psi: ArrayLike, n_steps: int = 1) -> NDArray[np.complex128]:
119
+ """Propagate a state through ``n_steps`` kicks.
120
+
121
+ Parameters
122
+ ----------
123
+ psi : array_like of complex, shape (dim,)
124
+ Initial state in the angle representation; normalized
125
+ internally.
126
+ n_steps : int, default 1
127
+ Number of Floquet periods to advance.
128
+
129
+ Returns
130
+ -------
131
+ ndarray of complex, shape (n_steps + 1, dim)
132
+ The state after each kick, including the (normalized) initial
133
+ state as row 0.
134
+ """
135
+ u = self.floquet_operator()
136
+ state = np.asarray(psi, dtype=np.complex128)
137
+ state = state / np.linalg.norm(state)
138
+ states = np.empty((n_steps + 1, self.dim), dtype=np.complex128)
139
+ states[0] = state
140
+ for i in range(n_steps):
141
+ state = u @ state
142
+ states[i + 1] = state
143
+ return states
144
+
145
+ def eigenphases(self) -> NDArray[np.float64]:
146
+ """Quasi-energies (eigenphases) of the Floquet operator.
147
+
148
+ Hand these to ``physicskit.rmt`` to study their spacing statistics.
149
+
150
+ Returns
151
+ -------
152
+ ndarray of float, shape (dim,)
153
+ Eigenphases (angles of the Floquet operator's unit-modulus
154
+ eigenvalues), sorted ascending, in radians in ``(-pi, pi]``.
155
+ """
156
+ eigvals = np.linalg.eigvals(self.floquet_operator())
157
+ return np.sort(np.angle(eigvals))
158
+
159
+ def coherent_state(self, theta0: float, p0: float) -> NDArray[np.complex128]:
160
+ """A minimum-uncertainty wavepacket centered at ``(theta0, p0)``.
161
+
162
+ Useful as a semiclassical initial state for :meth:`evolve`, to watch
163
+ the quantum dynamics track (and eventually depart from) the
164
+ corresponding classical orbit.
165
+
166
+ Parameters
167
+ ----------
168
+ theta0, p0 : float
169
+ Phase-space center of the wavepacket.
170
+
171
+ Returns
172
+ -------
173
+ ndarray of complex, shape (dim,)
174
+ Normalized coherent state in the angle representation.
175
+ """
176
+ n = self.dim
177
+ theta = 2.0 * np.pi * np.arange(n) / n
178
+ sigma2 = self.hbar
179
+ psi = np.zeros(n, dtype=np.complex128)
180
+ for m in range(-3, 4):
181
+ dtheta = theta - theta0 - 2.0 * np.pi * m
182
+ psi += np.exp(-(dtheta**2) / (2.0 * sigma2)) * np.exp(1j * p0 * dtheta / self.hbar)
183
+ return psi / np.linalg.norm(psi)
184
+
185
+ def husimi(self, psi: ArrayLike, resolution: int = 80, n_wraps: int = 3) -> tuple[NDArray[np.float64], NDArray[np.float64], NDArray[np.float64]]:
186
+ """Husimi phase-space distribution of a state; see :func:`~physicskit.chaos.quantum.husimi.husimi_function`.
187
+
188
+ Parameters
189
+ ----------
190
+ psi : array_like of complex, shape (dim,)
191
+ State in the angle representation.
192
+ resolution : int, default 80
193
+ Number of grid points along each of the ``theta`` and ``p`` axes.
194
+ n_wraps : int, default 3
195
+ Number of periodic images summed to periodize the coherent
196
+ states used.
197
+
198
+ Returns
199
+ -------
200
+ Theta, P, husimi : ndarray of float, shape (resolution, resolution)
201
+ Phase-space grid and the (peak-normalized) Husimi distribution.
202
+ """
203
+ state = np.asarray(psi, dtype=np.complex128)
204
+ return husimi_function(state, self.hbar, 2.0 * np.pi, resolution=resolution, n_wraps=n_wraps)
205
+
206
+ def __repr__(self) -> str:
207
+ return _init_repr(self)
208
+
209
+
210
+ class QuantumBakersMap:
211
+ """The quantum baker's map: the (generalized) baker's map's quantization.
212
+
213
+ Built via the Balazs-Voros/Saraceno construction, generalized to an
214
+ arbitrary cut `alpha` in exact correspondence with physicskit.chaos's classical
215
+ :class:`~physicskit.chaos.systems.maps.BakersMap`: the Floquet operator applies
216
+ the discrete Fourier transform separately to the ``q < alpha`` and
217
+ ``q >= alpha`` position-basis blocks (mirroring the classical map
218
+ stretching each piece independently), then transforms the result back to
219
+ the full position representation.
220
+
221
+ Parameters
222
+ ----------
223
+ dim : int
224
+ Hilbert space dimension (number of position basis states).
225
+ alpha : float, default 0.5
226
+ Cut position, in ``(0, 1)``; matches the classical
227
+ :class:`~physicskit.chaos.systems.maps.BakersMap`'s `alpha`. The classic
228
+ Balazs-Voros construction is the ``alpha=0.5`` case with `dim` even.
229
+
230
+ Attributes
231
+ ----------
232
+ dim : int
233
+ Hilbert space dimension.
234
+ alpha : float
235
+ Cut position.
236
+ hbar : float
237
+ Effective Planck constant, ``1 / dim``.
238
+
239
+ Raises
240
+ ------
241
+ InvalidParameterError
242
+ If `alpha` does not satisfy ``0 < alpha < 1``, or if rounding
243
+ ``alpha * dim`` to the nearest integer would leave either of the two
244
+ blocks with fewer than 1 basis state.
245
+
246
+ Notes
247
+ -----
248
+ Exact correspondence with the classical cut requires ``alpha * dim`` to
249
+ be an integer; for other values, the nearest integer split is used, and
250
+ :attr:`alpha` is left at the value the caller requested rather than
251
+ silently adjusted to the value actually realized -- pass a `dim` that
252
+ makes ``alpha * dim`` (near-)integral for the closest match.
253
+ """
254
+
255
+ def __init__(self, dim: int, alpha: float = 0.5):
256
+ if not 0.0 < alpha < 1.0:
257
+ raise InvalidParameterError("alpha must satisfy 0 < alpha < 1")
258
+ n1 = round(alpha * dim)
259
+ if n1 < 1 or n1 > dim - 1:
260
+ raise InvalidParameterError("alpha * dim must round to an integer strictly between 0 and dim")
261
+ self.dim = int(dim)
262
+ self.alpha = float(alpha)
263
+ self.hbar = 1.0 / self.dim
264
+ self._n1 = n1
265
+ self._n2 = dim - n1
266
+
267
+ def floquet_operator(self) -> NDArray[np.complex128]:
268
+ """Build the one-iteration Floquet (evolution) operator.
269
+
270
+ Returns
271
+ -------
272
+ ndarray of complex, shape (dim, dim)
273
+ Unitary matrix advancing a state, in the position
274
+ representation, by one map iteration.
275
+ """
276
+ n = self.dim
277
+ block = np.zeros((n, n), dtype=np.complex128)
278
+ block[: self._n1, : self._n1] = _dft_matrix(self._n1)
279
+ block[self._n1 :, self._n1 :] = _dft_matrix(self._n2)
280
+ return _dft_matrix(n).conj().T @ block
281
+
282
+ def evolve(self, psi: ArrayLike, n_steps: int = 1) -> NDArray[np.complex128]:
283
+ """Propagate a state through ``n_steps`` map iterations.
284
+
285
+ Parameters
286
+ ----------
287
+ psi : array_like of complex, shape (dim,)
288
+ Initial state in the position representation; normalized
289
+ internally.
290
+ n_steps : int, default 1
291
+ Number of map iterations to advance.
292
+
293
+ Returns
294
+ -------
295
+ ndarray of complex, shape (n_steps + 1, dim)
296
+ The state after each iteration, including the (normalized)
297
+ initial state as row 0.
298
+ """
299
+ u = self.floquet_operator()
300
+ state = np.asarray(psi, dtype=np.complex128)
301
+ state = state / np.linalg.norm(state)
302
+ states = np.empty((n_steps + 1, self.dim), dtype=np.complex128)
303
+ states[0] = state
304
+ for i in range(n_steps):
305
+ state = u @ state
306
+ states[i + 1] = state
307
+ return states
308
+
309
+ def eigenphases(self) -> NDArray[np.float64]:
310
+ """Quasi-energies (eigenphases) of the Floquet operator.
311
+
312
+ Hand these to ``physicskit.rmt`` to study their spacing statistics.
313
+
314
+ Returns
315
+ -------
316
+ ndarray of float, shape (dim,)
317
+ Eigenphases, sorted ascending, in radians in ``(-pi, pi]``.
318
+ """
319
+ eigvals = np.linalg.eigvals(self.floquet_operator())
320
+ return np.sort(np.angle(eigvals))
321
+
322
+ def coherent_state(self, q0: float, p0: float) -> NDArray[np.complex128]:
323
+ """A minimum-uncertainty wavepacket centered at ``(q0, p0)``.
324
+
325
+ Parameters
326
+ ----------
327
+ q0, p0 : float
328
+ Phase-space center of the wavepacket, each in ``[0, 1)``.
329
+
330
+ Returns
331
+ -------
332
+ ndarray of complex, shape (dim,)
333
+ Normalized coherent state in the position representation.
334
+ """
335
+ n = self.dim
336
+ q = np.arange(n) / n
337
+ sigma2 = self.hbar
338
+ psi = np.zeros(n, dtype=np.complex128)
339
+ for m in range(-3, 4):
340
+ dq = q - q0 - m
341
+ psi += np.exp(-(dq**2) / (2.0 * sigma2)) * np.exp(1j * p0 * dq / self.hbar)
342
+ return psi / np.linalg.norm(psi)
343
+
344
+ def husimi(self, psi: ArrayLike, resolution: int = 80, n_wraps: int = 3) -> tuple[NDArray[np.float64], NDArray[np.float64], NDArray[np.float64]]:
345
+ """Husimi phase-space distribution of a state; see :func:`~physicskit.chaos.quantum.husimi.husimi_function`.
346
+
347
+ Parameters
348
+ ----------
349
+ psi : array_like of complex, shape (dim,)
350
+ State in the position representation.
351
+ resolution : int, default 80
352
+ Number of grid points along each of the ``q`` and ``p`` axes.
353
+ n_wraps : int, default 3
354
+ Number of periodic images summed to periodize the coherent
355
+ states used.
356
+
357
+ Returns
358
+ -------
359
+ Q, P, husimi : ndarray of float, shape (resolution, resolution)
360
+ Phase-space grid and the (peak-normalized) Husimi distribution.
361
+ """
362
+ state = np.asarray(psi, dtype=np.complex128)
363
+ return husimi_function(state, self.hbar, 1.0, resolution=resolution, n_wraps=n_wraps)
364
+
365
+ def __repr__(self) -> str:
366
+ return _init_repr(self)
@@ -0,0 +1,38 @@
1
+ from physicskit.chaos.systems.billiards import (
2
+ BunimovichStadium,
3
+ CircleBilliard,
4
+ EllipseBilliard,
5
+ RectangleBilliard,
6
+ SinaiBilliard,
7
+ TruncatedCircleBilliard,
8
+ )
9
+ from physicskit.chaos.systems.continuous import (
10
+ Chua,
11
+ DoublePendulum,
12
+ Duffing,
13
+ Lorenz,
14
+ MagneticPendulum,
15
+ RestrictedThreeBody,
16
+ Rossler,
17
+ )
18
+ from physicskit.chaos.systems.maps import BakersMap, HenonMap, LogisticMap, StandardMap
19
+
20
+ __all__ = [
21
+ "BakersMap",
22
+ "BunimovichStadium",
23
+ "Chua",
24
+ "CircleBilliard",
25
+ "DoublePendulum",
26
+ "Duffing",
27
+ "EllipseBilliard",
28
+ "HenonMap",
29
+ "LogisticMap",
30
+ "Lorenz",
31
+ "MagneticPendulum",
32
+ "RectangleBilliard",
33
+ "RestrictedThreeBody",
34
+ "Rossler",
35
+ "SinaiBilliard",
36
+ "StandardMap",
37
+ "TruncatedCircleBilliard",
38
+ ]