xtrack 0.86.3__tar.gz → 0.87.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 (317) hide show
  1. {xtrack-0.86.3/xtrack.egg-info → xtrack-0.87.0}/PKG-INFO +1 -1
  2. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_collimation.py +1 -2
  3. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_element_characterization_functions.py +3 -3
  4. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_elements.py +3 -3
  5. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_elements_thick.py +79 -79
  6. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_ions.py +1 -1
  7. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_line.py +1 -1
  8. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_madloader.py +2 -2
  9. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_madnginterface.py +30 -0
  10. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_native_madloader.py +37 -37
  11. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_particles_basics.py +1 -1
  12. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_slice_and_insert_with_replicas.py +8 -4
  13. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_twiss.py +71 -7
  14. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_vs_madx.py +3 -3
  15. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_xmask_orbit_correction.py +4 -4
  16. xtrack-0.87.0/xtrack/_version.py +1 -0
  17. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements.py +10 -0
  18. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/track_legacy_solenoid_radiation.h +2 -1
  19. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/slice_elements_thick.py +13 -6
  20. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/line.py +5 -2
  21. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/load.py +4 -0
  22. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/loss_location_refinement/loss_location_refinement.py +63 -54
  23. xtrack-0.87.0/xtrack/mad_writer.py +644 -0
  24. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/madng_interface.py +66 -35
  25. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/tapering.py +1 -1
  26. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/twiss.py +257 -36
  27. {xtrack-0.86.3 → xtrack-0.87.0/xtrack.egg-info}/PKG-INFO +1 -1
  28. xtrack-0.86.3/xtrack/_version.py +0 -1
  29. xtrack-0.86.3/xtrack/mad_writer.py +0 -330
  30. {xtrack-0.86.3 → xtrack-0.87.0}/LICENSE +0 -0
  31. {xtrack-0.86.3 → xtrack-0.87.0}/MANIFEST.in +0 -0
  32. {xtrack-0.86.3 → xtrack-0.87.0}/README.md +0 -0
  33. {xtrack-0.86.3 → xtrack-0.87.0}/ducktrack/__init__.py +0 -0
  34. {xtrack-0.86.3 → xtrack-0.87.0}/ducktrack/base_classes.py +0 -0
  35. {xtrack-0.86.3 → xtrack-0.87.0}/ducktrack/be_beamfields/BB6D.py +0 -0
  36. {xtrack-0.86.3 → xtrack-0.87.0}/ducktrack/be_beamfields/BB6Ddata.py +0 -0
  37. {xtrack-0.86.3 → xtrack-0.87.0}/ducktrack/be_beamfields/__init__.py +0 -0
  38. {xtrack-0.86.3 → xtrack-0.87.0}/ducktrack/be_beamfields/beambeam.py +0 -0
  39. {xtrack-0.86.3 → xtrack-0.87.0}/ducktrack/be_beamfields/boost.py +0 -0
  40. {xtrack-0.86.3 → xtrack-0.87.0}/ducktrack/be_beamfields/gaussian_fields.py +0 -0
  41. {xtrack-0.86.3 → xtrack-0.87.0}/ducktrack/be_beamfields/propagate_sigma_matrix.py +0 -0
  42. {xtrack-0.86.3 → xtrack-0.87.0}/ducktrack/be_beamfields/qgauss.py +0 -0
  43. {xtrack-0.86.3 → xtrack-0.87.0}/ducktrack/be_beamfields/slicing.py +0 -0
  44. {xtrack-0.86.3 → xtrack-0.87.0}/ducktrack/be_beamfields/spacecharge.py +0 -0
  45. {xtrack-0.86.3 → xtrack-0.87.0}/ducktrack/elements.py +0 -0
  46. {xtrack-0.86.3 → xtrack-0.87.0}/ducktrack/line.py +0 -0
  47. {xtrack-0.86.3 → xtrack-0.87.0}/ducktrack/mathlibs.py +0 -0
  48. {xtrack-0.86.3 → xtrack-0.87.0}/ducktrack/particles.py +0 -0
  49. {xtrack-0.86.3 → xtrack-0.87.0}/ducktrack/temp_pyparticles.py +0 -0
  50. {xtrack-0.86.3 → xtrack-0.87.0}/pyproject.toml +0 -0
  51. {xtrack-0.86.3 → xtrack-0.87.0}/setup.cfg +0 -0
  52. {xtrack-0.86.3 → xtrack-0.87.0}/setup.py +0 -0
  53. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_acceleration.py +0 -0
  54. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_amplitude_detuning.py +0 -0
  55. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_aperture_table.py +0 -0
  56. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_aperture_turn_ele_and_monitor.py +0 -0
  57. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_apertures.py +0 -0
  58. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_attr_replicas_and_slices.py +0 -0
  59. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_bucket_with_ref_energy_change.py +0 -0
  60. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_cavity_absolute_time.py +0 -0
  61. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_chromatic_functions_vs_madx.py +0 -0
  62. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_coasting.py +0 -0
  63. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_collective_tracker.py +0 -0
  64. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_electron_cooler.py +0 -0
  65. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_element_internal_record.py +0 -0
  66. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_elements_classflags.py +0 -0
  67. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_environment.py +0 -0
  68. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_fcc_ee_solenoid_correction.py +0 -0
  69. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_fcc_ee_solenoid_correction_new_optimize_api.py +0 -0
  70. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_footprint.py +0 -0
  71. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_freeze_longitudinal.py +0 -0
  72. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_full_rings.py +0 -0
  73. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_h6_sps_beamline.py +0 -0
  74. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_hvkick.py +0 -0
  75. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_legacy_multiline_to_env.py +0 -0
  76. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_lhc_env.py +0 -0
  77. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_lhc_match_phase_15.py +0 -0
  78. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_load.py +0 -0
  79. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_lumi.py +0 -0
  80. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_mad_writer.py +0 -0
  81. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_magnet.py +0 -0
  82. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_match_and_track_from_element.py +0 -0
  83. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_match_coupling_knob.py +0 -0
  84. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_match_nested.py +0 -0
  85. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_match_optics_and_ip_knob.py +0 -0
  86. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_match_optics_and_ip_knob_new_optimize_api.py +0 -0
  87. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_match_orbit_bump.py +0 -0
  88. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_match_tune_chroma_cminus.py +0 -0
  89. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_monitor.py +0 -0
  90. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_multi_bunch_gauss.py +0 -0
  91. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_multiline.py +0 -0
  92. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_multisetter.py +0 -0
  93. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_multispecies.py +0 -0
  94. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_optimize_for_tracking.py +0 -0
  95. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_particles.py +0 -0
  96. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_particles_pdg.py +0 -0
  97. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_periodic_symmetric_twiss_and_match.py +0 -0
  98. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_pipeline.py +0 -0
  99. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_prebuild_kernels.py +0 -0
  100. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_ps_against_ptc.py +0 -0
  101. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_ps_multiturn_twiss.py +0 -0
  102. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_psb_chicane.py +0 -0
  103. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_pyht_interface.py +0 -0
  104. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_radial_steering.py +0 -0
  105. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_radiation.py +0 -0
  106. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_radiation_equilibrium_emittances.py +0 -0
  107. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_radiation_equilibrium_emittances_thick.py +0 -0
  108. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_radiation_integrals.py +0 -0
  109. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_random_gen.py +0 -0
  110. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_random_gen_exp.py +0 -0
  111. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_random_gen_gauss.py +0 -0
  112. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_random_gen_ruth.py +0 -0
  113. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_rbend_rbarc.py +0 -0
  114. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_rf_track.py +0 -0
  115. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_rotation_signs.py +0 -0
  116. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_second_order_taylor_map.py +0 -0
  117. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_seeds.py +0 -0
  118. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_slice_elements.py +0 -0
  119. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_slicing.py +0 -0
  120. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_solenoid_bz_map_vs_boris.py +0 -0
  121. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_solenoid_bz_map_vs_boris_legacy.py +0 -0
  122. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_spacecharge_in_ring.py +0 -0
  123. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_spin.py +0 -0
  124. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_sps_thick.py +0 -0
  125. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_survey.py +0 -0
  126. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_tapering.py +0 -0
  127. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_thick_lhc.py +0 -0
  128. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_tilt_shifts.py +0 -0
  129. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_tracker.py +0 -0
  130. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_trajectory_correcton.py +0 -0
  131. {xtrack-0.86.3 → xtrack-0.87.0}/tests/test_twiss_vs_madx_psb.py +0 -0
  132. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/__init__.py +0 -0
  133. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/_temp/__init__.py +0 -0
  134. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/_temp/boris_and_solenoid_map/__init__.py +0 -0
  135. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/_temp/boris_and_solenoid_map/boris.h +0 -0
  136. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/_temp/boris_and_solenoid_map/solenoid_field.py +0 -0
  137. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/_temp/lhc_match/__init__.py +0 -0
  138. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/_temp/lhc_match/gen_madx_optics_file.py +0 -0
  139. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/_temp/lhc_match/lhc_match.py +0 -0
  140. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/_temp/lhc_match/var_limits.py +0 -0
  141. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/aperture_meas.py +0 -0
  142. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/base_element.py +0 -0
  143. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/__init__.py +0 -0
  144. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/apertures.py +0 -0
  145. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/apertures_src/limitellipse.h +0 -0
  146. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/apertures_src/limitpolygon.h +0 -0
  147. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/apertures_src/limitracetrack.h +0 -0
  148. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/apertures_src/limitrect.h +0 -0
  149. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/apertures_src/limitrectellipse.h +0 -0
  150. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/apertures_src/longitudinallimitrect.h +0 -0
  151. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/beam_interaction.py +0 -0
  152. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/bend.h +0 -0
  153. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/cavity.h +0 -0
  154. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/default_magnet_config.h +0 -0
  155. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/dipole_fringe.h +0 -0
  156. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/dipoleedge.h +0 -0
  157. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/drift.h +0 -0
  158. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/drift_slice.h +0 -0
  159. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/drift_slice_bend.h +0 -0
  160. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/drift_slice_octupole.h +0 -0
  161. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/drift_slice_quadrupole.h +0 -0
  162. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/drift_slice_rbend.h +0 -0
  163. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/drift_slice_sextupole.h +0 -0
  164. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/drift_slice_uniform_solenoid.h +0 -0
  165. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/electroncooler.h +0 -0
  166. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/elens.h +0 -0
  167. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/exciter.h +0 -0
  168. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/firstordertaylormap.h +0 -0
  169. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/legacy_solenoid.h +0 -0
  170. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/linesegmentmap.h +0 -0
  171. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/magnet.h +0 -0
  172. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/magnet_drift.h +0 -0
  173. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/magnet_edge.h +0 -0
  174. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/magnet_kick.h +0 -0
  175. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/marker.h +0 -0
  176. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/multipole.h +0 -0
  177. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/multipoleedge.h +0 -0
  178. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/nonlinearlens.h +0 -0
  179. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/octupole.h +0 -0
  180. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/quadrupole.h +0 -0
  181. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/rbend.h +0 -0
  182. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/referenceenergyincrease.h +0 -0
  183. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/rfmultipole.h +0 -0
  184. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/second_order_taylor_map.h +0 -0
  185. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/sextupole.h +0 -0
  186. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/simplethinbend.h +0 -0
  187. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/simplethinquadrupole.h +0 -0
  188. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/slnd.h +0 -0
  189. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/srotation.h +0 -0
  190. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/thick_slice_bend.h +0 -0
  191. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/thick_slice_octupole.h +0 -0
  192. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/thick_slice_quadrupole.h +0 -0
  193. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/thick_slice_rbend.h +0 -0
  194. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/thick_slice_sextupole.h +0 -0
  195. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/thick_slice_uniform_solenoid.h +0 -0
  196. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/thin_slice_bend.h +0 -0
  197. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/thin_slice_bend_entry.h +0 -0
  198. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/thin_slice_bend_exit.h +0 -0
  199. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/thin_slice_octupole.h +0 -0
  200. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/thin_slice_octupole_entry.h +0 -0
  201. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/thin_slice_octupole_exit.h +0 -0
  202. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/thin_slice_quadrupole.h +0 -0
  203. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/thin_slice_quadrupole_entry.h +0 -0
  204. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/thin_slice_quadrupole_exit.h +0 -0
  205. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/thin_slice_rbend.h +0 -0
  206. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/thin_slice_rbend_entry.h +0 -0
  207. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/thin_slice_rbend_exit.h +0 -0
  208. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/thin_slice_sextupole.h +0 -0
  209. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/thin_slice_sextupole_entry.h +0 -0
  210. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/thin_slice_sextupole_exit.h +0 -0
  211. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/thin_slice_uniform_solenoid_entry.h +0 -0
  212. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/thin_slice_uniform_solenoid_exit.h +0 -0
  213. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/track_cavity.h +0 -0
  214. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/track_dipole_edge_linear.h +0 -0
  215. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/track_dipole_edge_nonlinear.h +0 -0
  216. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/track_dipole_fringe.h +0 -0
  217. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/track_drift.h +0 -0
  218. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/track_legacy_solenoid.h +0 -0
  219. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/track_legacy_solenoid_multipolar_components.h +0 -0
  220. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/track_magnet.h +0 -0
  221. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/track_magnet_drift.h +0 -0
  222. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/track_magnet_edge.h +0 -0
  223. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/track_magnet_kick.h +0 -0
  224. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/track_magnet_radiation.h +0 -0
  225. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/track_mult_fringe.h +0 -0
  226. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/track_srotation.h +0 -0
  227. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/track_thick_bend.h +0 -0
  228. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/track_thick_cfd.h +0 -0
  229. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/track_wedge.h +0 -0
  230. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/track_xrotation.h +0 -0
  231. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/track_yrotation.h +0 -0
  232. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/variable_solenoid.h +0 -0
  233. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/wedge.h +0 -0
  234. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/wire.h +0 -0
  235. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/xrotation.h +0 -0
  236. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/xyshift.h +0 -0
  237. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/yrotation.h +0 -0
  238. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/elements_src/zetashift.h +0 -0
  239. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/exciter.py +0 -0
  240. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/magnets.py +0 -0
  241. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/rft_element.py +0 -0
  242. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/slice_elements_edge.py +0 -0
  243. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/beam_elements/slice_elements_thin.py +0 -0
  244. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/environment.py +0 -0
  245. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/footprint.py +0 -0
  246. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/general.py +0 -0
  247. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/headers/atomicadd.h +0 -0
  248. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/headers/checks.h +0 -0
  249. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/headers/constants.h +0 -0
  250. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/headers/particle_states.h +0 -0
  251. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/headers/synrad_spectrum.h +0 -0
  252. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/headers/track.h +0 -0
  253. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/internal_record.py +0 -0
  254. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/json.py +0 -0
  255. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/linear_normal_form.py +0 -0
  256. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/loss_location_refinement/__init__.py +0 -0
  257. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/lumi.py +0 -0
  258. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/mad_loader.py +0 -0
  259. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/mad_parser/__init__.py +0 -0
  260. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/mad_parser/loader.py +0 -0
  261. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/mad_parser/madx.lark +0 -0
  262. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/mad_parser/parse.py +0 -0
  263. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/match.py +0 -0
  264. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/monitors/__init__.py +0 -0
  265. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/monitors/beam_position_monitor.h +0 -0
  266. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/monitors/beam_position_monitor.py +0 -0
  267. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/monitors/beam_profile_monitor.h +0 -0
  268. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/monitors/beam_profile_monitor.py +0 -0
  269. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/monitors/beam_size_monitor.h +0 -0
  270. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/monitors/beam_size_monitor.py +0 -0
  271. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/monitors/last_turns_monitor.h +0 -0
  272. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/monitors/last_turns_monitor.py +0 -0
  273. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/monitors/particles_monitor.h +0 -0
  274. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/monitors/particles_monitor.py +0 -0
  275. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/multiline.py +0 -0
  276. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/multiline_legacy/__init__.py +0 -0
  277. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/multiline_legacy/multiline_legacy.py +0 -0
  278. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/multiline_legacy/shared_knobs.py +0 -0
  279. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/multisetter/__init__.py +0 -0
  280. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/multisetter/multisetter.py +0 -0
  281. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/particles/__init__.py +0 -0
  282. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/particles/constants.py +0 -0
  283. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/particles/masses.py +0 -0
  284. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/particles/particles.py +0 -0
  285. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/particles/pdg.py +0 -0
  286. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/particles/rng_src/base_rng.h +0 -0
  287. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/particles/rng_src/particles_rng.h +0 -0
  288. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/pipeline/__init__.py +0 -0
  289. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/pipeline/core.py +0 -0
  290. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/pipeline/manager.py +0 -0
  291. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/pipeline/multitracker.py +0 -0
  292. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/progress_indicator.py +0 -0
  293. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/random/__init__.py +0 -0
  294. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/random/random_generators.py +0 -0
  295. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/random/random_src/exponential.h +0 -0
  296. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/random/random_src/exponential_integral_Ei.h +0 -0
  297. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/random/random_src/normal.h +0 -0
  298. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/random/random_src/rutherford.h +0 -0
  299. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/random/random_src/uniform.h +0 -0
  300. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/random/random_src/uniform_accurate.h +0 -0
  301. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/slicing.py +0 -0
  302. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/survey.py +0 -0
  303. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/svgutils/__init__.py +0 -0
  304. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/svgutils/parser.py +0 -0
  305. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/svgutils/path.py +0 -0
  306. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/svgutils/svgutils.py +0 -0
  307. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/synctime.py +0 -0
  308. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/targets.py +0 -0
  309. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/tracker.py +0 -0
  310. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/tracker_data.py +0 -0
  311. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/tracker_src/tracker.h +0 -0
  312. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/trajectory_correction.py +0 -0
  313. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack/twissplot.py +0 -0
  314. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack.egg-info/SOURCES.txt +0 -0
  315. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack.egg-info/dependency_links.txt +0 -0
  316. {xtrack-0.86.3 → xtrack-0.87.0}/xtrack.egg-info/requires.txt +0 -0
  317. {xtrack-0.86.3 → xtrack-0.87.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.86.3
3
+ Version: 0.87.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
@@ -166,7 +166,7 @@ def test_aperture_refinement(sandwitch_aper):
166
166
  + line_aper_0.elements
167
167
  + (xt.Drift(_buffer=buf, length=1),
168
168
  xt.Multipole(_buffer=buf, knl=[0.]),
169
- xt.Drift(_buffer=buf, length=1),
169
+ xt.Quadrupole(_buffer=buf, length=1),
170
170
  xt.Cavity(_buffer=buf, voltage=3e6, frequency=400e6),
171
171
  xt.ParticlesMonitor(_buffer=buf,
172
172
  start_at_turn=0, stop_at_turn=10, num_particles=3),
@@ -439,7 +439,6 @@ def test_losslocationrefinement_skip_refinement_for_collimators():
439
439
  dr = 50e-6,
440
440
  ds = 0.05,
441
441
  save_refine_lines=True)
442
-
443
442
  loss_loc_refinement.refine_loss_location(particles)
444
443
 
445
444
  assert np.all(part_before.s == particles.s)
@@ -50,9 +50,9 @@ def test_has_backtrack(test_context):
50
50
  assert _has_backtrack(line['a1'], line)
51
51
  assert _has_backtrack(line['a2'], line)
52
52
 
53
- assert not _allow_loss_refinement(line['e0'], line)
54
- assert not _allow_loss_refinement(line['e1'], line)
55
- assert not _allow_loss_refinement(line['e2'], line)
53
+ assert _allow_loss_refinement(line['e0'], line)
54
+ assert _allow_loss_refinement(line['e1'], line)
55
+ assert _allow_loss_refinement(line['e2'], line)
56
56
  assert _allow_loss_refinement(line['a0'], line)
57
57
  assert _allow_loss_refinement(line['a1'], line)
58
58
  assert _allow_loss_refinement(line['a2'], line)
@@ -492,19 +492,19 @@ def test_exciter(test_context):
492
492
  expected_px = np.array([0.1, 0.2, 0.3])
493
493
  particles.move(_context=xo.context_default)
494
494
 
495
- xo.assert_allclose(particles.px, expected_px)
495
+ xo.assert_allclose(particles.px, expected_px, atol=1e-14)
496
496
 
497
497
  particles.move(_context=test_context)
498
498
  line.track(particles, num_turns=1)
499
499
  expected_px += np.array([0.2, 0.3, 0.1])
500
500
  particles.move(_context=xo.context_default)
501
- xo.assert_allclose(particles.px, expected_px)
501
+ xo.assert_allclose(particles.px, expected_px, atol=1e-14)
502
502
 
503
503
  particles.move(_context=test_context)
504
504
  line.track(particles, num_turns=1)
505
505
  expected_px += np.array([0.3, 0.1, 0])
506
506
  particles.move(_context=xo.context_default)
507
- xo.assert_allclose(particles.px, expected_px)
507
+ xo.assert_allclose(particles.px, expected_px, atol=1e-14)
508
508
 
509
509
 
510
510
  test_source = r"""
@@ -627,29 +627,29 @@ def test_import_thick_bend_from_madx(use_true_thick_bends, with_knobs, bend_type
627
627
  assert elem.model == {False: 'mat-kick-mat', True: 'full'}[use_true_thick_bends]
628
628
 
629
629
  # Element:
630
- xo.assert_allclose(elem.length, 2.0, atol=1e-16)
630
+ xo.assert_allclose(elem.length, 2.0, atol=1e-14)
631
631
  # The below is not strictly compatible with MAD-X, but is a corner case
632
632
  # that hopefully will never be relevant: if k0 is governed by an expression
633
633
  # we assume k0_from_h=False, even if its value evaluates to zero. In MAD-X
634
634
  # k0 = h if k0 is zero, but this is not feasible to implement in Xtrack now.
635
- xo.assert_allclose(elem.k0, 0 if with_knobs else 0.05, atol=1e-16)
636
- xo.assert_allclose(elem.h, 0.05, atol=1e-16) # h = angle / L
637
- xo.assert_allclose(elem.ksl, 0.0, atol=1e-16)
635
+ xo.assert_allclose(elem.k0, 0 if with_knobs else 0.05, atol=1e-14)
636
+ xo.assert_allclose(elem.h, 0.05, atol=1e-14) # h = angle / L
637
+ xo.assert_allclose(elem.ksl, 0.0, atol=1e-14)
638
638
 
639
639
  xo.assert_allclose(
640
640
  elem.knl,
641
641
  np.array([0, 0, 0.8, 0, 0, 0]), # knl = [0, 0, k2 * L, 0, 0]
642
- atol=1e-16,
642
+ atol=1e-14,
643
643
  )
644
644
 
645
645
  # Edges:
646
- xo.assert_allclose(elem.edge_entry_fint, 0.5, atol=1e-16)
647
- xo.assert_allclose(elem.edge_entry_hgap, 0.6, atol=1e-16)
648
- xo.assert_allclose(elem.edge_entry_angle, 0.7, atol=1e-16)
646
+ xo.assert_allclose(elem.edge_entry_fint, 0.5, atol=1e-14)
647
+ xo.assert_allclose(elem.edge_entry_hgap, 0.6, atol=1e-14)
648
+ xo.assert_allclose(elem.edge_entry_angle, 0.7, atol=1e-14)
649
649
 
650
- xo.assert_allclose(elem.edge_exit_fint, 0.5, atol=1e-16)
651
- xo.assert_allclose(elem.edge_exit_hgap, 0.6, atol=1e-16)
652
- xo.assert_allclose(elem.edge_exit_angle, 0.8, atol=1e-16)
650
+ xo.assert_allclose(elem.edge_exit_fint, 0.5, atol=1e-14)
651
+ xo.assert_allclose(elem.edge_exit_hgap, 0.6, atol=1e-14)
652
+ xo.assert_allclose(elem.edge_exit_angle, 0.8, atol=1e-14)
653
653
 
654
654
  # Finish the test here if we are not using knobs
655
655
  if not with_knobs:
@@ -665,26 +665,26 @@ def test_import_thick_bend_from_madx(use_true_thick_bends, with_knobs, bend_type
665
665
 
666
666
  # Verify that the line has been adjusted correctly
667
667
  # Element:
668
- xo.assert_allclose(elem.length, 3.0, atol=1e-16)
669
- xo.assert_allclose(elem.k0, 0.4, atol=1e-16)
670
- xo.assert_allclose(elem.h, 0.2 / 3.0, atol=1e-16) # h = angle / length
671
- xo.assert_allclose(elem.ksl, 0.0, atol=1e-16)
668
+ xo.assert_allclose(elem.length, 3.0, atol=1e-14)
669
+ xo.assert_allclose(elem.k0, 0.4, atol=1e-14)
670
+ xo.assert_allclose(elem.h, 0.2 / 3.0, atol=1e-14) # h = angle / length
671
+ xo.assert_allclose(elem.ksl, 0.0, atol=1e-14)
672
672
 
673
673
  xo.assert_allclose(
674
674
  elem.knl,
675
675
  np.array([0, 0, 2.4, 0, 0, 0]), # knl = [0, 0, k2 * L, 0, 0]
676
- atol=1e-16,
676
+ atol=1e-14,
677
677
  )
678
678
 
679
679
  # Edges:
680
- xo.assert_allclose(elem.edge_entry_fint, 1.0, atol=1e-16)
681
- xo.assert_allclose(elem.edge_entry_hgap, 1.2, atol=1e-16)
682
- xo.assert_allclose(elem.edge_entry_angle, 1.4, atol=1e-16)
683
- xo.assert_allclose(elem.k0, 0.4, atol=1e-16)
680
+ xo.assert_allclose(elem.edge_entry_fint, 1.0, atol=1e-14)
681
+ xo.assert_allclose(elem.edge_entry_hgap, 1.2, atol=1e-14)
682
+ xo.assert_allclose(elem.edge_entry_angle, 1.4, atol=1e-14)
683
+ xo.assert_allclose(elem.k0, 0.4, atol=1e-14)
684
684
 
685
- xo.assert_allclose(elem.edge_exit_fint, 1.0, atol=1e-16)
686
- xo.assert_allclose(elem.edge_exit_hgap, 1.2, atol=1e-16)
687
- xo.assert_allclose(elem.edge_exit_angle, 1.6, atol=1e-16)
685
+ xo.assert_allclose(elem.edge_exit_fint, 1.0, atol=1e-14)
686
+ xo.assert_allclose(elem.edge_exit_hgap, 1.2, atol=1e-14)
687
+ xo.assert_allclose(elem.edge_exit_angle, 1.6, atol=1e-14)
688
688
 
689
689
 
690
690
  @pytest.mark.parametrize('with_knobs', [False, True])
@@ -710,9 +710,9 @@ def test_import_thick_quad_from_madx(with_knobs):
710
710
  elem = line['elem']
711
711
 
712
712
  # Verify that the line has been imported correctly
713
- xo.assert_allclose(elem.length, 2.0, atol=1e-16)
714
- xo.assert_allclose(elem.k1, 0.1, atol=1e-16)
715
- xo.assert_allclose(elem.k1s, 0.2, atol=1e-16)
713
+ xo.assert_allclose(elem.length, 2.0, atol=1e-14)
714
+ xo.assert_allclose(elem.k1, 0.1, atol=1e-14)
715
+ xo.assert_allclose(elem.k1s, 0.2, atol=1e-14)
716
716
 
717
717
  # Finish the test here if we are not using knobs
718
718
  if not with_knobs:
@@ -726,9 +726,9 @@ def test_import_thick_quad_from_madx(with_knobs):
726
726
  line.vars['knob_b'] = 3.0
727
727
 
728
728
  # Verify that the line has been adjusted correctly
729
- xo.assert_allclose(elem.length, 3.0, atol=1e-16)
730
- xo.assert_allclose(elem.k1, 1.1, atol=1e-16)
731
- xo.assert_allclose(elem.k1s, 1.2, atol=1e-16)
729
+ xo.assert_allclose(elem.length, 3.0, atol=1e-14)
730
+ xo.assert_allclose(elem.k1, 1.1, atol=1e-14)
731
+ xo.assert_allclose(elem.k1s, 1.2, atol=1e-14)
732
732
 
733
733
 
734
734
  @pytest.mark.parametrize(
@@ -776,16 +776,16 @@ def test_import_thick_bend_from_madx_and_slice(
776
776
  'sbend': xt.ThinSliceBend,
777
777
  }[bend_type]
778
778
  assert isinstance(elem, slice_class)
779
- xo.assert_allclose(elem.weight, 0.5, atol=1e-16)
780
- xo.assert_allclose(elem._parent.length, 2.0, atol=1e-16)
781
- xo.assert_allclose(elem._parent.k0, 0.2, atol=1e-16)
782
- xo.assert_allclose(elem._parent.knl, [0., 0, 0.8, 0, 0, 0], atol=1e-16)
783
- xo.assert_allclose(elem._parent.ksl, 0, atol=1e-16)
784
- xo.assert_allclose(elem._parent.h, 0.05, atol=1e-16)
779
+ xo.assert_allclose(elem.weight, 0.5, atol=1e-14)
780
+ xo.assert_allclose(elem._parent.length, 2.0, atol=1e-14)
781
+ xo.assert_allclose(elem._parent.k0, 0.2, atol=1e-14)
782
+ xo.assert_allclose(elem._parent.knl, [0., 0, 0.8, 0, 0, 0], atol=1e-14)
783
+ xo.assert_allclose(elem._parent.ksl, 0, atol=1e-14)
784
+ xo.assert_allclose(elem._parent.h, 0.05, atol=1e-14)
785
785
 
786
786
  for drift in drifts:
787
- xo.assert_allclose(drift._parent.length, 2., atol=1e-16)
788
- xo.assert_allclose(drift.weight, 1./3., atol=1e-16)
787
+ xo.assert_allclose(drift._parent.length, 2., atol=1e-14)
788
+ xo.assert_allclose(drift.weight, 1./3., atol=1e-14)
789
789
 
790
790
  # Finish the test here if we are not using knobs
791
791
  if not with_knobs:
@@ -800,26 +800,26 @@ def test_import_thick_bend_from_madx_and_slice(
800
800
 
801
801
  # Verify that the line has been adjusted correctly
802
802
  for elem in elems:
803
- xo.assert_allclose(elem.weight, 0.5, atol=1e-16)
804
- xo.assert_allclose(elem._parent.length, 3.0, atol=1e-16)
805
- xo.assert_allclose(elem._parent.k0, 0.4, atol=1e-16)
806
- xo.assert_allclose(elem._parent.knl, [0., 0, 2.4, 0, 0, 0], atol=1e-16)
807
- xo.assert_allclose(elem._parent.ksl, 0, atol=1e-16)
808
- xo.assert_allclose(elem._parent.h, 0.2/3, atol=1e-16)
809
-
810
- xo.assert_allclose(elem._xobject.weight, 0.5, atol=1e-16)
811
- xo.assert_allclose(elem._xobject._parent.length, 3.0, atol=1e-16)
812
- xo.assert_allclose(elem._xobject._parent.k0, 0.4, atol=1e-16)
813
- xo.assert_allclose(elem._xobject._parent.knl, [0., 0, 2.4, 0, 0, 0], atol=1e-16)
814
- xo.assert_allclose(elem._xobject._parent.ksl, 0, atol=1e-16)
815
- xo.assert_allclose(elem._xobject._parent.h, 0.2/3, atol=1e-16)
803
+ xo.assert_allclose(elem.weight, 0.5, atol=1e-14)
804
+ xo.assert_allclose(elem._parent.length, 3.0, atol=1e-14)
805
+ xo.assert_allclose(elem._parent.k0, 0.4, atol=1e-14)
806
+ xo.assert_allclose(elem._parent.knl, [0., 0, 2.4, 0, 0, 0], atol=1e-14)
807
+ xo.assert_allclose(elem._parent.ksl, 0, atol=1e-14)
808
+ xo.assert_allclose(elem._parent.h, 0.2/3, atol=1e-14)
809
+
810
+ xo.assert_allclose(elem._xobject.weight, 0.5, atol=1e-14)
811
+ xo.assert_allclose(elem._xobject._parent.length, 3.0, atol=1e-14)
812
+ xo.assert_allclose(elem._xobject._parent.k0, 0.4, atol=1e-14)
813
+ xo.assert_allclose(elem._xobject._parent.knl, [0., 0, 2.4, 0, 0, 0], atol=1e-14)
814
+ xo.assert_allclose(elem._xobject._parent.ksl, 0, atol=1e-14)
815
+ xo.assert_allclose(elem._xobject._parent.h, 0.2/3, atol=1e-14)
816
816
 
817
817
  assert elem._parent._buffer is line._buffer
818
818
  assert elem._xobject._parent._buffer is line._buffer
819
819
 
820
820
  for drift in drifts:
821
- xo.assert_allclose(drift._parent.length, 3, atol=1e-16)
822
- xo.assert_allclose(drift.weight, 1./3., atol=1e-16)
821
+ xo.assert_allclose(drift._parent.length, 3, atol=1e-14)
822
+ xo.assert_allclose(drift.weight, 1./3., atol=1e-14)
823
823
 
824
824
  assert drift._parent._buffer is line._buffer
825
825
  assert drift._xobject._parent._buffer is line._buffer
@@ -856,14 +856,14 @@ def test_import_thick_quad_from_madx_and_slice(with_knobs):
856
856
 
857
857
  # Verify that the slices are correct
858
858
  for elem in elems:
859
- xo.assert_allclose(elem.weight, 0.5, atol=1e-16)
860
- xo.assert_allclose(elem._parent.length, 2.0, atol=1e-16)
861
- xo.assert_allclose(elem._parent.k1, 0.1, atol=1e-16)
862
- xo.assert_allclose(elem._parent.k1s, 0.2, atol=1e-16)
859
+ xo.assert_allclose(elem.weight, 0.5, atol=1e-14)
860
+ xo.assert_allclose(elem._parent.length, 2.0, atol=1e-14)
861
+ xo.assert_allclose(elem._parent.k1, 0.1, atol=1e-14)
862
+ xo.assert_allclose(elem._parent.k1s, 0.2, atol=1e-14)
863
863
 
864
864
  for drift in drifts:
865
- xo.assert_allclose(drift._parent.length, 2., atol=1e-16)
866
- xo.assert_allclose(drift.weight, 1./3., atol=1e-16)
865
+ xo.assert_allclose(drift._parent.length, 2., atol=1e-14)
866
+ xo.assert_allclose(drift.weight, 1./3., atol=1e-14)
867
867
 
868
868
  # Finish the test here if we are not using knobs
869
869
  if not with_knobs:
@@ -878,25 +878,25 @@ def test_import_thick_quad_from_madx_and_slice(with_knobs):
878
878
 
879
879
  # Verify that the line has been adjusted correctly
880
880
  for elem in elems:
881
- xo.assert_allclose(elem.weight, 0.5, atol=1e-16)
882
- xo.assert_allclose(elem._parent.length, 3.0, atol=1e-16)
883
- xo.assert_allclose(elem._parent.k1, 2.1, atol=1e-16)
884
- xo.assert_allclose(elem._parent.k1s, 2.2, atol=1e-16)
881
+ xo.assert_allclose(elem.weight, 0.5, atol=1e-14)
882
+ xo.assert_allclose(elem._parent.length, 3.0, atol=1e-14)
883
+ xo.assert_allclose(elem._parent.k1, 2.1, atol=1e-14)
884
+ xo.assert_allclose(elem._parent.k1s, 2.2, atol=1e-14)
885
885
 
886
- xo.assert_allclose(elem._xobject.weight, 0.5, atol=1e-16)
887
- xo.assert_allclose(elem._xobject._parent.length, 3.0, atol=1e-16)
888
- xo.assert_allclose(elem._xobject._parent.k1, 2.1, atol=1e-16)
889
- xo.assert_allclose(elem._xobject._parent.k1s, 2.2, atol=1e-16)
886
+ xo.assert_allclose(elem._xobject.weight, 0.5, atol=1e-14)
887
+ xo.assert_allclose(elem._xobject._parent.length, 3.0, atol=1e-14)
888
+ xo.assert_allclose(elem._xobject._parent.k1, 2.1, atol=1e-14)
889
+ xo.assert_allclose(elem._xobject._parent.k1s, 2.2, atol=1e-14)
890
890
 
891
891
  assert elem._parent._buffer is line._buffer
892
892
  assert elem._xobject._parent._buffer is line._buffer
893
893
 
894
894
  for drift in drifts:
895
- xo.assert_allclose(drift._parent.length, 3., atol=1e-16)
896
- xo.assert_allclose(drift.weight, 1./3., atol=1e-16)
895
+ xo.assert_allclose(drift._parent.length, 3., atol=1e-14)
896
+ xo.assert_allclose(drift.weight, 1./3., atol=1e-14)
897
897
 
898
- xo.assert_allclose(drift._xobject._parent.length, 3., atol=1e-16)
899
- xo.assert_allclose(drift._xobject.weight, 1./3., atol=1e-16)
898
+ xo.assert_allclose(drift._xobject._parent.length, 3., atol=1e-14)
899
+ xo.assert_allclose(drift._xobject.weight, 1./3., atol=1e-14)
900
900
 
901
901
  assert drift._parent._buffer is line._buffer
902
902
  assert drift._xobject._parent._buffer is line._buffer
@@ -1064,7 +1064,7 @@ def test_import_thick_with_apertures_and_slice():
1064
1064
 
1065
1065
 
1066
1066
  def _assert_eq(a, b):
1067
- xo.assert_allclose(a, b, atol=1e-16)
1067
+ xo.assert_allclose(a, b, atol=1e-14)
1068
1068
 
1069
1069
  _assert_eq(line[f'elm_aper'].rot_s_rad, 0.1)
1070
1070
  _assert_eq(line[f'elm_aper'].shift_x, 0.2)
@@ -1492,12 +1492,12 @@ def test_solenoid_shifted_and_rotated_multipolar_kick(test_context):
1492
1492
  line_test.track(p_test)
1493
1493
  line_ref.track(p_ref)
1494
1494
 
1495
- xo.assert_allclose(p_test.x, p_ref.x, rtol=0, atol=1e-16)
1496
- xo.assert_allclose(p_test.px, p_ref.px, rtol=0, atol=1e-16)
1497
- xo.assert_allclose(p_test.y, p_ref.y, rtol=0, atol=1e-16)
1498
- xo.assert_allclose(p_test.py, p_ref.py, rtol=0, atol=1e-16)
1499
- xo.assert_allclose(p_test.zeta, p_ref.zeta, rtol=0, atol=1e-16)
1500
- xo.assert_allclose(p_test.delta, p_ref.delta, rtol=0, atol=1e-16)
1495
+ xo.assert_allclose(p_test.x, p_ref.x, rtol=0, atol=1e-14)
1496
+ xo.assert_allclose(p_test.px, p_ref.px, rtol=0, atol=1e-14)
1497
+ xo.assert_allclose(p_test.y, p_ref.y, rtol=0, atol=1e-14)
1498
+ xo.assert_allclose(p_test.py, p_ref.py, rtol=0, atol=1e-14)
1499
+ xo.assert_allclose(p_test.zeta, p_ref.zeta, rtol=0, atol=1e-14)
1500
+ xo.assert_allclose(p_test.delta, p_ref.delta, rtol=0, atol=1e-14)
1501
1501
 
1502
1502
 
1503
1503
  @pytest.mark.parametrize('shift_x', (0, 1e-3))
@@ -1589,8 +1589,8 @@ def test_solenoid_multipole_shifts(shift_x, shift_y, test_element_name):
1589
1589
  ########################################
1590
1590
  # Assertions
1591
1591
  ########################################
1592
- xo.assert_allclose(tw.x[-1], tw_sol.x[-1], rtol=2E-6)
1593
- xo.assert_allclose(tw.y[-1], tw_sol.y[-1], rtol=2E-6)
1592
+ xo.assert_allclose(tw.x[-1], tw_sol.x[-1], rtol=2e-6, atol=1e-12)
1593
+ xo.assert_allclose(tw.y[-1], tw_sol.y[-1], rtol=2e-6, atol=1e-12)
1594
1594
 
1595
1595
 
1596
1596
  def test_solenoid_multipole_rotations():
@@ -88,7 +88,7 @@ def test_ions(test_context):
88
88
  q0=mad.sequence.sps.beam.charge,
89
89
  gamma0=mad.sequence.sps.beam.gamma)
90
90
 
91
- xo.assert_allclose(line['actcse.31632'].voltage, V_RF, atol=1e-10)
91
+ xo.assert_allclose(line['actcse.31632'].voltage, V_RF, atol=1e-10, rtol=1e-15)
92
92
 
93
93
  line.build_tracker()
94
94
 
@@ -994,7 +994,7 @@ def test_elements_intersecting_s():
994
994
  }
995
995
  result = line._elements_intersecting_s(cuts)
996
996
  for kk in expected.keys() | result.keys():
997
- xo.assert_allclose(expected[kk], result[kk], atol=1e-16)
997
+ xo.assert_allclose(expected[kk], result[kk], atol=1e-14)
998
998
 
999
999
 
1000
1000
  def test_slicing_at_custom_s():
@@ -664,8 +664,8 @@ def test_mad_elements_import():
664
664
  x_1, x_2, y_1, y_2 = 3, 2 * np.sqrt(3), np.sqrt(3), 6
665
665
  expected_x_vertices = [x_1, x_2, -x_2, -x_1, -x_1, -x_2, x_2, x_1]
666
666
  expected_y_vertices = [y_1, y_2, y_2, y_1, -y_1, -y_2, -y_2, -y_1]
667
- xo.assert_allclose(line['oct_aper'].x_vertices, expected_x_vertices)
668
- xo.assert_allclose(line['oct_aper'].y_vertices, expected_y_vertices)
667
+ xo.assert_allclose(line['oct_aper'].x_vertices, expected_x_vertices, atol=1e-14)
668
+ xo.assert_allclose(line['oct_aper'].y_vertices, expected_y_vertices, atol=1e-14)
669
669
 
670
670
 
671
671
  def test_selective_expr_import_and_replace_in_expr():
@@ -97,3 +97,33 @@ def test_madng_interface_with_multipole_errors_and_misalignments():
97
97
  xo.assert_allclose(tw.ay_chrom, tw.ay_ng, atol=5e-3*tw.wy_chrom.max(), rtol=0)
98
98
  xo.assert_allclose(tw.bx_chrom, tw.bx_ng, atol=5e-3*tw.wx_chrom.max(), rtol=0)
99
99
  xo.assert_allclose(tw.by_chrom, tw.by_ng, atol=5e-3*tw.wy_chrom.max(), rtol=0)
100
+
101
+ def test_madng_survey():
102
+ line = xt.Line.from_json(test_data_folder /
103
+ 'hllhc15_thick/lhc_thick_with_knobs.json')
104
+ survey = line.madng_survey()
105
+
106
+ # Check that columns exist:
107
+ SURVEY_COLS = ['X', 'Y', 'Z', 'theta', 'phi', 'psi', 'name', 's', 'length', 'slc',
108
+ 'turn', 'tdir', 'eidx', 'ename', 'element_type', 'angle', 'tilt']
109
+ assert isinstance(survey, xt.survey.SurveyTable)
110
+ assert len(survey.cols) == len(SURVEY_COLS)
111
+ for col in SURVEY_COLS:
112
+ assert col in survey.cols, f"Column '{col}' not found in survey"
113
+
114
+ # Compare MAD-NG survey with Xsuite survey
115
+ xsurvey = line.survey()
116
+
117
+ assert len(survey) == len(xsurvey), "Length of MAD-NG survey and Xsuite survey do not match"
118
+
119
+ xo.assert_allclose(survey.X, xsurvey.X, atol=1e-5, rtol=0)
120
+ xo.assert_allclose(survey.Y, xsurvey.Y, atol=1e-5, rtol=0)
121
+ xo.assert_allclose(survey.Z, xsurvey.Z, atol=1e-5, rtol=0)
122
+ xo.assert_allclose(survey.theta, xsurvey.theta, atol=1e-5, rtol=0)
123
+ xo.assert_allclose(survey.phi, xsurvey.phi, atol=1e-5, rtol=0)
124
+ xo.assert_allclose(survey.psi, xsurvey.psi, atol=1e-5, rtol=0)
125
+ xo.assert_allclose(survey.s, xsurvey.s, atol=1e-5, rtol=0)
126
+ xo.assert_allclose(survey.angle, xsurvey.angle, atol=1e-5, rtol=0)
127
+ xo.assert_allclose(survey.tilt, xsurvey.tilt, atol=1e-5, rtol=0)
128
+ # Length doesn't work because of multipoles.
129
+ #xo.assert_allclose(survey.length, xsurvey.length, atol=1e-5, rtol=0)