trajectopy 5.1.2__tar.gz → 5.1.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 (213) hide show
  1. trajectopy-5.1.4/.github/workflows/release.yml +118 -0
  2. {trajectopy-5.1.2 → trajectopy-5.1.4}/PKG-INFO +5 -2
  3. {trajectopy-5.1.2 → trajectopy-5.1.4}/README.md +84 -81
  4. {trajectopy-5.1.2 → trajectopy-5.1.4}/requirements.txt +1738 -1738
  5. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/test_alignment.py +192 -172
  6. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/test_sorting.py +59 -1
  7. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/test_visualization.py +71 -0
  8. trajectopy-5.1.4/trajectopy/__version__.py +1 -0
  9. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/core/settings.py +4 -0
  10. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/managers/plot_manager.py +1 -0
  11. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/views/json_settings_view.py +1 -1
  12. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/processing/lib/alignment/estimation.py +6 -3
  13. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/processing/sorting.py +100 -45
  14. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/visualization/figure.py +60 -7
  15. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/visualization/plots.py +80 -5
  16. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/visualization/style.py +16 -0
  17. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy-docs/docs/index.md +4 -1
  18. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy-docs/docs/settings.md +2 -1
  19. trajectopy-5.1.4/trajectopy.spec +108 -0
  20. {trajectopy-5.1.2 → trajectopy-5.1.4}/uv.lock +2597 -2597
  21. trajectopy-5.1.2/.github/workflows/release.yml +0 -61
  22. trajectopy-5.1.2/trajectopy/__version__.py +0 -1
  23. trajectopy-5.1.2/trajectopy.spec +0 -78
  24. {trajectopy-5.1.2 → trajectopy-5.1.4}/.gitattributes +0 -0
  25. {trajectopy-5.1.2 → trajectopy-5.1.4}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  26. {trajectopy-5.1.2 → trajectopy-5.1.4}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  27. {trajectopy-5.1.2 → trajectopy-5.1.4}/.github/workflows/ci.yml +0 -0
  28. {trajectopy-5.1.2 → trajectopy-5.1.4}/.gitignore +0 -0
  29. {trajectopy-5.1.2 → trajectopy-5.1.4}/.pre-commit-config.yaml +0 -0
  30. {trajectopy-5.1.2 → trajectopy-5.1.4}/.pylintrc +0 -0
  31. {trajectopy-5.1.2 → trajectopy-5.1.4}/CITATION.cff +0 -0
  32. {trajectopy-5.1.2 → trajectopy-5.1.4}/LICENSE +0 -0
  33. {trajectopy-5.1.2 → trajectopy-5.1.4}/example_data/KITTI_ORB.traj +0 -0
  34. {trajectopy-5.1.2 → trajectopy-5.1.4}/example_data/KITTI_SPTAM.traj +0 -0
  35. {trajectopy-5.1.2 → trajectopy-5.1.4}/example_data/KITTI_gt.traj +0 -0
  36. {trajectopy-5.1.2 → trajectopy-5.1.4}/example_scripts/align.py +0 -0
  37. {trajectopy-5.1.2 → trajectopy-5.1.4}/example_scripts/alignment.py +0 -0
  38. {trajectopy-5.1.2 → trajectopy-5.1.4}/example_scripts/ate.py +0 -0
  39. {trajectopy-5.1.2 → trajectopy-5.1.4}/example_scripts/deviation_plots.py +0 -0
  40. {trajectopy-5.1.2 → trajectopy-5.1.4}/example_scripts/rpe.py +0 -0
  41. {trajectopy-5.1.2 → trajectopy-5.1.4}/example_scripts/trajectory_plot.py +0 -0
  42. {trajectopy-5.1.2 → trajectopy-5.1.4}/installer/trajectopy.iss +0 -0
  43. {trajectopy-5.1.2 → trajectopy-5.1.4}/pyproject.toml +0 -0
  44. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/__init__.py +0 -0
  45. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/data/abs_dev.result +0 -0
  46. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/data/align_entry.result +0 -0
  47. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/data/generated_trajectory.traj +0 -0
  48. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/data/noisy_trajectory.traj +0 -0
  49. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/data/open_loop_trajectory.traj +0 -0
  50. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/data/rel_dev_meter.result +0 -0
  51. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/data/rel_dev_second.result +0 -0
  52. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/test_approximation.py +0 -0
  53. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/test_architecture.py +0 -0
  54. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/test_comparison.py +0 -0
  55. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/test_context_menus.py +0 -0
  56. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/test_fast_reading.py +0 -0
  57. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/test_gui_models.py +0 -0
  58. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/test_gui_smoke.py +0 -0
  59. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/test_inplace_contract.py +0 -0
  60. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/test_io.py +0 -0
  61. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/test_kml.py +0 -0
  62. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/test_manual_alignment.py +0 -0
  63. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/test_matching.py +0 -0
  64. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/test_merging.py +0 -0
  65. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/test_pipeline.py +0 -0
  66. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/test_positions_rotations.py +0 -0
  67. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/test_processing_edge_cases.py +0 -0
  68. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/test_processing_errors.py +0 -0
  69. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/test_project.py +0 -0
  70. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/test_readers_edge_cases.py +0 -0
  71. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/test_readers_errors.py +0 -0
  72. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/test_regressions.py +0 -0
  73. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/test_settings.py +0 -0
  74. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/test_settings_edge_cases.py +0 -0
  75. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/test_settings_serialization.py +0 -0
  76. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/test_settings_validation.py +0 -0
  77. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/test_trajectory.py +0 -0
  78. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/test_trajectory_validation.py +0 -0
  79. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/test_update_check.py +0 -0
  80. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/testdata.py +0 -0
  81. {trajectopy-5.1.2 → trajectopy-5.1.4}/test/util.py +0 -0
  82. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/LICENSE +0 -0
  83. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/__init__.py +0 -0
  84. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/__main__.py +0 -0
  85. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/cli/__init__.py +0 -0
  86. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/cli/main.py +0 -0
  87. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/core/__init__.py +0 -0
  88. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/core/parameters.py +0 -0
  89. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/core/positions.py +0 -0
  90. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/core/rotations.py +0 -0
  91. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/core/trajectory.py +0 -0
  92. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/exceptions.py +0 -0
  93. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/__init__.py +0 -0
  94. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/app.py +0 -0
  95. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/managers/__init__.py +0 -0
  96. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/managers/file_manager.py +0 -0
  97. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/managers/project_manager.py +0 -0
  98. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/managers/requests.py +0 -0
  99. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/managers/trajectory_manager.py +0 -0
  100. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/managers/ui_manager.py +0 -0
  101. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/models/__init__.py +0 -0
  102. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/models/entries.py +0 -0
  103. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/models/property_model.py +0 -0
  104. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/models/result_model.py +0 -0
  105. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/models/selection.py +0 -0
  106. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/models/table_model.py +0 -0
  107. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/models/trajectory_model.py +0 -0
  108. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/project.py +0 -0
  109. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/resources/full-icon-poppins.png +0 -0
  110. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/resources/icon-bg.ico +0 -0
  111. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/resources/icon-bg.png +0 -0
  112. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/resources/icon.png +0 -0
  113. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/themes.py +0 -0
  114. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/update_check.py +0 -0
  115. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/utils.py +0 -0
  116. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/views/__init__.py +0 -0
  117. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/views/about_window.py +0 -0
  118. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/views/alignment_edit_window.py +0 -0
  119. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/views/dof_organizer.py +0 -0
  120. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/views/entry_table_view.py +0 -0
  121. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/views/kml_dialog.py +0 -0
  122. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/views/main_window.py +0 -0
  123. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/views/manual_alignment_window.py +0 -0
  124. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/views/menu_helpers.py +0 -0
  125. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/views/playback_window.py +0 -0
  126. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/views/preview_plot.py +0 -0
  127. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/views/preview_plot_3d.py +0 -0
  128. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/views/progress_window.py +0 -0
  129. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/views/properties_panel.py +0 -0
  130. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/views/result_context_menu.py +0 -0
  131. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/views/result_selection_window.py +0 -0
  132. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/views/result_table_view.py +0 -0
  133. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/views/timeline_widget.py +0 -0
  134. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/views/trajectory_context_menu.py +0 -0
  135. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/views/trajectory_table_view.py +0 -0
  136. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/gui/worker.py +0 -0
  137. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/io/__init__.py +0 -0
  138. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/io/ascii.py +0 -0
  139. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/io/header.py +0 -0
  140. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/io/kml.py +0 -0
  141. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/io/results_io.py +0 -0
  142. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/io/rosbag.py +0 -0
  143. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/io/rosmsg.py +0 -0
  144. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/io/trajectory_io.py +0 -0
  145. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/io/utils.py +0 -0
  146. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/processing/__init__.py +0 -0
  147. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/processing/alignment.py +0 -0
  148. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/processing/approximation.py +0 -0
  149. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/processing/evaluation.py +0 -0
  150. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/processing/interpolation.py +0 -0
  151. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/processing/lib/__init__.py +0 -0
  152. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/processing/lib/alignment/__init__.py +0 -0
  153. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/processing/lib/alignment/data.py +0 -0
  154. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/processing/lib/alignment/direct.py +0 -0
  155. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/processing/lib/alignment/egrad_interface.py +0 -0
  156. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/processing/lib/alignment/equations.py +0 -0
  157. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/processing/lib/alignment/parameters.py +0 -0
  158. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/processing/lib/approximation/__init__.py +0 -0
  159. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/processing/lib/approximation/cubic_approximation.py +0 -0
  160. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/processing/lib/approximation/line_approximation.py +0 -0
  161. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/processing/lib/approximation/voxelizer.py +0 -0
  162. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/processing/matching.py +0 -0
  163. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/processing/merging.py +0 -0
  164. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/py.typed +0 -0
  165. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/readers/__init__.py +0 -0
  166. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/readers/ascii.py +0 -0
  167. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/readers/rosbag.py +0 -0
  168. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/readers/rosmsg.py +0 -0
  169. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/readers/utils.py +0 -0
  170. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/results/__init__.py +0 -0
  171. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/results/alignment_result.py +0 -0
  172. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/results/ate_result.py +0 -0
  173. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/results/rpe_result.py +0 -0
  174. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/utils/__init__.py +0 -0
  175. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/utils/colors.py +0 -0
  176. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/utils/common.py +0 -0
  177. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/utils/definitions.py +0 -0
  178. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/utils/formatting.py +0 -0
  179. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/utils/geometry.py +0 -0
  180. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/utils/linalg.py +0 -0
  181. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/utils/numeric.py +0 -0
  182. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/utils/resources.py +0 -0
  183. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/visualization/__init__.py +0 -0
  184. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/visualization/_svg_export.py +0 -0
  185. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy/visualization/axes.py +0 -0
  186. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy-docs/docs/api/core/parameters.md +0 -0
  187. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy-docs/docs/api/core/positions.md +0 -0
  188. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy-docs/docs/api/core/rotations.md +0 -0
  189. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy-docs/docs/api/core/settings.md +0 -0
  190. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy-docs/docs/api/core/trajectory.md +0 -0
  191. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy-docs/docs/api/index.md +0 -0
  192. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy-docs/docs/api/io/kml.md +0 -0
  193. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy-docs/docs/api/io/results_io.md +0 -0
  194. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy-docs/docs/api/io/rosbag.md +0 -0
  195. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy-docs/docs/api/io/trajectory_io.md +0 -0
  196. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy-docs/docs/api/processing/alignment.md +0 -0
  197. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy-docs/docs/api/processing/approximation.md +0 -0
  198. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy-docs/docs/api/processing/evaluation.md +0 -0
  199. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy-docs/docs/api/processing/interpolation.md +0 -0
  200. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy-docs/docs/api/processing/matching.md +0 -0
  201. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy-docs/docs/api/processing/merging.md +0 -0
  202. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy-docs/docs/api/processing/sorting.md +0 -0
  203. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy-docs/docs/api/results/alignment_result.md +0 -0
  204. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy-docs/docs/api/results/ate_result.md +0 -0
  205. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy-docs/docs/api/results/rpe_result.md +0 -0
  206. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy-docs/docs/api/visualization/display.md +0 -0
  207. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy-docs/docs/api/visualization/figures.md +0 -0
  208. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy-docs/docs/assets/icon.png +0 -0
  209. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy-docs/docs/file_formats.md +0 -0
  210. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy-docs/docs/javascripts/mathjax.js +0 -0
  211. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy-docs/docs/stylesheets/extra.css +0 -0
  212. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy-docs/docs/user_guide.md +0 -0
  213. {trajectopy-5.1.2 → trajectopy-5.1.4}/trajectopy-docs/mkdocs.yml +0 -0
@@ -0,0 +1,118 @@
1
+ name: Release
2
+
3
+ # Pushing a version tag (e.g. v5.1.0, matching trajectopy/__version__.py) builds the app for Windows (installer),
4
+ # macOS (.dmg, Apple Silicon) and Linux (.tar.gz, x86-64) and attaches them to the GitHub release of that tag
5
+ # (created with generated notes if it does not exist yet). The update check of installed apps then finds the new
6
+ # version.
7
+ # Running the workflow manually only builds the packages and keeps them as workflow artifacts.
8
+ #
9
+ # PyInstaller cannot cross-compile, so each package is built on a runner of its platform. The Linux build runs on
10
+ # the oldest supported Ubuntu, since the app only runs on systems with the same or a newer glibc. The macOS app is
11
+ # not signed with a Developer ID: on first start, users have to open it with right-click → Open.
12
+
13
+ on:
14
+ push:
15
+ tags: ["v*"]
16
+ workflow_dispatch:
17
+
18
+ permissions:
19
+ contents: write
20
+
21
+ jobs:
22
+ build:
23
+ strategy:
24
+ fail-fast: false
25
+ matrix:
26
+ include:
27
+ - os: windows-latest
28
+ app: dist/Trajectopy/Trajectopy.exe
29
+ - os: macos-latest
30
+ app: dist/Trajectopy.app/Contents/MacOS/Trajectopy
31
+ - os: ubuntu-22.04
32
+ app: dist/Trajectopy/Trajectopy
33
+ runs-on: ${{ matrix.os }}
34
+ defaults:
35
+ run:
36
+ shell: bash
37
+ steps:
38
+ - uses: actions/checkout@v4
39
+ - uses: astral-sh/setup-uv@v6
40
+ with:
41
+ python-version: "3.13"
42
+ # Qt's libraries for X11 and OpenGL: pyqtgraph cannot be imported without them, so PyInstaller would miss
43
+ # its submodules, and the ones not part of a typical desktop installation are bundled with the app
44
+ - if: runner.os == 'Linux'
45
+ run: |
46
+ sudo apt-get update
47
+ sudo apt-get install -y libegl1 libgl1 libfontconfig1 libdbus-1-3 libxkbcommon-x11-0 libxcb-cursor0 \
48
+ libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-render-util0 libxcb-shape0 libxcb-util1 libxcb-xkb1
49
+ - run: uv sync --group dev --extra gui
50
+
51
+ - name: Read version
52
+ id: version
53
+ run: |
54
+ version=$(uv run python -c "from trajectopy.__version__ import __version__; print(__version__)")
55
+ echo "version=$version" >> "$GITHUB_OUTPUT"
56
+ if [[ "$GITHUB_REF_TYPE" == "tag" && "$GITHUB_REF_NAME" != "v$version" ]]; then
57
+ echo "::error::Tag $GITHUB_REF_NAME does not match the package version $version"
58
+ exit 1
59
+ fi
60
+
61
+ - name: Build the app
62
+ run: uv run pyinstaller --noconfirm trajectopy.spec
63
+ env:
64
+ # PyInstaller imports the packages to analyse them; Qt must not need a display for that (Linux CI)
65
+ QT_QPA_PLATFORM: offscreen
66
+
67
+ - name: Check that the app starts
68
+ run: ${{ matrix.app }} --version
69
+
70
+ - name: Build the Windows installer
71
+ if: runner.os == 'Windows'
72
+ shell: pwsh
73
+ run: |
74
+ $iscc = "${env:ProgramFiles(x86)}\Inno Setup 6\ISCC.exe"
75
+ if (-not (Test-Path $iscc)) { choco install innosetup --no-progress -y }
76
+ & $iscc "/DAppVersion=${{ steps.version.outputs.version }}" installer\trajectopy.iss
77
+ if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
78
+ "PACKAGE=dist/Trajectopy-${{ steps.version.outputs.version }}-setup.exe" >> $env:GITHUB_ENV
79
+
80
+ - name: Build the macOS disk image
81
+ if: runner.os == 'macOS'
82
+ run: |
83
+ package="dist/Trajectopy-${{ steps.version.outputs.version }}-macos-arm64.dmg"
84
+ # the image shows the app next to a link to /Applications, to install it by dragging
85
+ mkdir dmg
86
+ cp -R dist/Trajectopy.app dmg/
87
+ ln -s /Applications dmg/Applications
88
+ hdiutil create -volname Trajectopy -srcfolder dmg -format UDZO -ov "$package"
89
+ echo "PACKAGE=$package" >> "$GITHUB_ENV"
90
+
91
+ - name: Build the Linux archive
92
+ if: runner.os == 'Linux'
93
+ run: |
94
+ package="dist/Trajectopy-${{ steps.version.outputs.version }}-linux-x86_64.tar.gz"
95
+ tar -czf "$package" -C dist Trajectopy
96
+ echo "PACKAGE=$package" >> "$GITHUB_ENV"
97
+
98
+ - uses: actions/upload-artifact@v4
99
+ with:
100
+ name: Trajectopy-${{ steps.version.outputs.version }}-${{ runner.os }}
101
+ path: ${{ env.PACKAGE }}
102
+
103
+ release:
104
+ # one job attaches all packages, so that the build jobs do not race to create the release
105
+ if: github.ref_type == 'tag'
106
+ needs: build
107
+ runs-on: ubuntu-latest
108
+ steps:
109
+ - uses: actions/download-artifact@v4
110
+ with:
111
+ path: dist
112
+ merge-multiple: true
113
+
114
+ - name: Attach the packages to the release
115
+ uses: softprops/action-gh-release@v2
116
+ with:
117
+ files: dist/*
118
+ generate_release_notes: true
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: trajectopy
3
- Version: 5.1.2
3
+ Version: 5.1.4
4
4
  Summary: Trajectory Evaluation in Python
5
5
  Project-URL: Homepage, https://gereon-t.github.io/trajectopy/
6
6
  Project-URL: Documentation, https://gereon-t.github.io/trajectopy/
@@ -55,7 +55,10 @@ Description-Content-Type: text/markdown
55
55
  <h4>Trajectopy is a Python package with an optional graphical user interface for empirical trajectory evaluation. </h4>
56
56
 
57
57
  <p align="center">
58
- <img style="border-radius: 10px;" src="https://raw.githubusercontent.com/gereon-t/trajectopy/main/.images/trajectopy_gif_low_quality.gif">
58
+ <img style="border-radius: 10px;" src="https://raw.githubusercontent.com/gereon-t/trajectopy/main/.images/gui_ate.png" alt="Trajectopy GUI showing the ATE of a trajectory in the 3D preview">
59
+ <br />
60
+ <img style="border-radius: 10px;" src="https://raw.githubusercontent.com/gereon-t/trajectopy/main/.images/plot_ate.png" width="49%" alt="ATE plot over time">
61
+ <img style="border-radius: 10px;" src="https://raw.githubusercontent.com/gereon-t/trajectopy/main/.images/plot_ate_map.png" width="49%" alt="ATE map plot">
59
62
  </p>
60
63
 
61
64
  </div>
@@ -1,81 +1,84 @@
1
- <div align="center">
2
- <h1>Trajectopy - Trajectory Evaluation in Python</h1>
3
- <a href="https://github.com/gereon-t/trajectopy/releases"><img src="https://img.shields.io/github/v/release/gereon-t/trajectopy?label=version" /></a>
4
- <a href="https://www.python.org/downloads/"><img src="https://img.shields.io/badge/python-3.10+-blue.svg" /></a>
5
- <a href="https://github.com/gereon-t/trajectopy/blob/main/LICENSE"><img src="https://img.shields.io/github/license/gereon-t/trajectopy" /></a>
6
- <a href="https://github.com/astral-sh/ruff"><img alt="Code style: ruff" src="https://img.shields.io/badge/code%20style-ruff-000000.svg"></a>
7
- <br />
8
- <a href="https://github.com/gereon-t/trajectopy"><img src="https://img.shields.io/badge/Windows-0078D6?st&logo=windows&logoColor=white" /></a>
9
- <a href="https://github.com/gereon-t/trajectopy"><img src="https://img.shields.io/badge/Linux-FCC624?logo=linux&logoColor=black" /></a>
10
- <a href="https://github.com/gereon-t/trajectopy"><img src="https://img.shields.io/badge/mac%20os-000000?&logo=apple&logoColor=white" /></a>
11
- <div>
12
- <img src=".images/uni_bonn.svg" height="50" />
13
- <img src=".images/igg.gif" height="50" />
14
- </div>
15
- <h4>Trajectopy is a Python package with an optional graphical user interface for empirical trajectory evaluation. </h4>
16
-
17
- <p align="center">
18
- <img style="border-radius: 10px;" src="https://raw.githubusercontent.com/gereon-t/trajectopy/main/.images/trajectopy_gif_low_quality.gif">
19
- </p>
20
-
21
- </div>
22
-
23
- ## Installation
24
-
25
- **Windows app**: download `Trajectopy-<version>-setup.exe` from the [latest release](https://github.com/gereon-t/trajectopy/releases/latest) and run it. No Python installation or administrator rights are needed; `.traj` files can then be opened by double-click, and the app reports new versions (Help → Check for Updates).
26
-
27
- **Python package** (Python 3.10 or newer):
28
-
29
- | Command | Contents |
30
- | --- | --- |
31
- | `pip install "trajectopy[gui]"` | Python package and GUI (recommended) |
32
- | `pip install "trajectopy[plot]"` | Python package with plotting, without the GUI |
33
- | `pip install trajectopy` | Python package only |
34
-
35
- Loading large trajectory files (millions of poses) is several times faster with the `fast` extra, which can be combined with the others: `pip install "trajectopy[gui,fast]"`.
36
-
37
- ## Quick Start
38
-
39
- ```python
40
- import trajectopy as tpy
41
-
42
- reference = tpy.Trajectory.from_file("./example_data/KITTI_gt.traj")
43
- estimate = tpy.Trajectory.from_file("./example_data/KITTI_ORB.traj")
44
-
45
- ate_result = tpy.ate(trajectory=estimate, other=reference) # aligns the estimate first
46
- print(f"Position ATE: {ate_result.pos_ate:.3f} m")
47
- ```
48
-
49
- Or start the GUI with `trajectopy` (or from the Start menu), drop trajectory files onto it, right-click the ground truth → *Set as Reference*, then right-click another trajectory → *Compare with Reference*.
50
-
51
- ## Documentation
52
-
53
- <a href="https://gereon-t.github.io/trajectopy/" target="_blank">https://gereon-t.github.io/trajectopy/</a>
54
-
55
- ## Key Features
56
-
57
- - __Interactive GUI__: Load, plot, align and compare trajectories without writing code. Every action explains itself in the context menus, and trajectories can be aligned interactively if an automatic alignment is not possible.
58
- - __Alignment__: A spatio-temporal least squares alignment that can be tailored to the application: similarity transformation, leverarm and time shift, each of them optional.
59
- - __Comparison__: Absolute and relative trajectory error (__ATE and RPE__), computed with various pose-matching methods.
60
- - __Data Import/Export__: ASCII files with configurable columns, time formats and coordinate systems (any EPSG code), and ROS bags.
61
- - __Fast, Interactive Visualization__: Powered by [pyqtgraph](https://www.pyqtgraph.org/), the same plots are available in the GUI and in Python scripts, stay fluid for large trajectories, and can be exported to PNG, JPG or SVG. Georeferenced trajectories and ATE results can be exported to Google Earth, colored by speed, height or deviations, on the terrain or at their own heights, with playback.
62
-
63
- ## Web Application (Docker)
64
-
65
- A simple web application is available at [gereon-t/trajectopy-web](https://github.com/gereon-t/trajectopy-web) that allows you to use the core functionality of Trajectopy using Docker.
66
-
67
- ## Citation
68
-
69
- If you use this library for any academic work, please cite our original [paper](https://www.degruyter.com/document/doi/10.1515/jag-2024-0040/html).
70
-
71
- ```bibtex
72
- @article{Tombrink2024,
73
- url = {https://doi.org/10.1515/jag-2024-0040},
74
- title = {Spatio-temporal trajectory alignment for trajectory evaluation},
75
- author = {Gereon Tombrink and Ansgar Dreier and Lasse Klingbeil and Heiner Kuhlmann},
76
- journal = {Journal of Applied Geodesy},
77
- doi = {doi:10.1515/jag-2024-0040},
78
- year = {2024},
79
- codeurl = {https://github.com/gereon-t/trajectopy},
80
- }
81
- ```
1
+ <div align="center">
2
+ <h1>Trajectopy - Trajectory Evaluation in Python</h1>
3
+ <a href="https://github.com/gereon-t/trajectopy/releases"><img src="https://img.shields.io/github/v/release/gereon-t/trajectopy?label=version" /></a>
4
+ <a href="https://www.python.org/downloads/"><img src="https://img.shields.io/badge/python-3.10+-blue.svg" /></a>
5
+ <a href="https://github.com/gereon-t/trajectopy/blob/main/LICENSE"><img src="https://img.shields.io/github/license/gereon-t/trajectopy" /></a>
6
+ <a href="https://github.com/astral-sh/ruff"><img alt="Code style: ruff" src="https://img.shields.io/badge/code%20style-ruff-000000.svg"></a>
7
+ <br />
8
+ <a href="https://github.com/gereon-t/trajectopy"><img src="https://img.shields.io/badge/Windows-0078D6?st&logo=windows&logoColor=white" /></a>
9
+ <a href="https://github.com/gereon-t/trajectopy"><img src="https://img.shields.io/badge/Linux-FCC624?logo=linux&logoColor=black" /></a>
10
+ <a href="https://github.com/gereon-t/trajectopy"><img src="https://img.shields.io/badge/mac%20os-000000?&logo=apple&logoColor=white" /></a>
11
+ <div>
12
+ <img src=".images/uni_bonn.svg" height="50" />
13
+ <img src=".images/igg.gif" height="50" />
14
+ </div>
15
+ <h4>Trajectopy is a Python package with an optional graphical user interface for empirical trajectory evaluation. </h4>
16
+
17
+ <p align="center">
18
+ <img style="border-radius: 10px;" src="https://raw.githubusercontent.com/gereon-t/trajectopy/main/.images/gui_ate.png" alt="Trajectopy GUI showing the ATE of a trajectory in the 3D preview">
19
+ <br />
20
+ <img style="border-radius: 10px;" src="https://raw.githubusercontent.com/gereon-t/trajectopy/main/.images/plot_ate.png" width="49%" alt="ATE plot over time">
21
+ <img style="border-radius: 10px;" src="https://raw.githubusercontent.com/gereon-t/trajectopy/main/.images/plot_ate_map.png" width="49%" alt="ATE map plot">
22
+ </p>
23
+
24
+ </div>
25
+
26
+ ## Installation
27
+
28
+ **Windows app**: download `Trajectopy-<version>-setup.exe` from the [latest release](https://github.com/gereon-t/trajectopy/releases/latest) and run it. No Python installation or administrator rights are needed; `.traj` files can then be opened by double-click, and the app reports new versions (Help → Check for Updates).
29
+
30
+ **Python package** (Python 3.10 or newer):
31
+
32
+ | Command | Contents |
33
+ | --- | --- |
34
+ | `pip install "trajectopy[gui]"` | Python package and GUI (recommended) |
35
+ | `pip install "trajectopy[plot]"` | Python package with plotting, without the GUI |
36
+ | `pip install trajectopy` | Python package only |
37
+
38
+ Loading large trajectory files (millions of poses) is several times faster with the `fast` extra, which can be combined with the others: `pip install "trajectopy[gui,fast]"`.
39
+
40
+ ## Quick Start
41
+
42
+ ```python
43
+ import trajectopy as tpy
44
+
45
+ reference = tpy.Trajectory.from_file("./example_data/KITTI_gt.traj")
46
+ estimate = tpy.Trajectory.from_file("./example_data/KITTI_ORB.traj")
47
+
48
+ ate_result = tpy.ate(trajectory=estimate, other=reference) # aligns the estimate first
49
+ print(f"Position ATE: {ate_result.pos_ate:.3f} m")
50
+ ```
51
+
52
+ Or start the GUI with `trajectopy` (or from the Start menu), drop trajectory files onto it, right-click the ground truth → *Set as Reference*, then right-click another trajectory → *Compare with Reference*.
53
+
54
+ ## Documentation
55
+
56
+ <a href="https://gereon-t.github.io/trajectopy/" target="_blank">https://gereon-t.github.io/trajectopy/</a>
57
+
58
+ ## Key Features
59
+
60
+ - __Interactive GUI__: Load, plot, align and compare trajectories without writing code. Every action explains itself in the context menus, and trajectories can be aligned interactively if an automatic alignment is not possible.
61
+ - __Alignment__: A spatio-temporal least squares alignment that can be tailored to the application: similarity transformation, leverarm and time shift, each of them optional.
62
+ - __Comparison__: Absolute and relative trajectory error (__ATE and RPE__), computed with various pose-matching methods.
63
+ - __Data Import/Export__: ASCII files with configurable columns, time formats and coordinate systems (any EPSG code), and ROS bags.
64
+ - __Fast, Interactive Visualization__: Powered by [pyqtgraph](https://www.pyqtgraph.org/), the same plots are available in the GUI and in Python scripts, stay fluid for large trajectories, and can be exported to PNG, JPG or SVG. Georeferenced trajectories and ATE results can be exported to Google Earth, colored by speed, height or deviations, on the terrain or at their own heights, with playback.
65
+
66
+ ## Web Application (Docker)
67
+
68
+ A simple web application is available at [gereon-t/trajectopy-web](https://github.com/gereon-t/trajectopy-web) that allows you to use the core functionality of Trajectopy using Docker.
69
+
70
+ ## Citation
71
+
72
+ If you use this library for any academic work, please cite our original [paper](https://www.degruyter.com/document/doi/10.1515/jag-2024-0040/html).
73
+
74
+ ```bibtex
75
+ @article{Tombrink2024,
76
+ url = {https://doi.org/10.1515/jag-2024-0040},
77
+ title = {Spatio-temporal trajectory alignment for trajectory evaluation},
78
+ author = {Gereon Tombrink and Ansgar Dreier and Lasse Klingbeil and Heiner Kuhlmann},
79
+ journal = {Journal of Applied Geodesy},
80
+ doi = {doi:10.1515/jag-2024-0040},
81
+ year = {2024},
82
+ codeurl = {https://github.com/gereon-t/trajectopy},
83
+ }
84
+ ```