xtrack 0.78.0__tar.gz → 0.79.0__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 (307) hide show
  1. {xtrack-0.78.0/xtrack.egg-info → xtrack-0.79.0}/PKG-INFO +1 -1
  2. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_elements_thick.py +112 -7
  3. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_environment.py +82 -56
  4. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_line.py +2 -1
  5. xtrack-0.79.0/tests/test_magnet.py +1827 -0
  6. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_match_nested.py +4 -4
  7. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_match_tune_chroma_cminus.py +16 -16
  8. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_psb_chicane.py +16 -16
  9. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_radiation.py +29 -19
  10. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_radiation_equilibrium_emittances.py +21 -21
  11. xtrack-0.79.0/tests/test_radiation_equilibrium_emittances_thick.py +230 -0
  12. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_slice_elements.py +60 -18
  13. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_slicing.py +71 -54
  14. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_sps_thick.py +32 -30
  15. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_tapering.py +15 -15
  16. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_tilt_shifts.py +2 -2
  17. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_twiss.py +5 -5
  18. xtrack-0.79.0/xtrack/_version.py +1 -0
  19. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/__init__.py +6 -2
  20. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements.py +403 -172
  21. xtrack-0.79.0/xtrack/beam_elements/elements_src/bend.h +55 -0
  22. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/dipoleedge.h +1 -1
  23. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/firstordertaylormap.h +0 -17
  24. xtrack-0.79.0/xtrack/beam_elements/elements_src/magnet.h +86 -0
  25. xtrack-0.79.0/xtrack/beam_elements/elements_src/magnet_drift.h +27 -0
  26. xtrack-0.79.0/xtrack/beam_elements/elements_src/magnet_edge.h +52 -0
  27. xtrack-0.79.0/xtrack/beam_elements/elements_src/magnet_kick.h +39 -0
  28. xtrack-0.79.0/xtrack/beam_elements/elements_src/multipole.h +62 -0
  29. xtrack-0.79.0/xtrack/beam_elements/elements_src/multipoleedge.h +33 -0
  30. xtrack-0.79.0/xtrack/beam_elements/elements_src/octupole.h +67 -0
  31. xtrack-0.79.0/xtrack/beam_elements/elements_src/quadrupole.h +67 -0
  32. xtrack-0.79.0/xtrack/beam_elements/elements_src/rbend.h +63 -0
  33. xtrack-0.79.0/xtrack/beam_elements/elements_src/sextupole.h +67 -0
  34. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/solenoid.h +0 -3
  35. xtrack-0.79.0/xtrack/beam_elements/elements_src/thick_slice_bend.h +66 -0
  36. xtrack-0.79.0/xtrack/beam_elements/elements_src/thick_slice_octupole.h +81 -0
  37. xtrack-0.79.0/xtrack/beam_elements/elements_src/thick_slice_quadrupole.h +81 -0
  38. xtrack-0.79.0/xtrack/beam_elements/elements_src/thick_slice_rbend.h +66 -0
  39. xtrack-0.79.0/xtrack/beam_elements/elements_src/thick_slice_sextupole.h +81 -0
  40. xtrack-0.79.0/xtrack/beam_elements/elements_src/thin_slice_bend.h +68 -0
  41. xtrack-0.79.0/xtrack/beam_elements/elements_src/thin_slice_octupole.h +70 -0
  42. xtrack-0.79.0/xtrack/beam_elements/elements_src/thin_slice_octupole_entry.h +43 -0
  43. xtrack-0.79.0/xtrack/beam_elements/elements_src/thin_slice_octupole_exit.h +44 -0
  44. xtrack-0.79.0/xtrack/beam_elements/elements_src/thin_slice_quadrupole.h +69 -0
  45. xtrack-0.79.0/xtrack/beam_elements/elements_src/thin_slice_quadrupole_entry.h +44 -0
  46. xtrack-0.79.0/xtrack/beam_elements/elements_src/thin_slice_quadrupole_exit.h +44 -0
  47. xtrack-0.79.0/xtrack/beam_elements/elements_src/thin_slice_rbend.h +68 -0
  48. xtrack-0.79.0/xtrack/beam_elements/elements_src/thin_slice_sextupole.h +70 -0
  49. xtrack-0.79.0/xtrack/beam_elements/elements_src/thin_slice_sextupole_entry.h +44 -0
  50. xtrack-0.79.0/xtrack/beam_elements/elements_src/thin_slice_sextupole_exit.h +44 -0
  51. xtrack-0.79.0/xtrack/beam_elements/elements_src/track_magnet.h +507 -0
  52. xtrack-0.79.0/xtrack/beam_elements/elements_src/track_magnet_drift.h +375 -0
  53. xtrack-0.79.0/xtrack/beam_elements/elements_src/track_magnet_edge.h +123 -0
  54. xtrack-0.79.0/xtrack/beam_elements/elements_src/track_magnet_kick.h +197 -0
  55. xtrack-0.79.0/xtrack/beam_elements/elements_src/track_magnet_radiation.h +100 -0
  56. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/track_mult_fringe.h +34 -20
  57. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/track_multipole.h +16 -5
  58. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/track_quadrupole.h +18 -8
  59. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/track_solenoid.h +11 -2
  60. xtrack-0.79.0/xtrack/beam_elements/magnets.py +687 -0
  61. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/slice_elements.py +319 -32
  62. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/slice_elements_thick.py +23 -37
  63. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/environment.py +2 -1
  64. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/headers/synrad_spectrum.h +26 -16
  65. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/line.py +34 -15
  66. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/twiss.py +23 -28
  67. {xtrack-0.78.0 → xtrack-0.79.0/xtrack.egg-info}/PKG-INFO +1 -1
  68. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack.egg-info/SOURCES.txt +19 -0
  69. xtrack-0.78.0/xtrack/_version.py +0 -1
  70. xtrack-0.78.0/xtrack/beam_elements/elements_src/bend.h +0 -144
  71. xtrack-0.78.0/xtrack/beam_elements/elements_src/multipole.h +0 -83
  72. xtrack-0.78.0/xtrack/beam_elements/elements_src/octupole.h +0 -82
  73. xtrack-0.78.0/xtrack/beam_elements/elements_src/quadrupole.h +0 -44
  74. xtrack-0.78.0/xtrack/beam_elements/elements_src/rbend.h +0 -145
  75. xtrack-0.78.0/xtrack/beam_elements/elements_src/sextupole.h +0 -79
  76. xtrack-0.78.0/xtrack/beam_elements/elements_src/thick_slice_bend.h +0 -47
  77. xtrack-0.78.0/xtrack/beam_elements/elements_src/thick_slice_octupole.h +0 -54
  78. xtrack-0.78.0/xtrack/beam_elements/elements_src/thick_slice_quadrupole.h +0 -46
  79. xtrack-0.78.0/xtrack/beam_elements/elements_src/thick_slice_rbend.h +0 -47
  80. xtrack-0.78.0/xtrack/beam_elements/elements_src/thick_slice_sextupole.h +0 -54
  81. xtrack-0.78.0/xtrack/beam_elements/elements_src/thin_slice_bend.h +0 -91
  82. xtrack-0.78.0/xtrack/beam_elements/elements_src/thin_slice_octupole.h +0 -88
  83. xtrack-0.78.0/xtrack/beam_elements/elements_src/thin_slice_quadrupole.h +0 -87
  84. xtrack-0.78.0/xtrack/beam_elements/elements_src/thin_slice_rbend.h +0 -90
  85. xtrack-0.78.0/xtrack/beam_elements/elements_src/thin_slice_sextupole.h +0 -88
  86. {xtrack-0.78.0 → xtrack-0.79.0}/LICENSE +0 -0
  87. {xtrack-0.78.0 → xtrack-0.79.0}/MANIFEST.in +0 -0
  88. {xtrack-0.78.0 → xtrack-0.79.0}/README.md +0 -0
  89. {xtrack-0.78.0 → xtrack-0.79.0}/ducktrack/__init__.py +0 -0
  90. {xtrack-0.78.0 → xtrack-0.79.0}/ducktrack/base_classes.py +0 -0
  91. {xtrack-0.78.0 → xtrack-0.79.0}/ducktrack/be_beamfields/BB6D.py +0 -0
  92. {xtrack-0.78.0 → xtrack-0.79.0}/ducktrack/be_beamfields/BB6Ddata.py +0 -0
  93. {xtrack-0.78.0 → xtrack-0.79.0}/ducktrack/be_beamfields/__init__.py +0 -0
  94. {xtrack-0.78.0 → xtrack-0.79.0}/ducktrack/be_beamfields/beambeam.py +0 -0
  95. {xtrack-0.78.0 → xtrack-0.79.0}/ducktrack/be_beamfields/boost.py +0 -0
  96. {xtrack-0.78.0 → xtrack-0.79.0}/ducktrack/be_beamfields/gaussian_fields.py +0 -0
  97. {xtrack-0.78.0 → xtrack-0.79.0}/ducktrack/be_beamfields/propagate_sigma_matrix.py +0 -0
  98. {xtrack-0.78.0 → xtrack-0.79.0}/ducktrack/be_beamfields/qgauss.py +0 -0
  99. {xtrack-0.78.0 → xtrack-0.79.0}/ducktrack/be_beamfields/slicing.py +0 -0
  100. {xtrack-0.78.0 → xtrack-0.79.0}/ducktrack/be_beamfields/spacecharge.py +0 -0
  101. {xtrack-0.78.0 → xtrack-0.79.0}/ducktrack/elements.py +0 -0
  102. {xtrack-0.78.0 → xtrack-0.79.0}/ducktrack/line.py +0 -0
  103. {xtrack-0.78.0 → xtrack-0.79.0}/ducktrack/mathlibs.py +0 -0
  104. {xtrack-0.78.0 → xtrack-0.79.0}/ducktrack/particles.py +0 -0
  105. {xtrack-0.78.0 → xtrack-0.79.0}/ducktrack/temp_pyparticles.py +0 -0
  106. {xtrack-0.78.0 → xtrack-0.79.0}/pyproject.toml +0 -0
  107. {xtrack-0.78.0 → xtrack-0.79.0}/setup.cfg +0 -0
  108. {xtrack-0.78.0 → xtrack-0.79.0}/setup.py +0 -0
  109. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_acceleration.py +0 -0
  110. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_amplitude_detuning.py +0 -0
  111. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_aperture_turn_ele_and_monitor.py +0 -0
  112. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_apertures.py +0 -0
  113. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_attr_replicas_and_slices.py +0 -0
  114. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_bucket_with_ref_energy_change.py +0 -0
  115. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_cavity_absolute_time.py +0 -0
  116. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_chromatic_functions_vs_madx.py +0 -0
  117. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_coasting.py +0 -0
  118. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_collective_tracker.py +0 -0
  119. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_collimation.py +0 -0
  120. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_element_characterization_functions.py +0 -0
  121. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_element_internal_record.py +0 -0
  122. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_elements.py +0 -0
  123. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_elements_classflags.py +0 -0
  124. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_fcc_ee_solenoid_correction.py +0 -0
  125. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_fcc_ee_solenoid_correction_new_optimize_api.py +0 -0
  126. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_footprint.py +0 -0
  127. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_freeze_longitudinal.py +0 -0
  128. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_full_rings.py +0 -0
  129. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_h6_sps_beamline.py +0 -0
  130. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_hvkick.py +0 -0
  131. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_ions.py +0 -0
  132. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_legacy_multiline_to_env.py +0 -0
  133. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_lhc_env.py +0 -0
  134. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_lhc_match_phase_15.py +0 -0
  135. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_lumi.py +0 -0
  136. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_mad_writer.py +0 -0
  137. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_madloader.py +0 -0
  138. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_madnginterface.py +0 -0
  139. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_match_and_track_from_element.py +0 -0
  140. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_match_coupling_knob.py +0 -0
  141. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_match_optics_and_ip_knob.py +0 -0
  142. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_match_optics_and_ip_knob_new_optimize_api.py +0 -0
  143. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_match_orbit_bump.py +0 -0
  144. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_monitor.py +0 -0
  145. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_multi_bunch_gauss.py +0 -0
  146. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_multiline.py +0 -0
  147. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_multisetter.py +0 -0
  148. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_multispecies.py +0 -0
  149. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_native_madloader.py +0 -0
  150. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_particles.py +0 -0
  151. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_periodic_symmetric_twiss_and_match.py +0 -0
  152. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_pipeline.py +0 -0
  153. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_prebuild_kernels.py +0 -0
  154. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_ps_against_ptc.py +0 -0
  155. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_ps_multiturn_twiss.py +0 -0
  156. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_pyht_interface.py +0 -0
  157. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_radial_steering.py +0 -0
  158. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_random_gen.py +0 -0
  159. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_random_gen_exp.py +0 -0
  160. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_random_gen_gauss.py +0 -0
  161. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_random_gen_ruth.py +0 -0
  162. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_rbend_rbarc.py +0 -0
  163. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_rf_track.py +0 -0
  164. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_rotation_signs.py +0 -0
  165. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_second_order_taylor_map.py +0 -0
  166. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_seeds.py +0 -0
  167. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_slice_and_insert_with_replicas.py +0 -0
  168. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_solenoid_bz_map_vs_boris.py +0 -0
  169. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_spacecharge_in_ring.py +0 -0
  170. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_survey.py +0 -0
  171. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_thick_lhc.py +0 -0
  172. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_tracker.py +0 -0
  173. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_trajectory_correcton.py +0 -0
  174. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_twiss_vs_madx_psb.py +0 -0
  175. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_vs_madx.py +0 -0
  176. {xtrack-0.78.0 → xtrack-0.79.0}/tests/test_xmask_orbit_correction.py +0 -0
  177. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/__init__.py +0 -0
  178. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/_temp/__init__.py +0 -0
  179. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/_temp/boris_and_solenoid_map/__init__.py +0 -0
  180. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/_temp/boris_and_solenoid_map/boris.h +0 -0
  181. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/_temp/boris_and_solenoid_map/solenoid_field.py +0 -0
  182. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/_temp/lhc_match/__init__.py +0 -0
  183. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/_temp/lhc_match/gen_madx_optics_file.py +0 -0
  184. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/_temp/lhc_match/lhc_match.py +0 -0
  185. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/_temp/lhc_match/var_limits.py +0 -0
  186. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/base_element.py +0 -0
  187. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/apertures.py +0 -0
  188. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/apertures_src/limitellipse.h +0 -0
  189. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/apertures_src/limitpolygon.h +0 -0
  190. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/apertures_src/limitracetrack.h +0 -0
  191. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/apertures_src/limitrect.h +0 -0
  192. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/apertures_src/limitrectellipse.h +0 -0
  193. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/apertures_src/longitudinallimitrect.h +0 -0
  194. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/beam_interaction.py +0 -0
  195. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/cavity.h +0 -0
  196. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/dipole_fringe.h +0 -0
  197. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/drift.h +0 -0
  198. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/drift_elem.h +0 -0
  199. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/drift_slice.h +0 -0
  200. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/drift_slice_bend.h +0 -0
  201. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/drift_slice_octupole.h +0 -0
  202. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/drift_slice_quadrupole.h +0 -0
  203. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/drift_slice_rbend.h +0 -0
  204. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/drift_slice_sextupole.h +0 -0
  205. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/elens.h +0 -0
  206. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/exciter.h +0 -0
  207. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/linesegmentmap.h +0 -0
  208. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/nonlinearlens.h +0 -0
  209. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/referenceenergyincrease.h +0 -0
  210. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/rfmultipole.h +0 -0
  211. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/second_order_taylor_map.h +0 -0
  212. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/simplethinbend.h +0 -0
  213. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/simplethinquadrupole.h +0 -0
  214. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/srotation.h +0 -0
  215. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/thick_slice_drift.h +0 -0
  216. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/thick_slice_solenoid.h +0 -0
  217. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/thin_slice_bend_entry.h +0 -0
  218. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/thin_slice_bend_exit.h +0 -0
  219. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/thin_slice_rbend_entry.h +0 -0
  220. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/thin_slice_rbend_exit.h +0 -0
  221. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/track_bend.h +0 -0
  222. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/track_dipole_edge_linear.h +0 -0
  223. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/track_dipole_edge_nonlinear.h +0 -0
  224. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/track_dipole_fringe.h +0 -0
  225. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/track_multipolar_components.h +0 -0
  226. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/track_srotation.h +0 -0
  227. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/track_thick_bend.h +0 -0
  228. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/track_thick_cfd.h +0 -0
  229. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/track_wedge.h +0 -0
  230. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/track_xrotation.h +0 -0
  231. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/track_yrotation.h +0 -0
  232. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/wedge.h +0 -0
  233. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/wire.h +0 -0
  234. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/xrotation.h +0 -0
  235. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/xyshift.h +0 -0
  236. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/yrotation.h +0 -0
  237. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/elements_src/zetashift.h +0 -0
  238. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/exciter.py +0 -0
  239. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/beam_elements/rft_element.py +0 -0
  240. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/footprint.py +0 -0
  241. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/general.py +0 -0
  242. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/headers/atomicadd.h +0 -0
  243. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/headers/checks.h +0 -0
  244. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/headers/constants.h +0 -0
  245. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/headers/particle_states.h +0 -0
  246. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/internal_record.py +0 -0
  247. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/json.py +0 -0
  248. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/linear_normal_form.py +0 -0
  249. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/loss_location_refinement/__init__.py +0 -0
  250. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/loss_location_refinement/loss_location_refinement.py +0 -0
  251. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/lumi.py +0 -0
  252. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/mad_loader.py +0 -0
  253. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/mad_parser/__init__.py +0 -0
  254. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/mad_parser/loader.py +0 -0
  255. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/mad_parser/madx.lark +0 -0
  256. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/mad_parser/parse.py +0 -0
  257. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/mad_writer.py +0 -0
  258. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/madng_interface.py +0 -0
  259. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/match.py +0 -0
  260. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/monitors/__init__.py +0 -0
  261. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/monitors/beam_position_monitor.h +0 -0
  262. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/monitors/beam_position_monitor.py +0 -0
  263. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/monitors/beam_profile_monitor.h +0 -0
  264. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/monitors/beam_profile_monitor.py +0 -0
  265. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/monitors/beam_size_monitor.h +0 -0
  266. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/monitors/beam_size_monitor.py +0 -0
  267. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/monitors/last_turns_monitor.h +0 -0
  268. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/monitors/last_turns_monitor.py +0 -0
  269. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/monitors/particles_monitor.h +0 -0
  270. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/monitors/particles_monitor.py +0 -0
  271. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/multiline.py +0 -0
  272. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/multiline_legacy/__init__.py +0 -0
  273. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/multiline_legacy/multiline_legacy.py +0 -0
  274. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/multiline_legacy/shared_knobs.py +0 -0
  275. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/multisetter/__init__.py +0 -0
  276. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/multisetter/multisetter.py +0 -0
  277. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/particles/__init__.py +0 -0
  278. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/particles/constants.py +0 -0
  279. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/particles/particles.py +0 -0
  280. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/particles/rng_src/base_rng.h +0 -0
  281. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/particles/rng_src/particles_rng.h +0 -0
  282. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/pipeline/__init__.py +0 -0
  283. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/pipeline/core.py +0 -0
  284. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/pipeline/manager.py +0 -0
  285. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/pipeline/multitracker.py +0 -0
  286. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/progress_indicator.py +0 -0
  287. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/random/__init__.py +0 -0
  288. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/random/random_generators.py +0 -0
  289. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/random/random_src/exponential.h +0 -0
  290. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/random/random_src/exponential_integral_Ei.h +0 -0
  291. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/random/random_src/normal.h +0 -0
  292. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/random/random_src/rutherford.h +0 -0
  293. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/random/random_src/uniform.h +0 -0
  294. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/random/random_src/uniform_accurate.h +0 -0
  295. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/slicing.py +0 -0
  296. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/survey.py +0 -0
  297. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/synctime.py +0 -0
  298. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/tapering.py +0 -0
  299. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/targets.py +0 -0
  300. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/tracker.py +0 -0
  301. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/tracker_data.py +0 -0
  302. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/tracker_src/tracker.h +0 -0
  303. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/trajectory_correction.py +0 -0
  304. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack/twissplot.py +0 -0
  305. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack.egg-info/dependency_links.txt +0 -0
  306. {xtrack-0.78.0 → xtrack-0.79.0}/xtrack.egg-info/requires.txt +0 -0
  307. {xtrack-0.78.0 → xtrack-0.79.0}/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.78.0
3
+ Version: 0.79.0
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
@@ -61,7 +61,7 @@ def test_combined_function_dipole_against_ptc(test_context, k0, k1, k2, length,
61
61
  line_thick = ml.make_line()
62
62
  line_thick.config.XTRACK_USE_EXACT_DRIFTS = True # to be consistent with mad
63
63
  line_thick.build_tracker(_context=test_context)
64
- line_thick.configure_bend_model(core=model, edge='full')
64
+ line_thick.configure_bend_model(core=model, edge='dipole-only')
65
65
 
66
66
  if use_multipole:
67
67
  line_thick['b'].knl[1] = k1 * length
@@ -144,7 +144,7 @@ def test_combined_function_dipole_expanded(test_context):
144
144
  line_thick.build_tracker(_context=test_context)
145
145
 
146
146
  line_thick.configure_bend_model(core='expanded', num_multipole_kicks=100)
147
- assert line_thick['b'].model == 'expanded'
147
+ assert line_thick['b'].model == 'mat-kick-mat'
148
148
  p_test = p0.copy(_context=test_context)
149
149
  line_thick.track(p_test)
150
150
  p_test.move(_context=xo.context_default)
@@ -230,7 +230,8 @@ def test_thick_bend_survey():
230
230
  def test_thick_multipolar_component(test_context, element_type, h):
231
231
  bend_length = 1.0
232
232
  k0 = h
233
- knl = np.array([0.0, 0.01, -0.02, 0.03])
233
+ knl = np.array([0.0, 0.0, -0.02, 0.03]) # I need to keep knl[1] = 0 because
234
+ # the bend with hxl = 0 would not apply the corretion h*k1
234
235
  ksl = np.array([0.0, -0.03, 0.02, -0.01])
235
236
  num_kicks = 2
236
237
 
@@ -243,12 +244,13 @@ def test_thick_multipolar_component(test_context, element_type, h):
243
244
  ksl=ksl,
244
245
  num_multipole_kicks=num_kicks,
245
246
  )
247
+ bend_with_mult.integrator = 'uniform'
246
248
 
247
249
  # Separate bend and a corresponding multipole
248
250
  bend_no_mult = element_type(
249
251
  k0=k0,
250
252
  h=h,
251
- length=bend_length / (num_kicks + 1),
253
+ length=bend_length / num_kicks / 2,
252
254
  num_multipole_kicks=0,
253
255
  )
254
256
  multipole = xt.Multipole(
@@ -264,7 +266,7 @@ def test_thick_multipolar_component(test_context, element_type, h):
264
266
  line_no_slices.configure_bend_model(core='expanded')
265
267
  line_with_slices = xt.Line(
266
268
  elements={'bend_no_mult': bend_no_mult, 'multipole': multipole},
267
- element_names=(['bend_no_mult', 'multipole'] * num_kicks) + ['bend_no_mult'],
269
+ element_names=(['bend_no_mult', 'multipole', 'bend_no_mult'] * num_kicks)
268
270
  )
269
271
 
270
272
  # Track some particles
@@ -622,7 +624,7 @@ def test_import_thick_bend_from_madx(use_true_thick_bends, with_knobs, bend_type
622
624
  elem = line['elem']
623
625
 
624
626
  # Check that the line has correct values to start with
625
- assert elem.model == {False: 'expanded', True: 'full'}[use_true_thick_bends]
627
+ assert elem.model == {False: 'mat-kick-mat', True: 'full'}[use_true_thick_bends]
626
628
 
627
629
  # Element:
628
630
  xo.assert_allclose(elem.length, 2.0, atol=1e-16)
@@ -1862,6 +1864,7 @@ def test_skew_quadrupole(test_context):
1862
1864
  length = 0.5
1863
1865
 
1864
1866
  quad = xt.Quadrupole(k1=k1, k1s=k1s, length=length, _context=test_context)
1867
+ quad.num_multipole_kicks = 1000
1865
1868
 
1866
1869
  n_slices = 1000
1867
1870
  ele_thin = []
@@ -2044,4 +2047,106 @@ def test_knl_knl_kick_present_with_default_num_kicks():
2044
2047
  env['rb1'].knl[2] = 0.1
2045
2048
  p = p0.copy()
2046
2049
  l5.track(p)
2047
- assert np.abs(p.px[0]) > 1e-7
2050
+ assert np.abs(p.px[0]) > 1e-7
2051
+
2052
+ def test_sextupole_num_kicks():
2053
+
2054
+ line = xt.Line(elements={
2055
+ 's1': xt.Sextupole(k2=0.1, length=9.0, integrator='teapot')
2056
+ })
2057
+ line.particle_ref = xt.Particles(p0c=7000e9)
2058
+
2059
+ line_1slice = line.copy(shallow=True)
2060
+ line_1slice.slice_thick_elements(
2061
+ slicing_strategies=[
2062
+ xt.Strategy(slicing=xt.Teapot(1), element_type=xt.Sextupole),
2063
+ ])
2064
+
2065
+ line_3slices = line.copy(shallow=True)
2066
+ line_3slices.slice_thick_elements(
2067
+ slicing_strategies=[
2068
+ xt.Strategy(slicing=xt.Teapot(3), element_type=xt.Sextupole),
2069
+ ])
2070
+
2071
+ tw_1slice = line_1slice.twiss(betx=1, bety=1, x=1e-2)
2072
+ tw_3slices = line_3slices.twiss(betx=1, bety=1, x=1e-2)
2073
+
2074
+ tw_1kick = line.twiss(betx=1, bety=1, x=1e-2)
2075
+
2076
+ line.configure_sextupole_model(num_multipole_kicks=3)
2077
+
2078
+ assert line['s1'].num_multipole_kicks == 3
2079
+ tw_3kicks = line.twiss(betx=1, bety=1, x=1e-2)
2080
+
2081
+ assert np.abs(tw_1slice.x[-1] - tw_3slices.x[-1]) > 1e-6
2082
+
2083
+ xo.assert_allclose(tw_1slice.s[-1], tw_1kick.s[-1], atol=1e-15, rtol=0)
2084
+ xo.assert_allclose(tw_1slice.x[-1], tw_1kick.x[-1], atol=1e-15, rtol=0)
2085
+ xo.assert_allclose(tw_1slice.px[-1], tw_1kick.px[-1], atol=1e-15, rtol=0)
2086
+ xo.assert_allclose(tw_1slice.y[-1], tw_1kick.y[-1], atol=1e-15, rtol=0)
2087
+ xo.assert_allclose(tw_1slice.py[-1], tw_1kick.py[-1], atol=1e-15, rtol=0)
2088
+ xo.assert_allclose(tw_1slice.zeta[-1], tw_1kick.zeta[-1], atol=1e-15, rtol=0)
2089
+ xo.assert_allclose(tw_1slice.ptau[-1], tw_1kick.ptau[-1], atol=1e-15, rtol=0)
2090
+ xo.assert_allclose(tw_1slice.betx[-1], tw_1kick.betx[-1], atol=1e-10, rtol=0)
2091
+ xo.assert_allclose(tw_1slice.bety[-1], tw_1kick.bety[-1], atol=1e-10, rtol=0)
2092
+
2093
+ xo.assert_allclose(tw_3slices.s[-1], tw_3kicks.s[-1], atol=1e-15, rtol=0)
2094
+ xo.assert_allclose(tw_3slices.x[-1], tw_3kicks.x[-1], atol=1e-15, rtol=0)
2095
+ xo.assert_allclose(tw_3slices.px[-1], tw_3kicks.px[-1], atol=1e-15, rtol=0)
2096
+ xo.assert_allclose(tw_3slices.y[-1], tw_3kicks.y[-1], atol=1e-15, rtol=0)
2097
+ xo.assert_allclose(tw_3slices.py[-1], tw_3kicks.py[-1], atol=1e-15, rtol=0)
2098
+ xo.assert_allclose(tw_3slices.zeta[-1], tw_3kicks.zeta[-1], atol=1e-15, rtol=0)
2099
+ xo.assert_allclose(tw_3slices.ptau[-1], tw_3kicks.ptau[-1], atol=1e-15, rtol=0)
2100
+ xo.assert_allclose(tw_3slices.betx[-1], tw_3kicks.betx[-1], atol=1e-10, rtol=0)
2101
+ xo.assert_allclose(tw_3slices.bety[-1], tw_3kicks.bety[-1], atol=1e-10, rtol=0)
2102
+
2103
+ def test_octupole_num_kicks():
2104
+
2105
+ line = xt.Line(elements={
2106
+ 's1': xt.Octupole(k3=100., length=9.0, integrator='teapot')
2107
+ })
2108
+ line.particle_ref = xt.Particles(p0c=7000e9)
2109
+
2110
+ line_1slice = line.copy(shallow=True)
2111
+ line_1slice.slice_thick_elements(
2112
+ slicing_strategies=[
2113
+ xt.Strategy(slicing=xt.Teapot(1), element_type=xt.Octupole),
2114
+ ])
2115
+
2116
+ line_3slices = line.copy(shallow=True)
2117
+ line_3slices.slice_thick_elements(
2118
+ slicing_strategies=[
2119
+ xt.Strategy(slicing=xt.Teapot(3), element_type=xt.Octupole),
2120
+ ])
2121
+
2122
+ tw_1slice = line_1slice.twiss(betx=1, bety=1, x=1e-2)
2123
+ tw_3slices = line_3slices.twiss(betx=1, bety=1, x=1e-2)
2124
+
2125
+ tw_1kick = line.twiss(betx=1, bety=1, x=1e-2)
2126
+
2127
+ line.configure_octupole_model(num_multipole_kicks=3)
2128
+ tw_3kicks = line.twiss(betx=1, bety=1, x=1e-2)
2129
+
2130
+ assert line['s1'].num_multipole_kicks == 3
2131
+
2132
+ assert np.abs(tw_1slice.x[-1] - tw_3slices.x[-1]) > 1e-6
2133
+
2134
+ xo.assert_allclose(tw_1slice.s[-1], tw_1kick.s[-1], atol=1e-15, rtol=0)
2135
+ xo.assert_allclose(tw_1slice.x[-1], tw_1kick.x[-1], atol=1e-15, rtol=0)
2136
+ xo.assert_allclose(tw_1slice.px[-1], tw_1kick.px[-1], atol=1e-15, rtol=0)
2137
+ xo.assert_allclose(tw_1slice.y[-1], tw_1kick.y[-1], atol=1e-15, rtol=0)
2138
+ xo.assert_allclose(tw_1slice.py[-1], tw_1kick.py[-1], atol=1e-15, rtol=0)
2139
+ xo.assert_allclose(tw_1slice.zeta[-1], tw_1kick.zeta[-1], atol=1e-15, rtol=0)
2140
+ xo.assert_allclose(tw_1slice.ptau[-1], tw_1kick.ptau[-1], atol=1e-15, rtol=0)
2141
+ xo.assert_allclose(tw_1slice.betx[-1], tw_1kick.betx[-1], atol=1e-10, rtol=0)
2142
+ xo.assert_allclose(tw_1slice.bety[-1], tw_1kick.bety[-1], atol=1e-10, rtol=0)
2143
+
2144
+ xo.assert_allclose(tw_3slices.s[-1], tw_3kicks.s[-1], atol=1e-15, rtol=0)
2145
+ xo.assert_allclose(tw_3slices.x[-1], tw_3kicks.x[-1], atol=1e-15, rtol=0)
2146
+ xo.assert_allclose(tw_3slices.px[-1], tw_3kicks.px[-1], atol=1e-15, rtol=0)
2147
+ xo.assert_allclose(tw_3slices.y[-1], tw_3kicks.y[-1], atol=1e-15, rtol=0)
2148
+ xo.assert_allclose(tw_3slices.py[-1], tw_3kicks.py[-1], atol=1e-15, rtol=0)
2149
+ xo.assert_allclose(tw_3slices.zeta[-1], tw_3kicks.zeta[-1], atol=1e-15, rtol=0)
2150
+ xo.assert_allclose(tw_3slices.ptau[-1], tw_3kicks.ptau[-1], atol=1e-15, rtol=0)
2151
+ xo.assert_allclose(tw_3slices.betx[-1], tw_3kicks.betx[-1], atol=1e-10, rtol=0)
2152
+ xo.assert_allclose(tw_3slices.bety[-1], tw_3kicks.bety[-1], atol=1e-10, rtol=0)
@@ -1412,7 +1412,7 @@ def test_assemble_ring_repeated_elements():
1412
1412
  xo.assert_allclose(twarc.s[0], 0, atol=1e-12, rtol=0)
1413
1413
  xo.assert_allclose(twarc.s[-1], 228, atol=1e-10, rtol=0)
1414
1414
  twarc_start_end = arc.twiss4d(start=xt.START, end=xt.END, init=twarc)
1415
- xo.assert_allclose(twarc_start_end.betx, twarc.betx, atol=1e-12, rtol=0)
1415
+ xo.assert_allclose(twarc_start_end.betx, twarc.betx, atol=1e-11, rtol=0)
1416
1416
 
1417
1417
  tw_one_cell_ref = twarc.rows['mid::2':'mid::3']
1418
1418
  tw_one_cell = arc.twiss4d(start='mid::2', end='mid::3', init='periodic')
@@ -2185,11 +2185,11 @@ def test_insert_anchors_special_cases():
2185
2185
 
2186
2186
  assert np.all(tt.name == np.array(
2187
2187
  ['drift_1', 'm5.0', 'm5.1', 'q5', 'm5.2', 'm5.3', 'drift_2',
2188
- 'q0_entry', 'q0..0', 'q4', 'drift_3..1', 'mr.0', 'mr.1', 'q6',
2189
- 'mr.2', 'mr.3', 'drift_4', 'end', '_end_point']))
2188
+ 'q0_entry', 'q0..entry_map', 'q0..0', 'q4', 'drift_3..1', 'mr.0',
2189
+ 'mr.1', 'q6', 'mr.2', 'mr.3', 'drift_4', 'end', '_end_point']))
2190
2190
  xo.assert_allclose(tt.s_center, np.array(
2191
- np.array([ 4.5, 9. , 9. , 10. , 11. , 11. , 15. , 19. , 19.5, 21. , 25.5,
2192
- 29. , 29. , 30. , 31. , 31. , 40.5, 50. , 50.])),
2191
+ np.array([ 4.5, 9. , 9. , 10. , 11. , 11. , 15. , 19. , 19. , 19.5, 21. ,
2192
+ 25.5, 29. , 29. , 30. , 31. , 31. , 40.5, 50. , 50. ])),
2193
2193
  rtol=0., atol=1e-14)
2194
2194
 
2195
2195
  def test_insert_providing_object():
@@ -2306,10 +2306,10 @@ def test_individual_insertions_anchors():
2306
2306
 
2307
2307
  assert np.all(tt.name == np.array(
2308
2308
  ['drift_1', 'm5.0', 'm5.1', 'q5', 'm5.2', 'm5.3', 'drift_2',
2309
- 'q0_entry', 'q0..0', 'q4', 'drift_3..1', 'mr.0', 'mr.1', 'q6',
2310
- 'mr.2', 'mr.3', 'drift_4', 'end', '_end_point']))
2309
+ 'q0_entry', 'q0..entry_map', 'q0..0', 'q4', 'drift_3..1', 'mr.0',
2310
+ 'mr.1', 'q6', 'mr.2', 'mr.3', 'drift_4', 'end', '_end_point']))
2311
2311
  xo.assert_allclose(tt.s_center, np.array(
2312
- np.array([ 4.5, 9. , 9. , 10. , 11. , 11. , 15. , 19. , 19.5, 21. , 25.5,
2312
+ np.array([ 4.5, 9. , 9. , 10. , 11. , 11. , 15. , 19., 19. , 19.5, 21. , 25.5,
2313
2313
  29. , 29. , 30. , 31. , 31. , 40.5, 50. , 50.])),
2314
2314
  rtol=0., atol=1e-14)
2315
2315
 
@@ -3072,64 +3072,90 @@ def test_enviroment_from_two_lines():
3072
3072
  # _end_point None
3073
3073
 
3074
3074
  assert np.all(tt1.name == np.array([
3075
- 'drift_1', 'qq1_thick_entry', 'qq1_thick..0', 'qq1_thick..1',
3076
- 'qq1_thick_exit', 'drift_2', 'qq1_thin_entry', 'drift_qq1_thin..0',
3077
- 'qq1_thin..0', 'drift_qq1_thin..1', 'qq1_thin..1',
3078
- 'drift_qq1_thin..2', 'qq1_thin_exit', 'drift_3',
3079
- 'qq_shared_thick_entry', 'qq_shared_thick..0/line1',
3080
- 'qq_shared_thick..1/line1', 'qq_shared_thick_exit', 'drift_4',
3081
- 'qq_shared_thin_entry', 'drift_qq_shared_thin..0/line1',
3082
- 'qq_shared_thin..0/line1', 'drift_qq_shared_thin..1/line1',
3083
- 'qq_shared_thin..1/line1', 'drift_qq_shared_thin..2/line1',
3084
- 'qq_shared_thin_exit', '_end_point']))
3075
+ 'drift_1', 'qq1_thick_entry', 'qq1_thick..entry_map',
3076
+ 'qq1_thick..0', 'qq1_thick..1', 'qq1_thick..exit_map',
3077
+ 'qq1_thick_exit', 'drift_2', 'qq1_thin_entry',
3078
+ 'qq1_thin..entry_map', 'drift_qq1_thin..0', 'qq1_thin..0',
3079
+ 'drift_qq1_thin..1', 'qq1_thin..1', 'drift_qq1_thin..2',
3080
+ 'qq1_thin..exit_map', 'qq1_thin_exit', 'drift_3',
3081
+ 'qq_shared_thick_entry', 'qq_shared_thick..entry_map/line1',
3082
+ 'qq_shared_thick..0/line1', 'qq_shared_thick..1/line1',
3083
+ 'qq_shared_thick..exit_map/line1', 'qq_shared_thick_exit',
3084
+ 'drift_4', 'qq_shared_thin_entry',
3085
+ 'qq_shared_thin..entry_map/line1', 'drift_qq_shared_thin..0/line1',
3086
+ 'qq_shared_thin..0/line1', 'drift_qq_shared_thin..1/line1',
3087
+ 'qq_shared_thin..1/line1', 'drift_qq_shared_thin..2/line1',
3088
+ 'qq_shared_thin..exit_map/line1', 'qq_shared_thin_exit',
3089
+ '_end_point']))
3085
3090
 
3086
3091
  assert np.all(tt1.element_type == np.array([
3087
- 'Drift', 'Marker', 'ThickSliceQuadrupole', 'ThickSliceQuadrupole',
3088
- 'Marker', 'Drift', 'Marker', 'DriftSliceQuadrupole',
3089
- 'ThinSliceQuadrupole', 'DriftSliceQuadrupole',
3090
- 'ThinSliceQuadrupole', 'DriftSliceQuadrupole', 'Marker', 'Drift',
3091
- 'Marker', 'ThickSliceQuadrupole', 'ThickSliceQuadrupole', 'Marker',
3092
- 'Drift', 'Marker', 'DriftSliceQuadrupole', 'ThinSliceQuadrupole',
3093
- 'DriftSliceQuadrupole', 'ThinSliceQuadrupole',
3094
- 'DriftSliceQuadrupole', 'Marker', '']))
3092
+ 'Drift', 'Marker', 'ThinSliceQuadrupoleEntry',
3093
+ 'ThickSliceQuadrupole', 'ThickSliceQuadrupole',
3094
+ 'ThinSliceQuadrupoleExit', 'Marker', 'Drift', 'Marker',
3095
+ 'ThinSliceQuadrupoleEntry', 'DriftSliceQuadrupole',
3096
+ 'ThinSliceQuadrupole', 'DriftSliceQuadrupole',
3097
+ 'ThinSliceQuadrupole', 'DriftSliceQuadrupole',
3098
+ 'ThinSliceQuadrupoleExit', 'Marker', 'Drift', 'Marker',
3099
+ 'ThinSliceQuadrupoleEntry', 'ThickSliceQuadrupole',
3100
+ 'ThickSliceQuadrupole', 'ThinSliceQuadrupoleExit', 'Marker',
3101
+ 'Drift', 'Marker', 'ThinSliceQuadrupoleEntry',
3102
+ 'DriftSliceQuadrupole', 'ThinSliceQuadrupole',
3103
+ 'DriftSliceQuadrupole', 'ThinSliceQuadrupole',
3104
+ 'DriftSliceQuadrupole', 'ThinSliceQuadrupoleExit', 'Marker', '']))
3095
3105
 
3096
3106
  assert np.all(tt1.parent_name == np.array([
3097
- None, None, 'qq1_thick', 'qq1_thick', None, None, None, 'qq1_thin',
3098
- 'qq1_thin', 'qq1_thin', 'qq1_thin', 'qq1_thin', None, None, None,
3099
- 'qq_shared_thick/line1', 'qq_shared_thick/line1', None, None, None,
3100
- 'qq_shared_thin/line1', 'qq_shared_thin/line1',
3101
- 'qq_shared_thin/line1', 'qq_shared_thin/line1',
3102
- 'qq_shared_thin/line1', None, None]))
3107
+ None, None, 'qq1_thick', 'qq1_thick', 'qq1_thick', 'qq1_thick',
3108
+ None, None, None, 'qq1_thin', 'qq1_thin', 'qq1_thin', 'qq1_thin',
3109
+ 'qq1_thin', 'qq1_thin', 'qq1_thin', None, None, None,
3110
+ 'qq_shared_thick/line1', 'qq_shared_thick/line1',
3111
+ 'qq_shared_thick/line1', 'qq_shared_thick/line1', None, None, None,
3112
+ 'qq_shared_thin/line1', 'qq_shared_thin/line1',
3113
+ 'qq_shared_thin/line1', 'qq_shared_thin/line1',
3114
+ 'qq_shared_thin/line1', 'qq_shared_thin/line1',
3115
+ 'qq_shared_thin/line1', None, None]))
3103
3116
 
3104
3117
  assert np.all(tt2.name == np.array([
3105
- 'drift_5', 'qq2_thick_entry', 'qq2_thick..0', 'qq2_thick..1',
3106
- 'qq2_thick_exit', 'drift_6', 'qq2_thin_entry', 'drift_qq2_thin..0',
3107
- 'qq2_thin..0', 'drift_qq2_thin..1', 'qq2_thin..1',
3108
- 'drift_qq2_thin..2', 'qq2_thin_exit', 'drift_7',
3109
- 'qq_shared_thick_entry', 'qq_shared_thick..0/line2',
3110
- 'qq_shared_thick..1/line2', 'qq_shared_thick_exit', 'drift_8',
3111
- 'qq_shared_thin_entry', 'drift_qq_shared_thin..0/line2',
3112
- 'qq_shared_thin..0/line2', 'drift_qq_shared_thin..1/line2',
3113
- 'qq_shared_thin..1/line2', 'drift_qq_shared_thin..2/line2',
3114
- 'qq_shared_thin_exit', '_end_point']))
3118
+ 'drift_5', 'qq2_thick_entry', 'qq2_thick..entry_map',
3119
+ 'qq2_thick..0', 'qq2_thick..1', 'qq2_thick..exit_map',
3120
+ 'qq2_thick_exit', 'drift_6', 'qq2_thin_entry',
3121
+ 'qq2_thin..entry_map', 'drift_qq2_thin..0', 'qq2_thin..0',
3122
+ 'drift_qq2_thin..1', 'qq2_thin..1', 'drift_qq2_thin..2',
3123
+ 'qq2_thin..exit_map', 'qq2_thin_exit', 'drift_7',
3124
+ 'qq_shared_thick_entry', 'qq_shared_thick..entry_map/line2',
3125
+ 'qq_shared_thick..0/line2', 'qq_shared_thick..1/line2',
3126
+ 'qq_shared_thick..exit_map/line2', 'qq_shared_thick_exit',
3127
+ 'drift_8', 'qq_shared_thin_entry',
3128
+ 'qq_shared_thin..entry_map/line2', 'drift_qq_shared_thin..0/line2',
3129
+ 'qq_shared_thin..0/line2', 'drift_qq_shared_thin..1/line2',
3130
+ 'qq_shared_thin..1/line2', 'drift_qq_shared_thin..2/line2',
3131
+ 'qq_shared_thin..exit_map/line2', 'qq_shared_thin_exit',
3132
+ '_end_point']))
3115
3133
 
3116
3134
  assert np.all(tt2.element_type == np.array([
3117
- 'Drift', 'Marker', 'ThickSliceQuadrupole', 'ThickSliceQuadrupole',
3118
- 'Marker', 'Drift', 'Marker', 'DriftSliceQuadrupole',
3119
- 'ThinSliceQuadrupole', 'DriftSliceQuadrupole',
3120
- 'ThinSliceQuadrupole', 'DriftSliceQuadrupole', 'Marker', 'Drift',
3121
- 'Marker', 'ThickSliceQuadrupole', 'ThickSliceQuadrupole', 'Marker',
3122
- 'Drift', 'Marker', 'DriftSliceQuadrupole', 'ThinSliceQuadrupole',
3123
- 'DriftSliceQuadrupole', 'ThinSliceQuadrupole',
3124
- 'DriftSliceQuadrupole', 'Marker', '']))
3135
+ 'Drift', 'Marker', 'ThinSliceQuadrupoleEntry',
3136
+ 'ThickSliceQuadrupole', 'ThickSliceQuadrupole',
3137
+ 'ThinSliceQuadrupoleExit', 'Marker', 'Drift', 'Marker',
3138
+ 'ThinSliceQuadrupoleEntry', 'DriftSliceQuadrupole',
3139
+ 'ThinSliceQuadrupole', 'DriftSliceQuadrupole',
3140
+ 'ThinSliceQuadrupole', 'DriftSliceQuadrupole',
3141
+ 'ThinSliceQuadrupoleExit', 'Marker', 'Drift', 'Marker',
3142
+ 'ThinSliceQuadrupoleEntry', 'ThickSliceQuadrupole',
3143
+ 'ThickSliceQuadrupole', 'ThinSliceQuadrupoleExit', 'Marker',
3144
+ 'Drift', 'Marker', 'ThinSliceQuadrupoleEntry',
3145
+ 'DriftSliceQuadrupole', 'ThinSliceQuadrupole',
3146
+ 'DriftSliceQuadrupole', 'ThinSliceQuadrupole',
3147
+ 'DriftSliceQuadrupole', 'ThinSliceQuadrupoleExit', 'Marker', '']))
3125
3148
 
3126
3149
  assert np.all(tt2.parent_name == np.array([
3127
- None, None, 'qq2_thick', 'qq2_thick', None, None, None, 'qq2_thin',
3128
- 'qq2_thin', 'qq2_thin', 'qq2_thin', 'qq2_thin', None, None, None,
3129
- 'qq_shared_thick/line2', 'qq_shared_thick/line2', None, None, None,
3130
- 'qq_shared_thin/line2', 'qq_shared_thin/line2',
3131
- 'qq_shared_thin/line2', 'qq_shared_thin/line2',
3132
- 'qq_shared_thin/line2', None, None]))
3150
+ None, None, 'qq2_thick', 'qq2_thick', 'qq2_thick', 'qq2_thick',
3151
+ None, None, None, 'qq2_thin', 'qq2_thin', 'qq2_thin', 'qq2_thin',
3152
+ 'qq2_thin', 'qq2_thin', 'qq2_thin', None, None, None,
3153
+ 'qq_shared_thick/line2', 'qq_shared_thick/line2',
3154
+ 'qq_shared_thick/line2', 'qq_shared_thick/line2', None, None, None,
3155
+ 'qq_shared_thin/line2', 'qq_shared_thin/line2',
3156
+ 'qq_shared_thin/line2', 'qq_shared_thin/line2',
3157
+ 'qq_shared_thin/line2', 'qq_shared_thin/line2',
3158
+ 'qq_shared_thin/line2', None, None]))
3133
3159
 
3134
3160
  assert 'qq1_thick' in env.element_dict
3135
3161
  assert 'qq1_thin' in env.element_dict
@@ -943,7 +943,8 @@ def test_insert_thin_elements_at_s_lhc(test_context):
943
943
  'drift_mb.a29r3.b1..1..1', 'mb.a29r3.b1..1']))
944
944
 
945
945
  assert np.all(tt.rows['mq.29r3.b1_exit<<3':'mq.29r3.b1_exit'].name
946
- == np.array(['m0_at_c', 'm1_at_c', 'm2_at_c', 'mq.29r3.b1_exit']))
946
+ == np.array(
947
+ ['m1_at_c', 'm2_at_c', 'mq.29r3.b1..exit_map', 'mq.29r3.b1_exit']))
947
948
 
948
949
  assert np.all(tt.rows['m0_at_d':'m0_at_d>>4'].name
949
950
  == np.array(['m0_at_d', 'm1_at_d', 'm2_at_d',