xtrack 0.69.1__tar.gz → 0.69.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (252) hide show
  1. {xtrack-0.69.1/xtrack.egg-info → xtrack-0.69.3}/PKG-INFO +5 -1
  2. {xtrack-0.69.1 → xtrack-0.69.3}/setup.py +2 -1
  3. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_environment.py +91 -0
  4. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_survey.py +9 -4
  5. xtrack-0.69.3/xtrack/_version.py +1 -0
  6. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/environment.py +12 -1
  7. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/line.py +73 -4
  8. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/survey.py +9 -1
  9. {xtrack-0.69.1 → xtrack-0.69.3/xtrack.egg-info}/PKG-INFO +5 -1
  10. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack.egg-info/requires.txt +5 -0
  11. xtrack-0.69.1/xtrack/_version.py +0 -1
  12. {xtrack-0.69.1 → xtrack-0.69.3}/LICENSE +0 -0
  13. {xtrack-0.69.1 → xtrack-0.69.3}/MANIFEST.in +0 -0
  14. {xtrack-0.69.1 → xtrack-0.69.3}/README.md +0 -0
  15. {xtrack-0.69.1 → xtrack-0.69.3}/ducktrack/__init__.py +0 -0
  16. {xtrack-0.69.1 → xtrack-0.69.3}/ducktrack/base_classes.py +0 -0
  17. {xtrack-0.69.1 → xtrack-0.69.3}/ducktrack/be_beamfields/BB6D.py +0 -0
  18. {xtrack-0.69.1 → xtrack-0.69.3}/ducktrack/be_beamfields/BB6Ddata.py +0 -0
  19. {xtrack-0.69.1 → xtrack-0.69.3}/ducktrack/be_beamfields/__init__.py +0 -0
  20. {xtrack-0.69.1 → xtrack-0.69.3}/ducktrack/be_beamfields/beambeam.py +0 -0
  21. {xtrack-0.69.1 → xtrack-0.69.3}/ducktrack/be_beamfields/boost.py +0 -0
  22. {xtrack-0.69.1 → xtrack-0.69.3}/ducktrack/be_beamfields/gaussian_fields.py +0 -0
  23. {xtrack-0.69.1 → xtrack-0.69.3}/ducktrack/be_beamfields/propagate_sigma_matrix.py +0 -0
  24. {xtrack-0.69.1 → xtrack-0.69.3}/ducktrack/be_beamfields/qgauss.py +0 -0
  25. {xtrack-0.69.1 → xtrack-0.69.3}/ducktrack/be_beamfields/slicing.py +0 -0
  26. {xtrack-0.69.1 → xtrack-0.69.3}/ducktrack/be_beamfields/spacecharge.py +0 -0
  27. {xtrack-0.69.1 → xtrack-0.69.3}/ducktrack/elements.py +0 -0
  28. {xtrack-0.69.1 → xtrack-0.69.3}/ducktrack/line.py +0 -0
  29. {xtrack-0.69.1 → xtrack-0.69.3}/ducktrack/mathlibs.py +0 -0
  30. {xtrack-0.69.1 → xtrack-0.69.3}/ducktrack/particles.py +0 -0
  31. {xtrack-0.69.1 → xtrack-0.69.3}/ducktrack/temp_pyparticles.py +0 -0
  32. {xtrack-0.69.1 → xtrack-0.69.3}/pyproject.toml +0 -0
  33. {xtrack-0.69.1 → xtrack-0.69.3}/setup.cfg +0 -0
  34. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_acceleration.py +0 -0
  35. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_amplitude_detuning.py +0 -0
  36. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_aperture_turn_ele_and_monitor.py +0 -0
  37. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_apertures.py +0 -0
  38. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_attr_replicas_and_slices.py +0 -0
  39. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_cavity_absolute_time.py +0 -0
  40. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_chromatic_functions_vs_madx.py +0 -0
  41. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_coasting.py +0 -0
  42. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_collective_tracker.py +0 -0
  43. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_collimation.py +0 -0
  44. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_element_characterization_functions.py +0 -0
  45. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_element_internal_record.py +0 -0
  46. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_elements.py +0 -0
  47. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_elements_classflags.py +0 -0
  48. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_elements_thick.py +0 -0
  49. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_fcc_ee_solenoid_correction.py +0 -0
  50. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_fcc_ee_solenoid_correction_new_optimize_api.py +0 -0
  51. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_footprint.py +0 -0
  52. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_freeze_longitudinal.py +0 -0
  53. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_full_rings.py +0 -0
  54. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_hvkick.py +0 -0
  55. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_ions.py +0 -0
  56. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_lhc_match_phase_15.py +0 -0
  57. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_line.py +0 -0
  58. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_lumi.py +0 -0
  59. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_mad_writer.py +0 -0
  60. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_madloader.py +0 -0
  61. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_match_and_track_from_element.py +0 -0
  62. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_match_coupling_knob.py +0 -0
  63. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_match_nested.py +0 -0
  64. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_match_optics_and_ip_knob.py +0 -0
  65. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_match_optics_and_ip_knob_new_optimize_api.py +0 -0
  66. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_match_orbit_bump.py +0 -0
  67. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_match_tune_chroma_cminus.py +0 -0
  68. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_monitor.py +0 -0
  69. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_multiline.py +0 -0
  70. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_multisetter.py +0 -0
  71. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_multispecies.py +0 -0
  72. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_particles_api.py +0 -0
  73. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_periodic_symmetric_twiss_and_match.py +0 -0
  74. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_pipeline.py +0 -0
  75. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_prebuild_kernels.py +0 -0
  76. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_ps_against_ptc.py +0 -0
  77. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_ps_multiturn_twiss.py +0 -0
  78. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_psb_chicane.py +0 -0
  79. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_pyht_interface.py +0 -0
  80. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_radial_steering.py +0 -0
  81. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_radiation.py +0 -0
  82. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_radiation_equilibrium_emittances.py +0 -0
  83. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_random_gen.py +0 -0
  84. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_random_gen_exp.py +0 -0
  85. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_random_gen_gauss.py +0 -0
  86. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_random_gen_ruth.py +0 -0
  87. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_rf_track.py +0 -0
  88. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_rotation_signs.py +0 -0
  89. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_second_order_taylor_map.py +0 -0
  90. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_seeds.py +0 -0
  91. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_slice_and_insert_with_replicas.py +0 -0
  92. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_slice_elements.py +0 -0
  93. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_slicing.py +0 -0
  94. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_solenoid_bz_map_vs_boris.py +0 -0
  95. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_spacecharge_in_ring.py +0 -0
  96. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_sps_thick.py +0 -0
  97. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_tapering.py +0 -0
  98. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_thick_lhc.py +0 -0
  99. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_tilt_shifts.py +0 -0
  100. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_tracker.py +0 -0
  101. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_trajectory_correcton.py +0 -0
  102. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_twiss.py +0 -0
  103. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_twiss_vs_madx_psb.py +0 -0
  104. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_vs_madx.py +0 -0
  105. {xtrack-0.69.1 → xtrack-0.69.3}/tests/test_xmask_orbit_correction.py +0 -0
  106. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/__init__.py +0 -0
  107. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/_temp/__init__.py +0 -0
  108. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/_temp/boris_and_solenoid_map/__init__.py +0 -0
  109. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/_temp/boris_and_solenoid_map/boris.h +0 -0
  110. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/_temp/boris_and_solenoid_map/solenoid_field.py +0 -0
  111. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/_temp/lhc_match/__init__.py +0 -0
  112. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/_temp/lhc_match/gen_madx_optics_file.py +0 -0
  113. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/_temp/lhc_match/lhc_match.py +0 -0
  114. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/_temp/lhc_match/var_limits.py +0 -0
  115. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/base_element.py +0 -0
  116. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/__init__.py +0 -0
  117. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/apertures.py +0 -0
  118. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/apertures_src/limitellipse.h +0 -0
  119. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/apertures_src/limitpolygon.h +0 -0
  120. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/apertures_src/limitracetrack.h +0 -0
  121. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/apertures_src/limitrect.h +0 -0
  122. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/apertures_src/limitrectellipse.h +0 -0
  123. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/apertures_src/longitudinallimitrect.h +0 -0
  124. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/beam_interaction.py +0 -0
  125. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements.py +0 -0
  126. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/bend.h +0 -0
  127. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/cavity.h +0 -0
  128. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/dipole_fringe.h +0 -0
  129. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/dipoleedge.h +0 -0
  130. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/drift.h +0 -0
  131. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/drift_elem.h +0 -0
  132. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/drift_slice.h +0 -0
  133. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/drift_slice_bend.h +0 -0
  134. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/drift_slice_octupole.h +0 -0
  135. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/drift_slice_quadrupole.h +0 -0
  136. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/drift_slice_sextupole.h +0 -0
  137. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/elens.h +0 -0
  138. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/exciter.h +0 -0
  139. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/firstordertaylormap.h +0 -0
  140. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/linesegmentmap.h +0 -0
  141. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/multipole.h +0 -0
  142. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/nonlinearlens.h +0 -0
  143. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/octupole.h +0 -0
  144. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/quadrupole.h +0 -0
  145. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/referenceenergyincrease.h +0 -0
  146. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/rfmultipole.h +0 -0
  147. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/second_order_taylor_map.h +0 -0
  148. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/sextupole.h +0 -0
  149. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/simplethinbend.h +0 -0
  150. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/simplethinquadrupole.h +0 -0
  151. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/solenoid.h +0 -0
  152. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/srotation.h +0 -0
  153. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/thick_slice_bend.h +0 -0
  154. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/thick_slice_drift.h +0 -0
  155. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/thick_slice_octupole.h +0 -0
  156. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/thick_slice_quadrupole.h +0 -0
  157. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/thick_slice_sextupole.h +0 -0
  158. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/thick_slice_solenoid.h +0 -0
  159. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/thin_slice_bend.h +0 -0
  160. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/thin_slice_bend_entry.h +0 -0
  161. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/thin_slice_bend_exit.h +0 -0
  162. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/thin_slice_octupole.h +0 -0
  163. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/thin_slice_quadrupole.h +0 -0
  164. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/thin_slice_sextupole.h +0 -0
  165. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/track_bend.h +0 -0
  166. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/track_dipole_edge_linear.h +0 -0
  167. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/track_dipole_edge_nonlinear.h +0 -0
  168. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/track_dipole_fringe.h +0 -0
  169. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/track_mult_fringe.h +0 -0
  170. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/track_multipolar_components.h +0 -0
  171. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/track_multipole.h +0 -0
  172. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/track_quadrupole.h +0 -0
  173. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/track_solenoid.h +0 -0
  174. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/track_srotation.h +0 -0
  175. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/track_thick_bend.h +0 -0
  176. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/track_thick_cfd.h +0 -0
  177. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/track_wedge.h +0 -0
  178. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/track_xrotation.h +0 -0
  179. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/track_yrotation.h +0 -0
  180. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/wedge.h +0 -0
  181. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/wire.h +0 -0
  182. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/xrotation.h +0 -0
  183. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/xyshift.h +0 -0
  184. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/yrotation.h +0 -0
  185. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/elements_src/zetashift.h +0 -0
  186. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/exciter.py +0 -0
  187. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/rft_element.py +0 -0
  188. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/slice_elements.py +0 -0
  189. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/beam_elements/slice_elements_thick.py +0 -0
  190. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/footprint.py +0 -0
  191. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/general.py +0 -0
  192. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/headers/atomicadd.h +0 -0
  193. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/headers/checks.h +0 -0
  194. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/headers/constants.h +0 -0
  195. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/headers/particle_states.h +0 -0
  196. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/headers/synrad_spectrum.h +0 -0
  197. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/internal_record.py +0 -0
  198. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/json_utils.py +0 -0
  199. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/linear_normal_form.py +0 -0
  200. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/loss_location_refinement/__init__.py +0 -0
  201. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/loss_location_refinement/loss_location_refinement.py +0 -0
  202. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/lumi.py +0 -0
  203. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/mad_loader.py +0 -0
  204. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/mad_writer.py +0 -0
  205. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/match.py +0 -0
  206. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/monitors/__init__.py +0 -0
  207. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/monitors/beam_position_monitor.h +0 -0
  208. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/monitors/beam_position_monitor.py +0 -0
  209. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/monitors/beam_profile_monitor.h +0 -0
  210. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/monitors/beam_profile_monitor.py +0 -0
  211. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/monitors/beam_size_monitor.h +0 -0
  212. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/monitors/beam_size_monitor.py +0 -0
  213. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/monitors/last_turns_monitor.h +0 -0
  214. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/monitors/last_turns_monitor.py +0 -0
  215. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/monitors/particles_monitor.h +0 -0
  216. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/monitors/particles_monitor.py +0 -0
  217. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/multiline/__init__.py +0 -0
  218. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/multiline/multiline.py +0 -0
  219. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/multiline/shared_knobs.py +0 -0
  220. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/multisetter/__init__.py +0 -0
  221. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/multisetter/multisetter.py +0 -0
  222. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/particles/__init__.py +0 -0
  223. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/particles/constants.py +0 -0
  224. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/particles/particles.py +0 -0
  225. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/particles/rng_src/base_rng.h +0 -0
  226. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/particles/rng_src/particles_rng.h +0 -0
  227. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/pipeline/__init__.py +0 -0
  228. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/pipeline/core.py +0 -0
  229. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/pipeline/manager.py +0 -0
  230. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/pipeline/multitracker.py +0 -0
  231. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/progress_indicator.py +0 -0
  232. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/random/__init__.py +0 -0
  233. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/random/random_generators.py +0 -0
  234. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/random/random_src/exponential.h +0 -0
  235. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/random/random_src/exponential_integral_Ei.h +0 -0
  236. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/random/random_src/normal.h +0 -0
  237. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/random/random_src/rutherford.h +0 -0
  238. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/random/random_src/uniform.h +0 -0
  239. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/random/random_src/uniform_accurate.h +0 -0
  240. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/slicing.py +0 -0
  241. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/synctime.py +0 -0
  242. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/tapering.py +0 -0
  243. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/targets.py +0 -0
  244. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/tracker.py +0 -0
  245. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/tracker_data.py +0 -0
  246. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/tracker_src/tracker.h +0 -0
  247. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/trajectory_correction.py +0 -0
  248. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/twiss.py +0 -0
  249. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack/twissplot.py +0 -0
  250. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack.egg-info/SOURCES.txt +0 -0
  251. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack.egg-info/dependency_links.txt +0 -0
  252. {xtrack-0.69.1 → xtrack-0.69.3}/xtrack.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: xtrack
3
- Version: 0.69.1
3
+ Version: 0.69.3
4
4
  Summary: Tracking library for particle accelerators
5
5
  Home-page: https://xsuite.readthedocs.io/
6
6
  Download-URL: https://pypi.python.org/pypi/xtrack
@@ -22,5 +22,9 @@ Requires-Dist: nafflib; extra == "tests"
22
22
  Requires-Dist: PyHEADTAIL; extra == "tests"
23
23
  Requires-Dist: pytest; extra == "tests"
24
24
  Requires-Dist: pytest-mock; extra == "tests"
25
+ Provides-Extra: notebooks
26
+ Requires-Dist: jupyter; extra == "notebooks"
27
+ Requires-Dist: ipympl; extra == "notebooks"
28
+ Requires-Dist: xplt; extra == "notebooks"
25
29
 
26
30
  Tracking library for particle accelerators
@@ -49,5 +49,6 @@ setup(
49
49
  ],
50
50
  extras_require={
51
51
  'tests': ['cpymad', 'nafflib', 'PyHEADTAIL', 'pytest', 'pytest-mock'],
52
- },
52
+ 'notebooks': ['jupyter', 'ipympl', 'xplt'],
53
+ },
53
54
  )
@@ -1377,6 +1377,26 @@ def test_assemble_ring_repeated_elements():
1377
1377
  tw_one_cell_stripped = tw_one_cell.rows[:-1] # remove _end_point
1378
1378
  xo.assert_allclose(tw_one_cell_stripped.betx, tw_one_cell_ref.betx, atol=0, rtol=5e-4)
1379
1379
 
1380
+ cell_selected = arc.select(start='mid::2', end='mid::3')
1381
+ tw_cell_selected = cell_selected.twiss4d()
1382
+ tw_cell_selected_stripped = tw_cell_selected.rows[:-1] # remove _end_point
1383
+ xo.assert_allclose(tw_cell_selected_stripped.betx, tw_one_cell_ref.betx, atol=0, rtol=5e-4)
1384
+
1385
+ tt_ring2 = ring2.get_table(attr=True)
1386
+ assert tt_ring2['name', 39] == 'mq.f::1'
1387
+ assert tt_ring2['name', 48] == 'mq.f::2'
1388
+ assert ring2.element_names[39] == 'mq.f'
1389
+ assert ring2.element_names[48] == 'mq.f'
1390
+
1391
+ ring2.replace_all_repeated_elements()
1392
+ tt_ring2_after = ring2.get_table(attr=True)
1393
+ assert tt_ring2_after['name', 39] == 'mq.f.1'
1394
+ assert tt_ring2_after['name', 48] == 'mq.f.2'
1395
+ assert ring2.element_names[39] == 'mq.f.1'
1396
+ assert ring2.element_names[48] == 'mq.f.2'
1397
+ assert str(ring2.ref['mq.f.1'].k1._expr) == "vars['kqf']"
1398
+ assert str(ring2.ref['mq.f.2'].k1._expr) == "vars['kqf']"
1399
+ assert ring2.get('mq.f.1') is not ring2.get('mq.f.2')
1380
1400
 
1381
1401
  # import matplotlib.pyplot as plt
1382
1402
  # plt.close('all')
@@ -1762,3 +1782,74 @@ def test_select_in_multiline():
1762
1782
  == "((-vars['acbch7.r1b1']) + vars['aaa'])")
1763
1783
  assert line_sel.get('mcbch.7r1.b1').knl[0] == 1e-6
1764
1784
  assert line.get('mcbch.7r1.b1').knl[0] == 1e-6
1785
+
1786
+ @pytest.mark.parametrize('container_type', ['env', 'line'])
1787
+ def test_inpection_methods(container_type):
1788
+
1789
+ env = xt.Environment()
1790
+
1791
+ env.vars({
1792
+ 'k.1': 1.,
1793
+ 'a': 2.,
1794
+ 'b': '2 * a + k.1',
1795
+ })
1796
+
1797
+ line = env.new_line([
1798
+ env.new('bb', xt.Bend, k0='2 * b', length=3+env.vars['a'] + env.vars['b'],
1799
+ h=5., ksl=[0, '3*b']),
1800
+ ])
1801
+
1802
+ ee = {'env': env, 'line': line}[container_type]
1803
+
1804
+ # Line/Env methods (get, set, eval, get_expr, new_expr, info)
1805
+ assert ee.get('b') == 2 * 2 + 1
1806
+ assert ee.get('bb') is env.element_dict['bb']
1807
+
1808
+ assert str(ee.get_expr('b')) == "((2.0 * vars['a']) + vars['k.1'])"
1809
+
1810
+ assert ee.eval('3*a - sqrt(k.1)') == 5
1811
+
1812
+ ne = ee.new_expr('sqrt(3*a + 3)')
1813
+ assert xd.refs.is_ref(ne)
1814
+ assert str(ne) == "f.sqrt(((3.0 * vars['a']) + 3.0))"
1815
+
1816
+ ee.info('bb') # Check that it works
1817
+ ee.info('b')
1818
+ ee.info('a')
1819
+
1820
+ ee.set('c', '6*a')
1821
+ assert ee.get('c') == 6 * 2
1822
+
1823
+ # Line/Env containers (env[...], env.ref[...]
1824
+ assert ee['b'] == 2 * 2 + 1
1825
+ assert type(ee['bb']).__name__ == 'View'
1826
+ assert ee['bb'].__class__.__name__ == 'Bend'
1827
+
1828
+ # Vars methods (get, set, eval, get_expr, new_expr, info, get_table)
1829
+ assert ee.vars.get('b') == 2 * 2 + 1
1830
+
1831
+ assert str(ee.vars.get_expr('b')) == "((2.0 * vars['a']) + vars['k.1'])"
1832
+
1833
+ assert ee.vars.eval('3*a - sqrt(k.1)') == 5
1834
+
1835
+ ne = ee.vars.new_expr('sqrt(3*a + 3)')
1836
+ assert xd.refs.is_ref(ne)
1837
+ assert str(ne) == "f.sqrt(((3.0 * vars['a']) + 3.0))"
1838
+
1839
+ ee.vars.info('b')
1840
+ ee.vars.info('a')
1841
+
1842
+ ee.vars.set('d', '7*a')
1843
+ assert ee.vars.get('d') == 7 * 2
1844
+
1845
+ assert xd.refs.is_ref(ee.vars['b'])
1846
+
1847
+ # View methods get_expr, get_value, get_info, get_table (for now)
1848
+ assert xd.refs.is_ref(ee['bb'].get_expr('k0'))
1849
+ assert str(ee['bb'].get_expr('k0')) == "(2.0 * vars['b'])"
1850
+ assert ee['bb'].get_expr('k0')._value == 2 * (2 * 2 + 1)
1851
+ assert ee['bb'].get_value('k0') == 2 * (2 * 2 + 1)
1852
+
1853
+ tt = ee['bb'].get_table()
1854
+ assert tt['value', 'k0'] == 2 * (2 * 2 + 1)
1855
+ assert tt['expr', 'k0'] == "(2.0 * vars['b'])"
@@ -12,6 +12,11 @@ tilted = True
12
12
  orientation = 'acw'
13
13
  transform_to_actual_elements = True
14
14
 
15
+ if hasattr(np, 'trapezoid'): # numpy >= 2.0
16
+ trapz = np.trapezoid
17
+ else:
18
+ trapz = np.trapz
19
+
15
20
  @for_all_test_contexts
16
21
  @pytest.mark.parametrize(
17
22
  'slice_mode',
@@ -103,17 +108,17 @@ def test_survey_slicing(test_context, slice_mode, tilted, orientation,
103
108
 
104
109
  if not tilted and orientation == 'acw':
105
110
  assert_allclose(np.abs(sv.Y), 0, rtol=0, atol=1e-14)
106
- assert_allclose(np.trapezoid(sv.X, sv.Z), -4.818 , rtol=0, # anti-clockwise
111
+ assert_allclose(trapz(sv.X, sv.Z), -4.818 , rtol=0, # anti-clockwise
107
112
  atol=(2e-3 if slice_mode is not None else 0.5))
108
113
  elif not tilted and orientation == 'cw':
109
114
  assert_allclose(np.abs(sv.Y), 0, rtol=0, atol=1e-14)
110
- assert_allclose(np.trapezoid(sv.X, sv.Z), 4.818 , rtol=0, # clockwise
115
+ assert_allclose(trapz(sv.X, sv.Z), 4.818 , rtol=0, # clockwise
111
116
  atol=(2e-3 if slice_mode is not None else 0.5))
112
117
  elif tilted and orientation == 'acw':
113
118
  assert_allclose(np.abs(sv.X), 0, rtol=0, atol=1e-14)
114
- assert_allclose(np.trapezoid(sv.Y, sv.Z), -4.818 , rtol=0, # anti-clockwise
119
+ assert_allclose(trapz(sv.Y, sv.Z), -4.818 , rtol=0, # anti-clockwise
115
120
  atol=(2e-3 if slice_mode is not None else 0.5))
116
121
  elif tilted and orientation == 'cw':
117
122
  assert_allclose(np.abs(sv.X), 0, rtol=0, atol=1e-14)
118
- assert_allclose(np.trapezoid(sv.Y, sv.Z), 4.818 , rtol=0, # clockwise
123
+ assert_allclose(trapz(sv.Y, sv.Z), 4.818 , rtol=0, # clockwise
119
124
  atol=(2e-3 if slice_mode is not None else 0.5))
@@ -0,0 +1 @@
1
+ __version__ = '0.69.3'
@@ -40,6 +40,12 @@ class Environment:
40
40
  self._drift_counter = 0
41
41
  self.ref = EnvRef(self)
42
42
 
43
+ @property
44
+ def manager(self):
45
+ if not hasattr(self, '_var_management') or self._var_management is None:
46
+ self._init_var_management()
47
+ return self._var_management['manager']
48
+
43
49
  def new_line(self, components=None, name=None):
44
50
  out = xt.Line()
45
51
  out.particle_ref = self.particle_ref
@@ -198,6 +204,11 @@ Environment.replace_replica = xt.Line.replace_replica
198
204
  Environment.__getitem__ = xt.Line.__getitem__
199
205
  Environment.set = xt.Line.set
200
206
  Environment.get = xt.Line.get
207
+ Environment.eval = xt.Line.eval
208
+ Environment.info = xt.Line.info
209
+ Environment.get_expr = xt.Line.get_expr
210
+ Environment.new_expr = xt.Line.new_expr
211
+
201
212
 
202
213
  class Place:
203
214
 
@@ -356,7 +367,7 @@ def _resolve_s_positions(seq_all_places, env):
356
367
  aux_s_center.append(ss)
357
368
  aux_tt['s_center'] = np.concatenate([aux_s_center, [0]])
358
369
 
359
- i_sorted = np.argsort(aux_s_center, stable=True)
370
+ i_sorted = np.argsort(aux_s_center, kind='stable')
360
371
 
361
372
  name_sorted = [str(aux_tt.name[ii]) for ii in i_sorted]
362
373
 
@@ -3405,7 +3405,8 @@ class Line:
3405
3405
 
3406
3406
  def __add__(self, other):
3407
3407
  self._env_if_needed
3408
- assert isinstance(other, Line), 'Only Line can be added to Line'
3408
+ #assert isinstance(other, Line), 'Only Line can be added to Line'
3409
+ assert other.__class__.__name__=="Line", 'Only Line can be added to Line'
3409
3410
  assert other.env is self.env, 'Lines must be in the same environment'
3410
3411
  out = self.env.new_line(
3411
3412
  components=list(self.element_names) + list(other.element_names))
@@ -3458,6 +3459,25 @@ class Line:
3458
3459
  if isinstance(self.element_dict[nn], xt.Replica):
3459
3460
  self.replace_replica(nn)
3460
3461
 
3462
+ def replace_all_repeated_elements(self, separator='.', mode='clone'):
3463
+
3464
+ self._env_if_needed()
3465
+ env = self.env
3466
+
3467
+ self.discard_tracker()
3468
+ unique_names = list(set(self.element_names))
3469
+ aux_dict = {nn: [] for nn in unique_names}
3470
+ for ii, nn in enumerate(self.element_names):
3471
+ aux_dict[nn].append(ii)
3472
+
3473
+ for nn in unique_names:
3474
+ if len(aux_dict[nn]) > 1:
3475
+ i_rep = 0
3476
+ for ii in aux_dict[nn]:
3477
+ while (new_name := nn + separator + str(i_rep)) in self.element_dict:
3478
+ i_rep += 1
3479
+ env.new(new_name, nn, mode=mode)
3480
+ self.element_names[ii] = new_name
3461
3481
 
3462
3482
  def select(self, start=None, end=None, name=None):
3463
3483
 
@@ -3473,7 +3493,7 @@ class Line:
3473
3493
 
3474
3494
  self._env_if_needed()
3475
3495
 
3476
- out = self.env.new_line(components=list(tt.name), name=name)
3496
+ out = self.env.new_line(components=list(tt.env_name), name=name)
3477
3497
 
3478
3498
  if hasattr(self, '_in_multiline') and self._in_multiline is not None:
3479
3499
  out.env._var_management = None
@@ -3536,6 +3556,35 @@ class Line:
3536
3556
  else:
3537
3557
  raise KeyError(f'Element or variable {key} not found')
3538
3558
 
3559
+ def info(self, key, limit=12):
3560
+ if key in self.element_dict:
3561
+ return self[key].get_info()
3562
+ elif key in self.vars:
3563
+ return self.vars.info(key, limit=limit)
3564
+ else:
3565
+ raise KeyError(f'Element or variable {key} not found')
3566
+
3567
+ # def get_value(self, key):
3568
+ # if key in self.element_dict:
3569
+ # return self.element_dict[key].get_value()
3570
+ # elif key in self.vars:
3571
+ # return self.vars.get_value(key)
3572
+ # else:
3573
+ # raise KeyError(f'Element or variable {key} not found')
3574
+
3575
+ @property
3576
+ def manager(self):
3577
+ return self._xdeps_manager
3578
+
3579
+ def eval(self, expr):
3580
+ return self.vars.eval(expr)
3581
+
3582
+ def new_expr(self, expr):
3583
+ return self.vars.new_expr(expr)
3584
+
3585
+ def get_expr(self, vars):
3586
+ return self.vars.get_expr(vars)
3587
+
3539
3588
  def _env_if_needed(self):
3540
3589
  if not hasattr(self, 'env') or self.env is None:
3541
3590
  self.env = xt.Environment(element_dict=self.element_dict,
@@ -4653,6 +4702,10 @@ class LineVars:
4653
4702
  out = list(self.line._xdeps_vref._owner.keys()).copy()
4654
4703
  return out
4655
4704
 
4705
+ def __iter__(self):
4706
+ raise NotImplementedError('Use keys() method') # Untested
4707
+ return self.line._xdeps_vref._owner.__iter__()
4708
+
4656
4709
  def update(self, other):
4657
4710
  if self.line._xdeps_vref is None:
4658
4711
  raise RuntimeError(
@@ -4671,10 +4724,23 @@ class LineVars:
4671
4724
  if self.line._xdeps_vref is None:
4672
4725
  raise RuntimeError(
4673
4726
  f'Cannot access variables as the line has no xdeps manager')
4674
- name = np.array([kk for kk in list(self.keys()) if kk != '__vary_default'])
4727
+ name = np.array([kk for kk in list(self.keys()) if kk != '__vary_default'], dtype=object)
4675
4728
  value = np.array([self.line._xdeps_vref[kk]._value for kk in name])
4729
+ expr = np.array([str(self.line._xdeps_vref[str(kk)]._expr) for kk in name])
4676
4730
 
4677
- return xd.Table({'name': name, 'value': value})
4731
+ return xd.Table({'name': name, 'value': value, 'expr': expr})
4732
+
4733
+ def new_expr(self, expr):
4734
+ return self.line._xdeps_eval.eval(expr)
4735
+
4736
+ def eval(self, expr):
4737
+ return self.new_expr(expr)._get_value()
4738
+
4739
+ def info(self, var, limit=10):
4740
+ return self[var]._info(limit=limit)
4741
+
4742
+ def get_expr(self, var):
4743
+ return self[var]._expr
4678
4744
 
4679
4745
  def __contains__(self, key):
4680
4746
  if self.line._xdeps_vref is None:
@@ -4799,6 +4865,9 @@ class LineVars:
4799
4865
  else:
4800
4866
  self[name] = value
4801
4867
 
4868
+ def get(self, name):
4869
+ return self[name]._value
4870
+
4802
4871
  class ActionVars(Action):
4803
4872
 
4804
4873
  def __init__(self, line):
@@ -168,13 +168,21 @@ class SurveyTable(Table):
168
168
  return out
169
169
 
170
170
  def plot(self, element_width=None, legend=True, **kwargs):
171
+ # Shallow copy of self
172
+ out_sv_table = SurveyTable.__new__(SurveyTable)
173
+ out_sv_table.__dict__.update(self.__dict__)
174
+ out_sv_table._data = self._data.copy()
175
+
176
+ # Removing the count for repeated elements
177
+ out_sv_table.name = np.array([nn.split('::')[0] for nn in out_sv_table.name])
178
+
171
179
  if element_width is None:
172
180
  x_range = max(self.X) - min(self.X)
173
181
  y_range = max(self.Y) - min(self.Y)
174
182
  z_range = max(self.Z) - min(self.Z)
175
183
  element_width = max([x_range, y_range, z_range]) * 0.03
176
184
  import xplt
177
- xplt.FloorPlot(self, self.line, element_width=element_width, **kwargs)
185
+ xplt.FloorPlot(out_sv_table, self.line, element_width=element_width, **kwargs)
178
186
  if legend:
179
187
  import matplotlib.pyplot as plt
180
188
  plt.legend()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: xtrack
3
- Version: 0.69.1
3
+ Version: 0.69.3
4
4
  Summary: Tracking library for particle accelerators
5
5
  Home-page: https://xsuite.readthedocs.io/
6
6
  Download-URL: https://pypi.python.org/pypi/xtrack
@@ -22,5 +22,9 @@ Requires-Dist: nafflib; extra == "tests"
22
22
  Requires-Dist: PyHEADTAIL; extra == "tests"
23
23
  Requires-Dist: pytest; extra == "tests"
24
24
  Requires-Dist: pytest-mock; extra == "tests"
25
+ Provides-Extra: notebooks
26
+ Requires-Dist: jupyter; extra == "notebooks"
27
+ Requires-Dist: ipympl; extra == "notebooks"
28
+ Requires-Dist: xplt; extra == "notebooks"
25
29
 
26
30
  Tracking library for particle accelerators
@@ -5,6 +5,11 @@ tqdm
5
5
  xobjects
6
6
  xdeps
7
7
 
8
+ [notebooks]
9
+ jupyter
10
+ ipympl
11
+ xplt
12
+
8
13
  [tests]
9
14
  cpymad
10
15
  nafflib
@@ -1 +0,0 @@
1
- __version__ = '0.69.1'
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes