xtrack 0.69.3__tar.gz → 0.69.4__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.3/xtrack.egg-info → xtrack-0.69.4}/PKG-INFO +1 -1
  2. xtrack-0.69.4/xtrack/_version.py +1 -0
  3. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/environment.py +174 -81
  4. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/line.py +87 -3
  5. {xtrack-0.69.3 → xtrack-0.69.4/xtrack.egg-info}/PKG-INFO +1 -1
  6. xtrack-0.69.3/xtrack/_version.py +0 -1
  7. {xtrack-0.69.3 → xtrack-0.69.4}/LICENSE +0 -0
  8. {xtrack-0.69.3 → xtrack-0.69.4}/MANIFEST.in +0 -0
  9. {xtrack-0.69.3 → xtrack-0.69.4}/README.md +0 -0
  10. {xtrack-0.69.3 → xtrack-0.69.4}/ducktrack/__init__.py +0 -0
  11. {xtrack-0.69.3 → xtrack-0.69.4}/ducktrack/base_classes.py +0 -0
  12. {xtrack-0.69.3 → xtrack-0.69.4}/ducktrack/be_beamfields/BB6D.py +0 -0
  13. {xtrack-0.69.3 → xtrack-0.69.4}/ducktrack/be_beamfields/BB6Ddata.py +0 -0
  14. {xtrack-0.69.3 → xtrack-0.69.4}/ducktrack/be_beamfields/__init__.py +0 -0
  15. {xtrack-0.69.3 → xtrack-0.69.4}/ducktrack/be_beamfields/beambeam.py +0 -0
  16. {xtrack-0.69.3 → xtrack-0.69.4}/ducktrack/be_beamfields/boost.py +0 -0
  17. {xtrack-0.69.3 → xtrack-0.69.4}/ducktrack/be_beamfields/gaussian_fields.py +0 -0
  18. {xtrack-0.69.3 → xtrack-0.69.4}/ducktrack/be_beamfields/propagate_sigma_matrix.py +0 -0
  19. {xtrack-0.69.3 → xtrack-0.69.4}/ducktrack/be_beamfields/qgauss.py +0 -0
  20. {xtrack-0.69.3 → xtrack-0.69.4}/ducktrack/be_beamfields/slicing.py +0 -0
  21. {xtrack-0.69.3 → xtrack-0.69.4}/ducktrack/be_beamfields/spacecharge.py +0 -0
  22. {xtrack-0.69.3 → xtrack-0.69.4}/ducktrack/elements.py +0 -0
  23. {xtrack-0.69.3 → xtrack-0.69.4}/ducktrack/line.py +0 -0
  24. {xtrack-0.69.3 → xtrack-0.69.4}/ducktrack/mathlibs.py +0 -0
  25. {xtrack-0.69.3 → xtrack-0.69.4}/ducktrack/particles.py +0 -0
  26. {xtrack-0.69.3 → xtrack-0.69.4}/ducktrack/temp_pyparticles.py +0 -0
  27. {xtrack-0.69.3 → xtrack-0.69.4}/pyproject.toml +0 -0
  28. {xtrack-0.69.3 → xtrack-0.69.4}/setup.cfg +0 -0
  29. {xtrack-0.69.3 → xtrack-0.69.4}/setup.py +0 -0
  30. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_acceleration.py +0 -0
  31. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_amplitude_detuning.py +0 -0
  32. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_aperture_turn_ele_and_monitor.py +0 -0
  33. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_apertures.py +0 -0
  34. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_attr_replicas_and_slices.py +0 -0
  35. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_cavity_absolute_time.py +0 -0
  36. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_chromatic_functions_vs_madx.py +0 -0
  37. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_coasting.py +0 -0
  38. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_collective_tracker.py +0 -0
  39. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_collimation.py +0 -0
  40. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_element_characterization_functions.py +0 -0
  41. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_element_internal_record.py +0 -0
  42. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_elements.py +0 -0
  43. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_elements_classflags.py +0 -0
  44. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_elements_thick.py +0 -0
  45. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_environment.py +0 -0
  46. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_fcc_ee_solenoid_correction.py +0 -0
  47. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_fcc_ee_solenoid_correction_new_optimize_api.py +0 -0
  48. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_footprint.py +0 -0
  49. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_freeze_longitudinal.py +0 -0
  50. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_full_rings.py +0 -0
  51. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_hvkick.py +0 -0
  52. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_ions.py +0 -0
  53. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_lhc_match_phase_15.py +0 -0
  54. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_line.py +0 -0
  55. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_lumi.py +0 -0
  56. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_mad_writer.py +0 -0
  57. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_madloader.py +0 -0
  58. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_match_and_track_from_element.py +0 -0
  59. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_match_coupling_knob.py +0 -0
  60. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_match_nested.py +0 -0
  61. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_match_optics_and_ip_knob.py +0 -0
  62. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_match_optics_and_ip_knob_new_optimize_api.py +0 -0
  63. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_match_orbit_bump.py +0 -0
  64. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_match_tune_chroma_cminus.py +0 -0
  65. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_monitor.py +0 -0
  66. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_multiline.py +0 -0
  67. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_multisetter.py +0 -0
  68. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_multispecies.py +0 -0
  69. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_particles_api.py +0 -0
  70. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_periodic_symmetric_twiss_and_match.py +0 -0
  71. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_pipeline.py +0 -0
  72. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_prebuild_kernels.py +0 -0
  73. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_ps_against_ptc.py +0 -0
  74. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_ps_multiturn_twiss.py +0 -0
  75. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_psb_chicane.py +0 -0
  76. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_pyht_interface.py +0 -0
  77. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_radial_steering.py +0 -0
  78. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_radiation.py +0 -0
  79. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_radiation_equilibrium_emittances.py +0 -0
  80. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_random_gen.py +0 -0
  81. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_random_gen_exp.py +0 -0
  82. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_random_gen_gauss.py +0 -0
  83. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_random_gen_ruth.py +0 -0
  84. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_rf_track.py +0 -0
  85. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_rotation_signs.py +0 -0
  86. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_second_order_taylor_map.py +0 -0
  87. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_seeds.py +0 -0
  88. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_slice_and_insert_with_replicas.py +0 -0
  89. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_slice_elements.py +0 -0
  90. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_slicing.py +0 -0
  91. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_solenoid_bz_map_vs_boris.py +0 -0
  92. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_spacecharge_in_ring.py +0 -0
  93. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_sps_thick.py +0 -0
  94. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_survey.py +0 -0
  95. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_tapering.py +0 -0
  96. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_thick_lhc.py +0 -0
  97. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_tilt_shifts.py +0 -0
  98. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_tracker.py +0 -0
  99. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_trajectory_correcton.py +0 -0
  100. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_twiss.py +0 -0
  101. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_twiss_vs_madx_psb.py +0 -0
  102. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_vs_madx.py +0 -0
  103. {xtrack-0.69.3 → xtrack-0.69.4}/tests/test_xmask_orbit_correction.py +0 -0
  104. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/__init__.py +0 -0
  105. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/_temp/__init__.py +0 -0
  106. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/_temp/boris_and_solenoid_map/__init__.py +0 -0
  107. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/_temp/boris_and_solenoid_map/boris.h +0 -0
  108. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/_temp/boris_and_solenoid_map/solenoid_field.py +0 -0
  109. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/_temp/lhc_match/__init__.py +0 -0
  110. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/_temp/lhc_match/gen_madx_optics_file.py +0 -0
  111. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/_temp/lhc_match/lhc_match.py +0 -0
  112. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/_temp/lhc_match/var_limits.py +0 -0
  113. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/base_element.py +0 -0
  114. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/__init__.py +0 -0
  115. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/apertures.py +0 -0
  116. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/apertures_src/limitellipse.h +0 -0
  117. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/apertures_src/limitpolygon.h +0 -0
  118. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/apertures_src/limitracetrack.h +0 -0
  119. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/apertures_src/limitrect.h +0 -0
  120. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/apertures_src/limitrectellipse.h +0 -0
  121. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/apertures_src/longitudinallimitrect.h +0 -0
  122. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/beam_interaction.py +0 -0
  123. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements.py +0 -0
  124. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/bend.h +0 -0
  125. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/cavity.h +0 -0
  126. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/dipole_fringe.h +0 -0
  127. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/dipoleedge.h +0 -0
  128. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/drift.h +0 -0
  129. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/drift_elem.h +0 -0
  130. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/drift_slice.h +0 -0
  131. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/drift_slice_bend.h +0 -0
  132. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/drift_slice_octupole.h +0 -0
  133. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/drift_slice_quadrupole.h +0 -0
  134. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/drift_slice_sextupole.h +0 -0
  135. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/elens.h +0 -0
  136. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/exciter.h +0 -0
  137. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/firstordertaylormap.h +0 -0
  138. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/linesegmentmap.h +0 -0
  139. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/multipole.h +0 -0
  140. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/nonlinearlens.h +0 -0
  141. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/octupole.h +0 -0
  142. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/quadrupole.h +0 -0
  143. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/referenceenergyincrease.h +0 -0
  144. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/rfmultipole.h +0 -0
  145. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/second_order_taylor_map.h +0 -0
  146. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/sextupole.h +0 -0
  147. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/simplethinbend.h +0 -0
  148. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/simplethinquadrupole.h +0 -0
  149. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/solenoid.h +0 -0
  150. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/srotation.h +0 -0
  151. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/thick_slice_bend.h +0 -0
  152. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/thick_slice_drift.h +0 -0
  153. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/thick_slice_octupole.h +0 -0
  154. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/thick_slice_quadrupole.h +0 -0
  155. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/thick_slice_sextupole.h +0 -0
  156. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/thick_slice_solenoid.h +0 -0
  157. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/thin_slice_bend.h +0 -0
  158. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/thin_slice_bend_entry.h +0 -0
  159. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/thin_slice_bend_exit.h +0 -0
  160. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/thin_slice_octupole.h +0 -0
  161. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/thin_slice_quadrupole.h +0 -0
  162. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/thin_slice_sextupole.h +0 -0
  163. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/track_bend.h +0 -0
  164. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/track_dipole_edge_linear.h +0 -0
  165. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/track_dipole_edge_nonlinear.h +0 -0
  166. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/track_dipole_fringe.h +0 -0
  167. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/track_mult_fringe.h +0 -0
  168. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/track_multipolar_components.h +0 -0
  169. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/track_multipole.h +0 -0
  170. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/track_quadrupole.h +0 -0
  171. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/track_solenoid.h +0 -0
  172. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/track_srotation.h +0 -0
  173. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/track_thick_bend.h +0 -0
  174. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/track_thick_cfd.h +0 -0
  175. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/track_wedge.h +0 -0
  176. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/track_xrotation.h +0 -0
  177. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/track_yrotation.h +0 -0
  178. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/wedge.h +0 -0
  179. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/wire.h +0 -0
  180. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/xrotation.h +0 -0
  181. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/xyshift.h +0 -0
  182. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/yrotation.h +0 -0
  183. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/elements_src/zetashift.h +0 -0
  184. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/exciter.py +0 -0
  185. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/rft_element.py +0 -0
  186. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/slice_elements.py +0 -0
  187. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/beam_elements/slice_elements_thick.py +0 -0
  188. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/footprint.py +0 -0
  189. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/general.py +0 -0
  190. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/headers/atomicadd.h +0 -0
  191. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/headers/checks.h +0 -0
  192. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/headers/constants.h +0 -0
  193. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/headers/particle_states.h +0 -0
  194. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/headers/synrad_spectrum.h +0 -0
  195. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/internal_record.py +0 -0
  196. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/json_utils.py +0 -0
  197. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/linear_normal_form.py +0 -0
  198. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/loss_location_refinement/__init__.py +0 -0
  199. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/loss_location_refinement/loss_location_refinement.py +0 -0
  200. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/lumi.py +0 -0
  201. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/mad_loader.py +0 -0
  202. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/mad_writer.py +0 -0
  203. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/match.py +0 -0
  204. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/monitors/__init__.py +0 -0
  205. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/monitors/beam_position_monitor.h +0 -0
  206. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/monitors/beam_position_monitor.py +0 -0
  207. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/monitors/beam_profile_monitor.h +0 -0
  208. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/monitors/beam_profile_monitor.py +0 -0
  209. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/monitors/beam_size_monitor.h +0 -0
  210. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/monitors/beam_size_monitor.py +0 -0
  211. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/monitors/last_turns_monitor.h +0 -0
  212. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/monitors/last_turns_monitor.py +0 -0
  213. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/monitors/particles_monitor.h +0 -0
  214. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/monitors/particles_monitor.py +0 -0
  215. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/multiline/__init__.py +0 -0
  216. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/multiline/multiline.py +0 -0
  217. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/multiline/shared_knobs.py +0 -0
  218. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/multisetter/__init__.py +0 -0
  219. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/multisetter/multisetter.py +0 -0
  220. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/particles/__init__.py +0 -0
  221. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/particles/constants.py +0 -0
  222. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/particles/particles.py +0 -0
  223. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/particles/rng_src/base_rng.h +0 -0
  224. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/particles/rng_src/particles_rng.h +0 -0
  225. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/pipeline/__init__.py +0 -0
  226. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/pipeline/core.py +0 -0
  227. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/pipeline/manager.py +0 -0
  228. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/pipeline/multitracker.py +0 -0
  229. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/progress_indicator.py +0 -0
  230. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/random/__init__.py +0 -0
  231. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/random/random_generators.py +0 -0
  232. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/random/random_src/exponential.h +0 -0
  233. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/random/random_src/exponential_integral_Ei.h +0 -0
  234. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/random/random_src/normal.h +0 -0
  235. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/random/random_src/rutherford.h +0 -0
  236. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/random/random_src/uniform.h +0 -0
  237. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/random/random_src/uniform_accurate.h +0 -0
  238. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/slicing.py +0 -0
  239. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/survey.py +0 -0
  240. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/synctime.py +0 -0
  241. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/tapering.py +0 -0
  242. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/targets.py +0 -0
  243. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/tracker.py +0 -0
  244. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/tracker_data.py +0 -0
  245. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/tracker_src/tracker.h +0 -0
  246. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/trajectory_correction.py +0 -0
  247. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/twiss.py +0 -0
  248. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack/twissplot.py +0 -0
  249. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack.egg-info/SOURCES.txt +0 -0
  250. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack.egg-info/dependency_links.txt +0 -0
  251. {xtrack-0.69.3 → xtrack-0.69.4}/xtrack.egg-info/requires.txt +0 -0
  252. {xtrack-0.69.3 → xtrack-0.69.4}/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.3
3
+ Version: 0.69.4
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
@@ -0,0 +1 @@
1
+ __version__ = '0.69.4'
@@ -40,64 +40,39 @@ 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
-
49
- def new_line(self, components=None, name=None):
50
- out = xt.Line()
51
- out.particle_ref = self.particle_ref
52
- out.env = self
53
- out._element_dict = self.element_dict # Avoid copying
54
- if components is None:
55
- components = []
56
-
57
- for ii, nn in enumerate(components):
58
- if (isinstance(nn, Place) and isinstance(nn.name, str)
59
- and nn.name in self.lines):
60
- nn.name = self.lines[nn.name]
61
- if isinstance(nn, str) and nn in self.lines:
62
- components[ii] = self.lines[nn]
63
-
64
- flattened_components = _flatten_components(components)
65
- out.element_names = handle_s_places(flattened_components, self)
66
- out._var_management = self._var_management
67
- out._name = name
68
- out.builder = Builder(env=self, components=components)
69
-
70
- # Temporary solution to keep consistency in multiline
71
- if hasattr(self, '_in_multiline') and self._in_multiline is not None:
72
- out._var_management = None
73
- out._in_multiline = self._in_multiline
74
- out._name_in_multiline = self._name_in_multiline
75
-
76
- self._lines_weakrefs.add(out) # Weak references
77
- if name is not None:
78
- self.lines[name] = out
79
-
80
- return out
81
-
82
- def new_builder(self, components=None, name=None):
83
- return Builder(env=self, components=components, name=name)
84
-
85
- def _ensure_tracker_consistency(self, buffer):
86
- for ln in self._lines_weakrefs:
87
- if ln._has_valid_tracker() and ln._buffer is not buffer:
88
- ln.discard_tracker()
89
-
90
- def _get_a_drift_name(self):
91
- self._drift_counter += 1
92
- nn = f'drift_{self._drift_counter}'
93
- if nn not in self.element_dict:
94
- return nn
95
- else:
96
- return self._get_a_drift_name()
97
-
98
- def new(self, name, cls, mode=None, at=None, from_=None, extra=None,
43
+ def new(self, name, parent, mode=None, at=None, from_=None, extra=None,
99
44
  mirror=False, **kwargs):
100
45
 
46
+ '''
47
+ Create a new element or line.
48
+
49
+ Parameters
50
+ ----------
51
+ name : str
52
+ Name of the new element or line
53
+ parent : str or class
54
+ Parent class or name of the parent element
55
+ mode : str, optional
56
+ - clone: clone the parent element or line.
57
+ The parent element or line is copied, together with the associated
58
+ expressions.
59
+ - replica: replicate the parent elements or lines are made.
60
+ at : float or str, optional
61
+ Position of the created object.
62
+ from_: str, optional
63
+ Name of the element from which the position is calculated (its center
64
+ is used as reference).
65
+ mirror : bool, optional
66
+ Can only be used when cloning lines. If True, the order of the elements
67
+ is reversed.
68
+
69
+ Returns
70
+ -------
71
+ str or Place
72
+ Name of the created element or line or a Place object if at or from_ is
73
+ provided.
74
+ '''
75
+
101
76
  if from_ is not None or at is not None:
102
77
  all_kwargs = locals()
103
78
  all_kwargs.pop('self')
@@ -111,60 +86,60 @@ class Environment:
111
86
  _ALLOWED_ELEMENT_TYPES_DICT = xt.line._ALLOWED_ELEMENT_TYPES_DICT
112
87
  _STR_ALLOWED_ELEMENT_TYPES_IN_NEW = xt.line._STR_ALLOWED_ELEMENT_TYPES_IN_NEW
113
88
 
114
- if cls in self.lines:
115
- cls = self.lines[cls]
89
+ if parent in self.lines:
90
+ parent = self.lines[parent]
116
91
 
117
- if isinstance(cls, xt.Line):
92
+ if isinstance(parent, xt.Line):
118
93
  assert len(kwargs) == 0, 'No kwargs allowed when creating a line'
119
94
  if mode == 'replica':
120
95
  assert name is not None, 'Name must be provided when replicating a line'
121
- return cls.replicate(name=name, mirror=mirror)
96
+ return parent.replicate(name=name, mirror=mirror)
122
97
  else:
123
98
  assert mode in [None, 'clone'], f'Unknown mode {mode}'
124
99
  assert name is not None, 'Name must be provided when cloning a line'
125
- return cls.clone(name=name, mirror=mirror)
100
+ return parent.clone(name=name, mirror=mirror)
126
101
 
127
- assert mirror is False, 'mirror=True only allowed when cloning or lines.'
102
+ assert mirror is False, 'mirror=True only allowed when cloning lines.'
128
103
 
129
- if cls is xt.Line or (cls=='Line' and (
104
+ if parent is xt.Line or (parent=='Line' and (
130
105
  'Line' not in self.lines and 'Line' not in self.element_dict)):
131
106
  assert mode is None, 'Mode not allowed when cls is Line'
132
107
  return self.new_line(name=name, **kwargs)
133
108
 
134
109
  if mode == 'replica':
135
- assert cls in self.element_dict, f'Element {cls} not found, cannot replicate'
136
- kwargs['parent_name'] = xo.String(cls)
137
- cls = xt.Replica
110
+ assert parent in self.element_dict, f'Element {parent} not found, cannot replicate'
111
+ kwargs['parent_name'] = xo.String(parent)
112
+ parent = xt.Replica
138
113
  elif mode == 'clone':
139
- assert cls in self.element_dict, f'Element {cls} not found, cannot clone'
114
+ assert parent in self.element_dict, f'Element {parent} not found, cannot clone'
140
115
  else:
141
116
  assert mode is None, f'Unknown mode {mode}'
142
117
 
143
118
  _eval = self._xdeps_eval.eval
144
119
 
145
- assert isinstance(cls, str) or cls in _ALLOWED_ELEMENT_TYPES_IN_NEW, (
120
+ assert isinstance(parent, str) or parent in _ALLOWED_ELEMENT_TYPES_IN_NEW, (
146
121
  'Only '
147
122
  + _STR_ALLOWED_ELEMENT_TYPES_IN_NEW
148
123
  + ' elements are allowed in `new` for now.')
149
124
 
150
125
  needs_instantiation = True
151
- if isinstance(cls, str):
152
- if cls in self.element_dict:
126
+ if isinstance(parent, str):
127
+ if parent in self.element_dict:
153
128
  # Clone an existing element
154
- self.element_dict[name] = xt.Replica(parent_name=cls)
155
- self.replace_replica(name)
156
- cls = type(self.element_dict[name])
129
+ self.element_dict[name] = xt.Replica(parent_name=parent)
130
+ xt.Line.replace_replica(self, name)
131
+ parent = type(self.element_dict[name])
157
132
  needs_instantiation = False
158
- elif cls in _ALLOWED_ELEMENT_TYPES_DICT:
159
- cls = _ALLOWED_ELEMENT_TYPES_DICT[cls]
133
+ elif parent in _ALLOWED_ELEMENT_TYPES_DICT:
134
+ parent = _ALLOWED_ELEMENT_TYPES_DICT[parent]
160
135
  needs_instantiation = True
161
136
  else:
162
- raise ValueError(f'Element type {cls} not found')
137
+ raise ValueError(f'Element type {parent} not found')
163
138
 
164
- ref_kwargs, value_kwargs = _parse_kwargs(cls, kwargs, _eval)
139
+ ref_kwargs, value_kwargs = _parse_kwargs(parent, kwargs, _eval)
165
140
 
166
141
  if needs_instantiation: # Parent is a class and not another element
167
- self.element_dict[name] = cls(**value_kwargs)
142
+ self.element_dict[name] = parent(**value_kwargs)
168
143
 
169
144
  _set_kwargs(name=name, ref_kwargs=ref_kwargs, value_kwargs=value_kwargs,
170
145
  element_dict=self.element_dict, element_refs=self.element_refs)
@@ -175,9 +150,128 @@ class Environment:
175
150
 
176
151
  return name
177
152
 
153
+ def new_line(self, components=None, name=None):
154
+
155
+ '''
156
+ Create a new line.
157
+
158
+ Parameters
159
+ ----------
160
+ components : list, optional
161
+ List of components to be added to the line. It can include strings,
162
+ place objects, and lines.
163
+ name : str, optional
164
+ Name of the new line.
165
+
166
+ Returns
167
+ -------
168
+ line
169
+ The new line.
170
+
171
+ Examples
172
+ --------
173
+ .. code-block:: python
174
+
175
+ env = xt.Environment()
176
+ env['a'] = 3 # Define a variable
177
+ env.new('mq1', xt.Quadrupole, length=0.3, k1='a') # Create an element
178
+ env.new('mq2', xt.Quadrupole, length=0.3, k1='-a') # Create another element
179
+
180
+ ln = env.new_line(name='myline', components=[
181
+ 'mq', # Add the element 'mq' at the start of the line
182
+ env.new('mymark', xt.Marker, at=10.0), # Create a marker at s=10
183
+ env.new('mq1_clone', 'mq1', k1='2a'), # Clone 'mq1' with a different k1
184
+ env.place('mq2', at=20.0, from='mymark'), # Place 'mq2' at s=20
185
+ ])
186
+ '''
187
+
188
+ out = xt.Line()
189
+ out.particle_ref = self.particle_ref
190
+ out.env = self
191
+ out._element_dict = self.element_dict # Avoid copying
192
+ if components is None:
193
+ components = []
194
+
195
+ for ii, nn in enumerate(components):
196
+ if (isinstance(nn, Place) and isinstance(nn.name, str)
197
+ and nn.name in self.lines):
198
+ nn.name = self.lines[nn.name]
199
+ if isinstance(nn, str) and nn in self.lines:
200
+ components[ii] = self.lines[nn]
201
+
202
+ flattened_components = _flatten_components(components)
203
+ out.element_names = handle_s_places(flattened_components, self)
204
+ out._var_management = self._var_management
205
+ out._name = name
206
+ out.builder = Builder(env=self, components=components)
207
+
208
+ # Temporary solution to keep consistency in multiline
209
+ if hasattr(self, '_in_multiline') and self._in_multiline is not None:
210
+ out._var_management = None
211
+ out._in_multiline = self._in_multiline
212
+ out._name_in_multiline = self._name_in_multiline
213
+
214
+ self._lines_weakrefs.add(out) # Weak references
215
+ if name is not None:
216
+ self.lines[name] = out
217
+
218
+ return out
219
+
178
220
  def place(self, name, at=None, from_=None, anchor=None, from_anchor=None):
221
+ '''
222
+ Create a place object.
223
+
224
+ Parameters
225
+ ----------
226
+ name : str or Line
227
+ Name of the element or line to be placed.
228
+ at : float or str, optional
229
+ Position of the created object.
230
+ from_: str, optional
231
+ Name of the element from which the position is calculated (its center
232
+ is used as reference).
233
+
234
+ Returns
235
+ -------
236
+ Place
237
+ The new place object.
238
+ '''
239
+
179
240
  return Place(name, at=at, from_=from_, anchor=anchor, from_anchor=from_anchor)
180
241
 
242
+ def new_builder(self, components=None, name=None):
243
+ '''
244
+ Create a new builder.
245
+
246
+ Parameters
247
+ ----------
248
+ components : list, optional
249
+ List of components to be added to the builder. It can include strings,
250
+ place objects, and lines.
251
+ name : str, optional
252
+ Name of the line that will be built by the builder.
253
+
254
+ Returns
255
+ -------
256
+ Builder
257
+ The new builder.
258
+ '''
259
+
260
+ return Builder(env=self, components=components, name=name)
261
+
262
+ def _ensure_tracker_consistency(self, buffer):
263
+ for ln in self._lines_weakrefs:
264
+ if ln._has_valid_tracker() and ln._buffer is not buffer:
265
+ ln.discard_tracker()
266
+
267
+ def _get_a_drift_name(self):
268
+ self._drift_counter += 1
269
+ nn = f'drift_{self._drift_counter}'
270
+ if nn not in self.element_dict:
271
+ return nn
272
+ else:
273
+ return self._get_a_drift_name()
274
+
181
275
  def __setitem__(self, key, value):
182
276
 
183
277
  if isinstance(value, xt.Line):
@@ -200,7 +294,6 @@ Environment.element_refs = xt.Line.element_refs
200
294
  Environment.vars = xt.Line.vars
201
295
  Environment.varval = xt.Line.varval
202
296
  Environment.vv = xt.Line.vv
203
- Environment.replace_replica = xt.Line.replace_replica
204
297
  Environment.__getitem__ = xt.Line.__getitem__
205
298
  Environment.set = xt.Line.set
206
299
  Environment.get = xt.Line.get
@@ -208,7 +301,7 @@ Environment.eval = xt.Line.eval
208
301
  Environment.info = xt.Line.info
209
302
  Environment.get_expr = xt.Line.get_expr
210
303
  Environment.new_expr = xt.Line.new_expr
211
-
304
+ Environment.ref_manager = xt.Line.ref_manager
212
305
 
213
306
  class Place:
214
307
 
@@ -306,7 +399,7 @@ def _resolve_s_positions(seq_all_places, env):
306
399
  if seq_all_places[0].at is None and not seq_all_places[0]._before:
307
400
  # In case we want to allow for the length to be an expression
308
401
  s_center_dct[seq_all_places[0]] = aux_tt['length', seq_all_places[0].name] / 2
309
- # s_center_dct[seq_all_places[0]] = _length_expr_or_val(seq_all_places[0], aux_line) / 2
402
+ s_center_dct_names[seq_all_places[0].name] = s_center_dct[seq_all_places[0]]
310
403
  n_resolved += 1
311
404
 
312
405
  while n_resolved != n_resolved_prev:
@@ -3412,6 +3412,9 @@ class Line:
3412
3412
  components=list(self.element_names) + list(other.element_names))
3413
3413
  return out
3414
3414
 
3415
+ def __sub__(self, other):
3416
+ return self + (-other)
3417
+
3415
3418
  def replicate(self, name, mirror=False):
3416
3419
 
3417
3420
  self._env_if_needed()
@@ -3506,6 +3509,27 @@ class Line:
3506
3509
  return out
3507
3510
 
3508
3511
  def set(self, name, *args, **kwargs):
3512
+ '''
3513
+ Set the values or expressions of variables or element properties.
3514
+
3515
+ Parameters
3516
+ ----------
3517
+ name : str
3518
+ Name of the variable or element.
3519
+ value: float or str
3520
+ Value or expression of the variable to set. Can be provided only
3521
+ if the name is associated to a variable.
3522
+ **kwargs, float or str
3523
+ Attributes to set. Can be provided only if the name is associated
3524
+ to an element.
3525
+
3526
+ Examples
3527
+ --------
3528
+ >>> line.set('a', 0.1)
3529
+ >>> line.set('k1', '3*a')
3530
+ >>> line.set('quad', k1=0.1, k2='3*a')
3531
+
3532
+ '''
3509
3533
  _eval = self._xdeps_eval.eval
3510
3534
 
3511
3535
  if hasattr(self, 'lines') and name in self.lines:
@@ -3549,6 +3573,21 @@ class Line:
3549
3573
  self.vars[name] = value
3550
3574
 
3551
3575
  def get(self, key):
3576
+ '''
3577
+ Get an element or the value of a variable.
3578
+
3579
+ Parameters
3580
+ ----------
3581
+ key : str
3582
+ Name of the element or variable.
3583
+
3584
+ Returns
3585
+ -------
3586
+ element : Element or float
3587
+ Element or value of the variable.
3588
+
3589
+ '''
3590
+
3552
3591
  if key in self.element_dict:
3553
3592
  return self.element_dict[key]
3554
3593
  elif key in self.vars:
@@ -3557,6 +3596,10 @@ class Line:
3557
3596
  raise KeyError(f'Element or variable {key} not found')
3558
3597
 
3559
3598
  def info(self, key, limit=12):
3599
+ """
3600
+ Get information about an element or a variable.
3601
+ """
3602
+
3560
3603
  if key in self.element_dict:
3561
3604
  return self[key].get_info()
3562
3605
  elif key in self.vars:
@@ -3573,17 +3616,58 @@ class Line:
3573
3616
  # raise KeyError(f'Element or variable {key} not found')
3574
3617
 
3575
3618
  @property
3576
- def manager(self):
3619
+ def ref_manager(self):
3577
3620
  return self._xdeps_manager
3578
3621
 
3579
3622
  def eval(self, expr):
3623
+ '''
3624
+ Get the value of an expression
3625
+
3626
+ Parameters
3627
+ ----------
3628
+ expr : str
3629
+ Expression to evaluate.
3630
+
3631
+ Returns
3632
+ -------
3633
+ value : float
3634
+ Value of the expression.
3635
+ '''
3636
+
3580
3637
  return self.vars.eval(expr)
3581
3638
 
3582
3639
  def new_expr(self, expr):
3640
+ '''
3641
+ Create a new expression
3642
+
3643
+ Parameters
3644
+ ----------
3645
+ expr : str
3646
+ Expression to create.
3647
+
3648
+ Returns
3649
+ -------
3650
+ expr : Expression
3651
+ New expression.
3652
+ '''
3583
3653
  return self.vars.new_expr(expr)
3584
3654
 
3585
- def get_expr(self, vars):
3586
- return self.vars.get_expr(vars)
3655
+ def get_expr(self, var):
3656
+ '''
3657
+ Get expression associated to a variable
3658
+
3659
+ Parameters
3660
+ ----------
3661
+ var: str
3662
+ Name of the variable
3663
+
3664
+ Returns
3665
+ -------
3666
+ expr : Expression
3667
+ Expression associated to the variable
3668
+ '''
3669
+
3670
+ return self.vars.get_expr(var)
3587
3671
 
3588
3672
  def _env_if_needed(self):
3589
3673
  if not hasattr(self, 'env') or self.env is None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: xtrack
3
- Version: 0.69.3
3
+ Version: 0.69.4
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
@@ -1 +0,0 @@
1
- __version__ = '0.69.3'
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