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,342 @@
1
+ """Abstract base classes for dynamical systems, discrete maps, and billiards."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import inspect
6
+ from abc import ABC, abstractmethod
7
+ from typing import Any
8
+
9
+ import numpy as np
10
+ from numpy.typing import ArrayLike, NDArray
11
+
12
+
13
+ def get_init_params(obj: object) -> dict[str, Any]:
14
+ """Read an object's constructor arguments back out of its own attributes.
15
+
16
+ Reads each of ``type(obj).__init__``'s parameter names and looks up a
17
+ same-named attribute on `obj` (the convention every concrete system in
18
+ physicskit.chaos follows, e.g. ``self.sigma = float(sigma)``), skipping any
19
+ parameter not stored under its own name. Used by :func:`_init_repr` for
20
+ generic ``__repr__`` support and by
21
+ :mod:`physicskit.chaos.utils.io` to serialize a system's configuration without
22
+ each subclass writing its own serializer.
23
+
24
+ Parameters
25
+ ----------
26
+ obj : object
27
+ Instance to introspect.
28
+
29
+ Returns
30
+ -------
31
+ dict
32
+ Mapping of ``__init__`` parameter name to its current value on `obj`.
33
+ """
34
+ cls = type(obj)
35
+ try:
36
+ parameters = inspect.signature(cls.__init__).parameters
37
+ except (TypeError, ValueError):
38
+ return {}
39
+
40
+ params = {}
41
+ for name, param in parameters.items():
42
+ if name == "self" or param.kind in (
43
+ inspect.Parameter.VAR_POSITIONAL,
44
+ inspect.Parameter.VAR_KEYWORD,
45
+ ):
46
+ continue
47
+ if not hasattr(obj, name):
48
+ continue
49
+ params[name] = getattr(obj, name)
50
+ return params
51
+
52
+
53
+ def _init_repr(obj: object) -> str:
54
+ """Build an ``eval``-able-looking repr from an object's ``__init__`` signature.
55
+
56
+ See :func:`get_init_params`; this just formats the result as
57
+ ``ClassName(param=value, ...)``.
58
+ """
59
+ parts = []
60
+ for name, value in get_init_params(obj).items():
61
+ value_repr = np.array2string(value, separator=", ") if isinstance(value, np.ndarray) else repr(value)
62
+ parts.append(f"{name}={value_repr}")
63
+ return f"{type(obj).__name__}({', '.join(parts)})"
64
+
65
+
66
+ class DynamicalSystem(ABC):
67
+ """Base class for continuous-time dynamical systems integrated as ODEs.
68
+
69
+ Subclasses expose the right-hand side of ``dx/dt = f(x, t)`` both as a
70
+ plain Python method (for convenience/plotting) and, where available, as a
71
+ Numba-jitted module-level function usable with
72
+ :mod:`physicskit.chaos.core.integrators`.
73
+ """
74
+
75
+ #: Dimension of the state vector ``x``. Set by each concrete subclass.
76
+ dim: int
77
+
78
+ @abstractmethod
79
+ def rhs(self, state: NDArray[np.float64], t: float) -> NDArray[np.float64]:
80
+ """Evaluate the vector field at ``state`` and time ``t``.
81
+
82
+ Parameters
83
+ ----------
84
+ state : ndarray of float, shape (dim,)
85
+ Current state vector.
86
+ t : float
87
+ Current time.
88
+
89
+ Returns
90
+ -------
91
+ ndarray of float, shape (dim,)
92
+ The time derivative ``dx/dt`` evaluated at ``(state, t)``.
93
+ """
94
+
95
+ def initial_state(self) -> NDArray[np.float64]:
96
+ """Return a reasonable default initial condition, if defined by the subclass.
97
+
98
+ Returns
99
+ -------
100
+ ndarray of float, shape (dim,)
101
+ A default initial state.
102
+
103
+ Raises
104
+ ------
105
+ NotImplementedError
106
+ If the subclass does not define a default initial condition.
107
+ """
108
+ raise NotImplementedError
109
+
110
+ def __repr__(self) -> str:
111
+ return _init_repr(self)
112
+
113
+
114
+ class DiscreteMap(ABC):
115
+ """Base class for discrete-time dynamical systems (iterated maps)."""
116
+
117
+ #: Dimension of the state vector ``x``. Set by each concrete subclass.
118
+ dim: int
119
+
120
+ @abstractmethod
121
+ def step(self, state: NDArray[np.float64]) -> NDArray[np.float64]:
122
+ """Advance ``state`` by one iteration of the map.
123
+
124
+ Parameters
125
+ ----------
126
+ state : ndarray of float, shape (dim,)
127
+ Current state vector.
128
+
129
+ Returns
130
+ -------
131
+ ndarray of float, shape (dim,)
132
+ The next state vector.
133
+ """
134
+
135
+ def initial_state(self) -> NDArray[np.float64]:
136
+ """Return a reasonable default initial condition, if defined by the subclass.
137
+
138
+ Returns
139
+ -------
140
+ ndarray of float, shape (dim,)
141
+ A default initial state.
142
+
143
+ Raises
144
+ ------
145
+ NotImplementedError
146
+ If the subclass does not define a default initial condition.
147
+ """
148
+ raise NotImplementedError
149
+
150
+ def trajectory(self, state0: NDArray[np.float64] | None = None, n_iter: int = 1000) -> NDArray[np.float64]:
151
+ """Iterate the map ``n_iter`` times starting from ``state0``.
152
+
153
+ Parameters
154
+ ----------
155
+ state0 : array_like of float, shape (dim,), optional
156
+ Initial state; defaults to :meth:`initial_state`.
157
+ n_iter : int, default 1000
158
+ Number of iterations to perform.
159
+
160
+ Returns
161
+ -------
162
+ ndarray of float, shape (n_iter + 1, dim)
163
+ The state at each iteration, including ``state0`` as row 0.
164
+ """
165
+ state0 = self.initial_state() if state0 is None else np.asarray(state0, dtype=np.float64)
166
+ states = np.empty((n_iter + 1, self.dim))
167
+ states[0] = state0
168
+ state = state0.copy()
169
+ for i in range(n_iter):
170
+ state = self.step(state)
171
+ states[i + 1] = state
172
+ return states
173
+
174
+ def __repr__(self) -> str:
175
+ return _init_repr(self)
176
+
177
+
178
+ class BilliardSystem(ABC):
179
+ """Base class for 2D billiard geometries.
180
+
181
+ A billiard is described as a closed boundary made of straight segments
182
+ and circular arcs. Subclasses build this boundary representation once (in
183
+ ``_build_boundary``) and this base class provides the shared,
184
+ Numba-accelerated ray-tracing / specular-reflection machinery plus
185
+ boundary-coordinate (arclength ``s``, sine of the reflection angle
186
+ ``sin(phi)``) bookkeeping used for Poincare sections.
187
+
188
+ Attributes
189
+ ----------
190
+ _segments : ndarray of float, shape (n_segments, 4)
191
+ Straight boundary walls, each row ``(x1, y1, x2, y2)``.
192
+ _arcs : ndarray of float, shape (n_arcs, 5)
193
+ Circular-arc boundary walls, each row ``(cx, cy, r, theta1, theta2)``.
194
+ _arc_full : ndarray of bool, shape (n_arcs,)
195
+ Whether each arc is a full circle (``True``) or a bounded arc.
196
+ _s_offsets_seg : ndarray of float, shape (n_segments,)
197
+ Cumulative boundary arclength at the start of each segment.
198
+ _s_offsets_arc : ndarray of float, shape (n_arcs,)
199
+ Cumulative boundary arclength at the start of each arc.
200
+ _perimeter : float
201
+ Total boundary perimeter.
202
+ """
203
+
204
+ def __init__(self) -> None:
205
+ self._segments: NDArray[np.float64]
206
+ self._arcs: NDArray[np.float64]
207
+ self._arc_full: NDArray[np.bool_]
208
+ self._s_offsets_seg: NDArray[np.float64]
209
+ self._s_offsets_arc: NDArray[np.float64]
210
+ self._perimeter: float
211
+ self._build_boundary()
212
+
213
+ @abstractmethod
214
+ def _build_boundary(self) -> None:
215
+ """Populate the boundary arrays and cumulative arclength offsets.
216
+
217
+ Sets ``self._segments``, ``self._arcs``, ``self._arc_full``,
218
+ ``self._s_offsets_seg``, ``self._s_offsets_arc``, and
219
+ ``self._perimeter``, typically by delegating to
220
+ ``self._finalize_boundary``.
221
+ """
222
+
223
+ @abstractmethod
224
+ def sample_interior_point(self) -> NDArray[np.float64]:
225
+ """Return a point guaranteed to lie in the billiard's interior.
226
+
227
+ Returns
228
+ -------
229
+ ndarray of float, shape (2,)
230
+ An ``(x, y)`` point strictly inside the billiard.
231
+ """
232
+
233
+ def perimeter(self) -> float:
234
+ """Total boundary perimeter.
235
+
236
+ Returns
237
+ -------
238
+ float
239
+ The billiard boundary's total arclength.
240
+ """
241
+ return self._perimeter
242
+
243
+ def boundary_arrays(
244
+ self,
245
+ ) -> tuple[NDArray[np.float64], NDArray[np.float64], NDArray[np.bool_]]:
246
+ """Return the raw boundary wall arrays.
247
+
248
+ Returns
249
+ -------
250
+ segments : ndarray of float, shape (n_segments, 4)
251
+ Straight walls, each row ``(x1, y1, x2, y2)``.
252
+ arcs : ndarray of float, shape (n_arcs, 5)
253
+ Circular-arc walls, each row ``(cx, cy, r, theta1, theta2)``.
254
+ arc_full : ndarray of bool, shape (n_arcs,)
255
+ Whether each arc is a full circle.
256
+ """
257
+ return self._segments, self._arcs, self._arc_full
258
+
259
+ @abstractmethod
260
+ def simulate(self, pos: ArrayLike, vel: ArrayLike, n_bounces: int) -> dict[str, NDArray[Any]]:
261
+ """Trace ``n_bounces`` specular reflections from an initial ray.
262
+
263
+ Parameters
264
+ ----------
265
+ pos : array_like of float, shape (2,)
266
+ Initial position ``(x, y)``; must lie in the billiard's interior.
267
+ vel : array_like of float, shape (2,)
268
+ Initial velocity direction ``(vx, vy)``; normalized internally.
269
+ n_bounces : int
270
+ Number of reflections to simulate.
271
+
272
+ Returns
273
+ -------
274
+ dict
275
+ Dictionary with keys ``x``, ``y``, ``vx``, ``vy``, ``s``,
276
+ ``sin_phi``, ``wall_type``, ``wall_idx``, each an array of
277
+ length `n_bounces`; see the concrete implementation (shared by
278
+ every billiard shape) for details.
279
+ """
280
+
281
+ @abstractmethod
282
+ def simulate_many_rays(self, pos: ArrayLike, angles: ArrayLike, n_bounces: int) -> dict[str, NDArray[Any]]:
283
+ """Trace many independent rays from one point, in parallel.
284
+
285
+ Parameters
286
+ ----------
287
+ pos : array_like of float, shape (2,)
288
+ Shared initial position ``(x, y)`` for every ray; must lie in the
289
+ billiard's interior.
290
+ angles : array_like of float, shape (n_rays,)
291
+ Initial launch angle (radians) of each ray.
292
+ n_bounces : int
293
+ Number of reflections to simulate per ray.
294
+
295
+ Returns
296
+ -------
297
+ dict
298
+ Same keys as :meth:`simulate`, but each value is the
299
+ concatenation (in ray order, then bounce order) of every ray's
300
+ results, shape ``(n_rays * n_bounces,)``.
301
+ """
302
+
303
+ @abstractmethod
304
+ def trajectory_segments(self, pos: ArrayLike, vel: ArrayLike, n_bounces: int) -> tuple[NDArray[np.float64], dict[str, NDArray[Any]]]:
305
+ """Trace a trajectory and return its full real-space polyline.
306
+
307
+ Parameters
308
+ ----------
309
+ pos : array_like of float, shape (2,)
310
+ Initial position ``(x, y)``; must lie in the billiard's interior.
311
+ vel : array_like of float, shape (2,)
312
+ Initial velocity direction ``(vx, vy)``; normalized internally.
313
+ n_bounces : int
314
+ Number of reflections to simulate.
315
+
316
+ Returns
317
+ -------
318
+ path : ndarray of float, shape (n_bounces + 1, 2)
319
+ Positions visited, including the initial position as row 0.
320
+ result : dict
321
+ The same dictionary returned by :meth:`simulate`.
322
+ """
323
+
324
+ @abstractmethod
325
+ def boundary_polyline(self, points_per_arc: int = 200) -> NDArray[np.float64]:
326
+ """Trace the boundary as one or more closed polylines, suitable for plotting.
327
+
328
+ Parameters
329
+ ----------
330
+ points_per_arc : int, default 200
331
+ Number of points used to sample each circular arc.
332
+
333
+ Returns
334
+ -------
335
+ ndarray of float, shape (M, 2)
336
+ Points tracing the boundary; disjoint closed components (if any)
337
+ are separated by a row of ``NaN``. See the concrete
338
+ implementation (shared by every billiard shape) for details.
339
+ """
340
+
341
+ def __repr__(self) -> str:
342
+ return _init_repr(self)
@@ -0,0 +1,40 @@
1
+ """Numba-accelerated numerical integrators.
2
+
3
+ Re-exports the shared, params-array-convention integrators from
4
+ :mod:`physicskit.integrators`, which is where the implementations live. See
5
+ that module for the ``rhs(state, t, params) -> ndarray`` /
6
+ ``force(pos, t, params) -> ndarray`` calling convention required by every
7
+ function here, and for why it's kept explicit rather than closing over
8
+ Python scalars (it lets Numba compile these integrators once and reuse
9
+ them, as first-class functions, across every system defined in
10
+ :mod:`physicskit.chaos.systems.continuous`).
11
+
12
+ The two symplectic integrators (:func:`leapfrog_step`, 2nd order, and
13
+ :func:`yoshida4_step`, 4th order) only apply to *separable* Hamiltonian
14
+ systems of the form ``pos'' = force(pos, t)`` (the force may not depend on
15
+ velocity); RK4 is required for non-separable systems (e.g. anything with a
16
+ Coriolis-like velocity-dependent force, such as
17
+ :class:`physicskit.chaos.systems.continuous.RestrictedThreeBody`).
18
+ """
19
+
20
+ from __future__ import annotations
21
+
22
+ from physicskit.integrators.fixed_step import (
23
+ RHSFunc,
24
+ leapfrog_integrate,
25
+ leapfrog_step,
26
+ rk4_integrate,
27
+ rk4_step,
28
+ yoshida4_integrate,
29
+ yoshida4_step,
30
+ )
31
+
32
+ __all__ = [
33
+ "RHSFunc",
34
+ "rk4_step",
35
+ "rk4_integrate",
36
+ "leapfrog_step",
37
+ "leapfrog_integrate",
38
+ "yoshida4_step",
39
+ "yoshida4_integrate",
40
+ ]
@@ -0,0 +1,24 @@
1
+ """Custom exception hierarchy for physicskit.chaos.
2
+
3
+ All exceptions physicskit.chaos raises intentionally (as opposed to exceptions that
4
+ bubble up unexpectedly from a dependency) inherit from :class:`ChaoskitError`,
5
+ so callers can catch "any physicskit.chaos-raised problem" with a single ``except
6
+ ChaoskitError``. Each concrete exception also inherits from the closest
7
+ matching built-in exception type (e.g. :class:`InvalidParameterError` is
8
+ also a :class:`ValueError`), so existing code that catches the built-in type
9
+ continues to work unchanged.
10
+ """
11
+
12
+ from __future__ import annotations
13
+
14
+
15
+ class ChaoskitError(Exception):
16
+ """Base class for all exceptions raised intentionally by physicskit.chaos."""
17
+
18
+
19
+ class InvalidParameterError(ChaoskitError, ValueError):
20
+ """A system or tool was constructed or called with an invalid parameter.
21
+
22
+ Examples include a billiard's scatterer not fitting inside its cell, or a
23
+ map's parameter falling outside its valid range.
24
+ """
@@ -0,0 +1,38 @@
1
+ """Quantum chaos: quantized versions of physicskit.chaos's classical maps and billiards.
2
+
3
+ Two complementary playgrounds, both built directly on top of physicskit.chaos's
4
+ existing classical systems:
5
+
6
+ - :class:`~physicskit.chaos.quantum.maps.QuantumKickedRotor` and
7
+ :class:`~physicskit.chaos.quantum.maps.QuantumBakersMap` quantize
8
+ :class:`~physicskit.chaos.systems.maps.StandardMap` and
9
+ :class:`~physicskit.chaos.systems.maps.BakersMap` respectively, as finite
10
+ ``dim``-dimensional unitary Floquet operators built from the discrete
11
+ Fourier transform.
12
+ - :class:`~physicskit.chaos.quantum.billiards.QuantumBilliard` solves the Dirichlet
13
+ Helmholtz eigenproblem inside any
14
+ :class:`~physicskit.chaos.core.base_system.BilliardSystem` shape physicskit.chaos ships.
15
+
16
+ :func:`~physicskit.chaos.quantum.husimi.husimi_function` builds the phase-space
17
+ (Husimi) representation shared by both quantum map classes.
18
+
19
+ Random-matrix-theory analyses of any of these objects' spectra --
20
+ nearest-neighbor spacing distributions, spectral rigidity, and the like --
21
+ are intentionally not provided here; that is the job of the separate
22
+ ``physicskit.rmt`` package, which can consume the eigenphases/wavenumbers these
23
+ classes expose directly.
24
+ """
25
+
26
+ from __future__ import annotations
27
+
28
+ from physicskit.chaos.quantum.billiards import QuantumBilliard, points_in_billiard
29
+ from physicskit.chaos.quantum.husimi import husimi_function
30
+ from physicskit.chaos.quantum.maps import QuantumBakersMap, QuantumKickedRotor
31
+
32
+ __all__ = [
33
+ "QuantumBakersMap",
34
+ "QuantumBilliard",
35
+ "QuantumKickedRotor",
36
+ "husimi_function",
37
+ "points_in_billiard",
38
+ ]