flightanalysis 0.3.7__tar.gz → 0.3.9__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 (193) hide show
  1. {flightanalysis-0.3.7/flightanalysis.egg-info → flightanalysis-0.3.9}/PKG-INFO +3 -3
  2. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/create_schedules.py +5 -1
  3. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/examples/make_manoeuvre.py +7 -15
  4. flightanalysis-0.3.9/examples/making_elements.py +16 -0
  5. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/analysis/manoeuvre_analysis/basic.py +0 -10
  6. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/analysis/sch_analysis.py +12 -13
  7. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/base/utils.py +2 -0
  8. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/builders/BAeAGlid/manbuilder.py +3 -3
  9. flightanalysis-0.3.9/flightanalysis/builders/IAC/box.py +19 -0
  10. flightanalysis-0.3.9/flightanalysis/builders/IAC/criteria.py +84 -0
  11. flightanalysis-0.3.9/flightanalysis/builders/IAC/downgrades.py +79 -0
  12. flightanalysis-0.3.9/flightanalysis/builders/IAC/manbuilder.py +116 -0
  13. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/builders/elbuilders.py +40 -49
  14. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/builders/f3a/criteria.py +1 -1
  15. flightanalysis-0.3.9/flightanalysis/builders/f3a/downgrades.py +87 -0
  16. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/builders/f3a/manbuilder.py +2 -2
  17. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/builders/imac/manbuilder.py +2 -2
  18. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/builders/manbuilder.py +8 -18
  19. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/builders/schedules/baeaglid_intermediate.py +42 -42
  20. flightanalysis-0.3.9/flightanalysis/builders/schedules/baeapower_advanced2024.py +189 -0
  21. flightanalysis-0.3.9/flightanalysis/builders/schedules/baeapower_test.py +142 -0
  22. flightanalysis-0.3.9/flightanalysis/builders/schedules/baeapower_unlimited2024.py +207 -0
  23. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/builders/schedules/f3a_a25.py +0 -6
  24. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/builders/schedules/f3a_f25.py +1 -8
  25. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/builders/schedules/f3a_p23.py +0 -8
  26. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/builders/schedules/f3a_p25.py +1 -5
  27. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/builders/schedules/f3auk_clubman.py +1 -5
  28. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/builders/schedules/f3auk_intermediate.py +0 -1
  29. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/builders/schedules/imac_sport2024.py +0 -1
  30. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/builders/schedules/imac_unlim2024.py +2 -1
  31. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/builders/schedules/nsrca_inter2024.py +1 -1
  32. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/data/baeaglid_intermediate_schedule.json +1071 -1300
  33. flightanalysis-0.3.9/flightanalysis/data/baeapower_advanced2024_schedule.json +9931 -0
  34. flightanalysis-0.3.9/flightanalysis/data/baeapower_unlimited2024_schedule.json +13939 -0
  35. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/data/f3a_a25_schedule.json +3557 -4142
  36. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/data/f3a_f25_schedule.json +4967 -6431
  37. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/data/f3a_p23_schedule.json +4605 -5566
  38. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/data/f3a_p25_schedule.json +5284 -6431
  39. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/data/f3auk_clubman_schedule.json +2373 -2756
  40. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/data/f3auk_inter_schedule.json +2414 -2744
  41. flightanalysis-0.3.9/flightanalysis/definition/assign_dgs.py +3 -0
  42. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/definition/eldef.py +2 -2
  43. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/definition/mandef.py +27 -6
  44. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/definition/manparm.py +16 -3
  45. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/definition/operations/funopp.py +3 -2
  46. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/definition/operations/mathopp.py +1 -1
  47. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/definition/operations/operation.py +5 -1
  48. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/definition/scheduleinfo.py +2 -1
  49. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/elements/snap.py +5 -4
  50. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/elements/spin.py +1 -1
  51. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/scoring/box/box.py +2 -2
  52. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/scoring/box/rectangular_box.py +4 -4
  53. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/scoring/box/triangular_box.py +1 -1
  54. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/scoring/downgrade.py +28 -18
  55. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/scoring/measurements/attitude.py +2 -2
  56. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/scoring/measurements/curvature.py +2 -2
  57. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/scoring/measurements/measurement.py +1 -1
  58. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/scoring/measurements/roll.py +1 -1
  59. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/scoring/measurements/stall.py +26 -16
  60. flightanalysis-0.3.9/flightanalysis/scoring/measurements/track.py +150 -0
  61. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/scoring/selectors.py +17 -16
  62. {flightanalysis-0.3.7 → flightanalysis-0.3.9/flightanalysis.egg-info}/PKG-INFO +3 -3
  63. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis.egg-info/SOURCES.txt +13 -3
  64. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis.egg-info/requires.txt +2 -2
  65. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/requirements-dev.txt +1 -1
  66. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/requirements.txt +1 -1
  67. flightanalysis-0.3.9/tests/test_box.py +49 -0
  68. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/test_schedule/test_measurement.py +2 -2
  69. flightanalysis-0.3.7/flightanalysis/builders/BAeAGlid/downgrades.py +0 -79
  70. flightanalysis-0.3.7/flightanalysis/builders/f3a/downgrades.py +0 -91
  71. flightanalysis-0.3.7/flightanalysis/data/BAeAGlid_intermediate.json +0 -4157
  72. flightanalysis-0.3.7/flightanalysis/scoring/measurements/track.py +0 -73
  73. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/.github/workflows/publish_pypi.yml +0 -0
  74. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/.gitignore +0 -0
  75. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/LICENSE +0 -0
  76. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/MANIFEST.in +0 -0
  77. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/README.md +0 -0
  78. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/examples/__init__.py +0 -0
  79. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/examples/data/__init__.py +0 -0
  80. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/examples/data/manual_F3A_F23_22_04_28_00000231.json +0 -0
  81. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/examples/data/manual_F3A_P23_22_05_31_00000350.json +0 -0
  82. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/examples/data/manual_F3A_P23_23_08_11_00000094.json +0 -0
  83. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/examples/plot_manoeuvre.py +0 -0
  84. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/examples/scoring/__init__.py +0 -0
  85. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/examples/scoring/judging.py +0 -0
  86. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/examples/scoring/manoeuvres/__init__.py +0 -0
  87. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/examples/scoring/manoeuvres/inter_analysis.py +0 -0
  88. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/examples/scoring/manoeuvres/intra_analysis.py +0 -0
  89. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/examples/scoring/manoeuvres/mans/__init__.py +0 -0
  90. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/examples/scoring/manoeuvres/mans/extract_mans.py +0 -0
  91. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/examples/scoring/manoeuvres/mans/tHat.json +0 -0
  92. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/examples/scoring/manoeuvres/positioning_analysis.py +0 -0
  93. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/__init__.py +0 -0
  94. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/analysis/__init__.py +0 -0
  95. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/analysis/analysis_json.py +0 -0
  96. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/analysis/el_analysis.py +0 -0
  97. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/analysis/manoeuvre_analysis/__init__.py +0 -0
  98. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/analysis/manoeuvre_analysis/alignment.py +0 -0
  99. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/analysis/manoeuvre_analysis/analysis.py +0 -0
  100. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/analysis/manoeuvre_analysis/complete.py +0 -0
  101. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/analysis/manoeuvre_analysis/scored.py +0 -0
  102. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/base/ref_funcs.py +0 -0
  103. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/builders/BAeAGlid/__init__.py +0 -0
  104. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/builders/BAeAGlid/box.py +0 -0
  105. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/builders/BAeAGlid/criteria.py +0 -0
  106. {flightanalysis-0.3.7/flightanalysis/builders → flightanalysis-0.3.9/flightanalysis/builders/IAC}/__init__.py +0 -0
  107. {flightanalysis-0.3.7/flightanalysis/builders/f3a → flightanalysis-0.3.9/flightanalysis/builders}/__init__.py +0 -0
  108. {flightanalysis-0.3.7/flightanalysis/builders/iacpower → flightanalysis-0.3.9/flightanalysis/builders/f3a}/__init__.py +0 -0
  109. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/builders/f3a/box.py +0 -0
  110. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/builders/imac/__init__.py +0 -0
  111. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/builders/schedules/AMA_Intermediate2024.py +0 -0
  112. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/builders/schedules/__init__.py +0 -0
  113. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/data/__init__.py +0 -0
  114. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/definition/__init__.py +0 -0
  115. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/definition/collectors.py +0 -0
  116. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/definition/maninfo/__init__.py +0 -0
  117. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/definition/maninfo/maninfo.py +0 -0
  118. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/definition/maninfo/positioning.py +0 -0
  119. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/definition/manoption.py +0 -0
  120. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/definition/operations/__init__.py +0 -0
  121. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/definition/operations/itemopp.py +0 -0
  122. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/definition/operations/sumopp.py +0 -0
  123. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/definition/scheddef.py +0 -0
  124. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/elements/__init__.py +0 -0
  125. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/elements/element.py +0 -0
  126. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/elements/line.py +0 -0
  127. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/elements/loop.py +0 -0
  128. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/elements/stall_turn.py +0 -0
  129. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/fcjson.py +0 -0
  130. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/manoeuvre.py +0 -0
  131. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/schedule.py +0 -0
  132. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/scoring/__init__.py +0 -0
  133. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/scoring/box/__init__.py +0 -0
  134. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/scoring/criteria/__init__.py +0 -0
  135. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/scoring/criteria/criteria.py +0 -0
  136. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/scoring/criteria/exponential.py +0 -0
  137. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/scoring/criteria/inter/__init__.py +0 -0
  138. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/scoring/criteria/inter/combination.py +0 -0
  139. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/scoring/criteria/inter/comparison.py +0 -0
  140. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/scoring/criteria/intra/__init__.py +0 -0
  141. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/scoring/criteria/intra/bounded.py +0 -0
  142. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/scoring/criteria/intra/continuous.py +0 -0
  143. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/scoring/criteria/intra/peak.py +0 -0
  144. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/scoring/criteria/intra/single.py +0 -0
  145. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/scoring/measurements/__init__.py +0 -0
  146. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/scoring/measurements/positioning.py +0 -0
  147. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/scoring/measurements/speed.py +0 -0
  148. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/scoring/results.py +0 -0
  149. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/scoring/smoothing.py +0 -0
  150. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/scoring/visibility.py +0 -0
  151. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/scripts/collect_scores.py +0 -0
  152. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/scripts/plot_scores.py +0 -0
  153. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis/version.py +0 -0
  154. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis.egg-info/dependency_links.txt +0 -0
  155. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis.egg-info/entry_points.txt +0 -0
  156. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/flightanalysis.egg-info/top_level.txt +0 -0
  157. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/pyproject.toml +0 -0
  158. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/setup.cfg +0 -0
  159. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/EmailedBox.f3a +0 -0
  160. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/__init__.py +0 -0
  161. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/conftest.py +0 -0
  162. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/data/manual_F3A_P23.json +0 -0
  163. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/data/old_json.json +0 -0
  164. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/data/p23.BIN +0 -0
  165. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/data/p23_box.f3a +0 -0
  166. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/data/p23_fc.json +0 -0
  167. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/data/p23_flight.json +0 -0
  168. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/data/scored_fcj.json +0 -0
  169. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/data/unscored_fcj.json +0 -0
  170. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/test_criiteria.py +0 -0
  171. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/test_data.py +0 -0
  172. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/test_fcjscore.py +0 -0
  173. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/test_positioning.py +0 -0
  174. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/test_rfuncs.py +0 -0
  175. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/test_schedule/__init__.py +0 -0
  176. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/test_schedule/test_definition/__init__.py +0 -0
  177. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/test_schedule/test_definition/test_definition_eldef.py +0 -0
  178. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/test_schedule/test_definition/test_definition_manparm.py +0 -0
  179. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/test_schedule/test_definition/test_definition_mpopp.py +0 -0
  180. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/test_schedule/test_definition/test_schedule_definition.py +0 -0
  181. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/test_schedule/test_definition/test_schedule_definition_maninfo.py +0 -0
  182. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/test_schedule/test_element/__init__.py +0 -0
  183. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/test_schedule/test_element/loop_analysis.json +0 -0
  184. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/test_schedule/test_element/p23_th_e0.csv +0 -0
  185. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/test_schedule/test_element/p23_th_e0.json +0 -0
  186. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/test_schedule/test_element/p23_th_e0_template.csv +0 -0
  187. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/test_schedule/test_element/test_schedule_element.py +0 -0
  188. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/test_schedule/test_element/test_schedule_element_line.py +0 -0
  189. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/test_schedule/test_element/test_schedule_element_loop.py +0 -0
  190. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/test_schedule/test_element/test_schedule_element_snap.py +0 -0
  191. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/test_schedule/test_element/test_schedule_element_spin.py +0 -0
  192. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/test_schedule/test_element/test_schedule_element_stallturn.py +0 -0
  193. {flightanalysis-0.3.7 → flightanalysis-0.3.9}/tests/test_schedule/test_schedule_manoeuvre.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flightanalysis
3
- Version: 0.3.7
3
+ Version: 0.3.9
4
4
  Summary: A package for analysing flight data
5
5
  Author-email: Thomas David <thomasdavid0@gmail.com>
6
6
  License: GNU GPL v3
@@ -16,7 +16,7 @@ Requires-Dist: simplejson
16
16
  Requires-Dist: loguru
17
17
  Requires-Dist: joblib
18
18
  Requires-Dist: pfc-geometry>=0.2.11
19
- Requires-Dist: flightdata>=0.2.19
19
+ Requires-Dist: flightdata>=0.2.20
20
20
  Requires-Dist: GitPython
21
21
  Requires-Dist: pyperclip
22
22
  Requires-Dist: packaging
@@ -29,7 +29,7 @@ Requires-Dist: simplejson; extra == "dev"
29
29
  Requires-Dist: loguru; extra == "dev"
30
30
  Requires-Dist: joblib; extra == "dev"
31
31
  Requires-Dist: pfc-geometry>=0.2.11; extra == "dev"
32
- Requires-Dist: flightdata>=0.2.19; extra == "dev"
32
+ Requires-Dist: flightdata>=0.2.20; extra == "dev"
33
33
  Requires-Dist: ardupilot_log_reader>=0.3.3; extra == "dev"
34
34
  Requires-Dist: pymavlink; extra == "dev"
35
35
  Requires-Dist: GitPython; extra == "dev"
@@ -6,6 +6,8 @@ from flightanalysis.builders.schedules.f3a_f25 import f25_def
6
6
  from flightanalysis.builders.schedules.f3auk_clubman import clubman_def as f3auk_club_def
7
7
  from flightanalysis.builders.schedules.f3auk_intermediate import intermediate_def as f3auk_int_def
8
8
  from flightanalysis.builders.schedules.baeaglid_intermediate import sdef as baeaglid_intermediate_def
9
+ from flightanalysis.builders.schedules.baeapower_unlimited2024 import sdef as baeapower_unlimited2024_def
10
+ from flightanalysis.builders.schedules.baeapower_advanced2024 import sdef as baeapower_advanced2024_def
9
11
  sdefs = {
10
12
  'f3a_p23_schedule': p23_def,
11
13
  'f3a_a25_schedule': a25_def,
@@ -14,7 +16,9 @@ sdefs = {
14
16
  #'IMAC_Unlimited2024_schedule': imac_unl2024_def,
15
17
  'f3auk_clubman_schedule': f3auk_club_def,
16
18
  'f3auk_inter_schedule': f3auk_int_def,
17
- "baeaglid_intermediate_schedule": baeaglid_intermediate_def
19
+ "baeaglid_intermediate_schedule": baeaglid_intermediate_def,
20
+ "baeapower_unlimited2024_schedule": baeapower_unlimited2024_def,
21
+ "baeapower_advanced2024_schedule": baeapower_advanced2024_def
18
22
  }
19
23
 
20
24
  def create_all():
@@ -2,30 +2,24 @@ from flightplotting import plotsec, plot_regions
2
2
  from flightplotting.traces import axis_rate_trace
3
3
  from flightanalysis import (
4
4
  ManDef, BoxLocation, Position, Height, Direction,
5
- Orientation, ManInfo, Heading)
5
+ Orientation, ManInfo, Heading, ManParm, Combination)
6
6
  import numpy as np
7
7
  from flightanalysis.builders.manbuilder import r, MBTags, c45, centred
8
8
  from flightanalysis.builders.f3a.manbuilder import f3amb
9
+ from flightanalysis.builders.IAC.manbuilder import iacmb
10
+ from flightanalysis.builders.schedules.baeapower_advanced2024 import sdef
9
11
  from flightdata import NumpyEncoder
10
12
  import plotly.graph_objects as go
11
13
  from json import dumps
12
14
  import geometry as g
13
15
 
14
- mdef: ManDef = f3amb.create(ManInfo(
15
- "half square", "hSqL", k=2, position=Position.END,
16
- start=BoxLocation(Height.TOP, Direction.UPWIND, Orientation.INVERTED),
17
- end=BoxLocation(Height.BTM)
18
- ),[
19
- f3amb.loop(np.pi/2),
20
- f3amb.roll(r(1)),
21
- f3amb.loop(np.pi/2),
22
- ])
16
+ mdef: ManDef = sdef[4]
23
17
 
24
18
  data = mdef.to_dict()
25
19
  print(dumps(data, indent=2, cls=NumpyEncoder))
26
20
  mdef = ManDef.from_dict(data)
27
21
 
28
- it = mdef.guess_itrans(170, Heading.RIGHT)
22
+ it = mdef.guess_itrans(600, Heading.RIGHT)
29
23
 
30
24
  mdef.fit_box(it)
31
25
 
@@ -34,9 +28,7 @@ man = mdef.create()
34
28
  tp = man.create_template(it)
35
29
 
36
30
  fig = plot_regions(tp, 'element', span=5)
37
- fig = plotsec(tp, fig=fig, nmodels=10, scale=5)
38
- #fig.add_traces(boxtrace())
31
+ fig = plotsec(tp, fig=fig, nmodels=10, scale=20)
32
+
39
33
  fig.show()
40
34
 
41
- #fig = go.Figure(data=axis_rate_trace(tp))
42
- #fig.show()
@@ -0,0 +1,16 @@
1
+ from flightanalysis import Loop, Line, Snap, Elements, Manoeuvre
2
+ import numpy as np
3
+ from flightdata import State
4
+ import geometry as g
5
+ from flightplotting import plotsec
6
+
7
+
8
+ man = Manoeuvre(Elements([
9
+ Line('entry_line', 30, 60, 0),
10
+ Loop('loop', 30, np.pi, 50, 0, 0),
11
+ Snap('snap', 30, 60, 1.5*2*np.pi, np.radians(20), np.radians(45), np.radians(45)),
12
+ ]), Line('exit_line', 30, 60, 0))
13
+
14
+
15
+ tp = man.create_template(State.from_transform(g.Transformation()))
16
+ plotsec(tp, nmodels=10).show()
@@ -23,16 +23,6 @@ class Basic(Analysis):
23
23
  def name(self):
24
24
  return self.mdef.uid
25
25
 
26
-
27
- def to_analysis_dict(self) -> dict:
28
- return dict(
29
- id=self.id,
30
- mdef=self.mdef.to_dict(),
31
- flown=self.flown.to_dict(),
32
- entry=self.entry.name if self.entry else None,
33
- exit=self.exit.name if self.exit else None,
34
- )
35
-
36
26
  def run_all(self, optimise_aligment=True, force=False) -> Scored:
37
27
  """Run the analysis to the final stage"""
38
28
  drs = [r._run(True) for r in self.run()]
@@ -26,14 +26,14 @@ class ScheduleAnalysis(Collection):
26
26
 
27
27
  flight = Flight.from_fc_json(data) if flight is None else flight
28
28
 
29
- info = ScheduleInfo(*fcj["parameters"]["schedule"]).fcj_to_pfc()
29
+ info = ScheduleInfo(*data["parameters"]["schedule"]).fcj_to_pfc()
30
30
  sdef = SchedDef.load(info)
31
31
  box = Origin.from_fcjson_parameters(data["parameters"])
32
32
 
33
33
  state = State.from_flight(flight, box)
34
34
 
35
35
  state = state.splitter_labels(
36
- data["mans"], sdef.uids, t0=fcj["data"][0]["time"] / 1e6
36
+ data["mans"], sdef.uids, t0=data["data"][0]["time"] / 1e6
37
37
  )
38
38
 
39
39
  heading = Heading.infer(state.get_manoeuvre(sdef[0].uid)[0].att.bearing()[0])
@@ -44,7 +44,7 @@ class ScheduleAnalysis(Collection):
44
44
 
45
45
  if "fcs_scores" in data and len(data["fcs_scores"]) > 0:
46
46
  st = st.label_els(
47
- list(data["fcs_scores"].values())[-1]["manresults"][i + 1]["els"]
47
+ list(data["fcs_scores"])[-1]["manresults"][i + 1]["els"]
48
48
  )
49
49
 
50
50
  nma = analysis.Basic(
@@ -61,28 +61,27 @@ class ScheduleAnalysis(Collection):
61
61
  if not isinstance(data, dict):
62
62
  data = load(open(data, "r"))
63
63
 
64
- sts = data["states"]["data"]
65
- entry = Heading.infer(State(sts[data["mans"][0]["start"]]).att.bearing()[0])
66
-
67
64
  mas = []
68
65
  for man in data["mans"]:
69
- mdef = ManDef.load(ScheduleInfo(**man["sinfo"]), man["name"])
70
- if not data["isComp"]:
71
- heading = Heading.infer(State(sts[man["start"]]).att.bearing()[0])
72
- else:
73
- heading = mdef.info.start.direction.wind_swap_heading(entry)
66
+ mdef = ManDef.load(ScheduleInfo(**man["schedule"]), man["name"])
74
67
 
75
68
  st = (
76
- State.from_dict(sts[man["start"] : man["stop"]])
69
+ State.from_dict(man["flown"]['data'])
77
70
  .label(manoeuvre=man["name"])
78
71
  .label_els(list(man["history"].values())[-1]["els"])
79
72
  )
80
73
 
74
+ if not data["isComp"] or len(mas)==0:
75
+ heading = Heading.infer(st[0].att.bearing()[0])
76
+ else:
77
+ heading = mdef.info.start.direction.wind_swap_heading(mas[0].entry)
78
+
79
+
81
80
  mas.append(analysis.Basic(man["id"], mdef, st, heading, None))
82
81
 
83
82
  return ScheduleAnalysis(mas)
84
83
 
85
- def create_analysis_dict(self, **kwargs) -> dict:
84
+ def create_analysis_json(self, **kwargs) -> dict:
86
85
  pass
87
86
 
88
87
 
@@ -11,3 +11,5 @@ def combine_args(names: list[str], *args, **kwargs) -> dict:
11
11
  if n in kwargs:
12
12
  _kwargs[n] = kwargs[n]
13
13
  return _kwargs
14
+
15
+
@@ -2,13 +2,13 @@ import numpy as np
2
2
 
3
3
  from flightanalysis.definition import ManParm, ManParms
4
4
  from flightanalysis.builders.BAeAGlid.criteria import Glider
5
- from flightanalysis.builders.BAeAGlid.downgrades import dggrps
5
+ from flightanalysis.builders.IAC.downgrades import dg_applicator
6
6
  from flightanalysis.builders.BAeAGlid.box import box
7
7
  from ..elbuilders import line, loopmaker, rollmaker, spin, stallturn
8
8
  from ..manbuilder import ManBuilder
9
9
 
10
10
 
11
- f3amb = ManBuilder(
11
+ glidmb = ManBuilder(
12
12
  ManParms(
13
13
  [
14
14
  ManParm("speed", Glider.inter.speed, 45.0, "m/s"),
@@ -104,7 +104,7 @@ f3amb = ManBuilder(
104
104
  ),
105
105
  ),
106
106
  ),
107
- dggrps,
107
+ dg_applicator,
108
108
  Glider.inter,
109
109
  box
110
110
  )
@@ -0,0 +1,19 @@
1
+ from flightanalysis.scoring.box import RectangularBox
2
+ from flightanalysis.builders.IAC.criteria import IAC
3
+ from flightanalysis.scoring.box import BoxDG
4
+
5
+
6
+ unlimited_box = RectangularBox(
7
+ width=1000,
8
+ height=1000,
9
+ depth=1000,
10
+ distance=200,
11
+ floor=100,
12
+ bound_dgs=dict(
13
+ bottom=BoxDG(IAC.intra.btmbox, "m"),
14
+ **{
15
+ direc: BoxDG(IAC.intra.box, "m")
16
+ for direc in ["top", "left", "right", "front", "back"]
17
+ }
18
+ ),
19
+ )
@@ -0,0 +1,84 @@
1
+ from flightanalysis.scoring.criteria import (
2
+ Single,
3
+ Limit,
4
+ Peak, Trough,
5
+ Exponential,
6
+ Continuous,
7
+ ContinuousValue,
8
+ Bounded,
9
+ Comparison,
10
+ free,
11
+ )
12
+ import numpy as np
13
+
14
+
15
+ class IACIntra:
16
+ angle = Single(Exponential.fit_points(np.radians([30, 90]), [3, 9], 10))
17
+ end_track = Single(Exponential.fit_points(np.radians([30, 90]), [3, 9], 10))
18
+ end_roll = Single(Exponential.fit_points(np.radians([30, 90]), [2, 9], 10))
19
+ track = Continuous(Exponential.fit_points(np.radians([30, 90]), [3, 9], 10))
20
+ roll = Continuous(Exponential.fit_points(np.radians([30, 90]), [2, 9], 10))
21
+
22
+ loopshape = Continuous(Exponential.fit_points([1.5, 3], [0.5, 1], 3))
23
+ loopsmoothness = ContinuousValue(Exponential.fit_points([1, 2], [0.25, 0.7], 3))
24
+
25
+ rollrate = Continuous(Exponential.fit_points([1, 3], [0.2, 0.6], 3))
26
+ rollsmoothness = ContinuousValue(Exponential.fit_points([1, 2], [0.25, 0.7], 3))
27
+
28
+ autorotation_rate = Continuous(Exponential.fit_points([1, 3], [0.02, 0.06], 0.5))
29
+ stallturn_speed = Limit(Exponential.fit_points([10, 20], [0.5, 1.0], 1), 15)
30
+ stallturn_width = Peak(Exponential.fit_points([20, 50], [0.25, 1.25], 10), 10)
31
+ break_pitch_rate = Bounded(Exponential(10, 1, 0.1), 0.6, -0.6)
32
+ peak_break_pitch_rate = Trough(Exponential(10, 1, 6), limit=0.6)
33
+
34
+ autorotation_alpha = Bounded(Exponential(20, 1, 10), np.radians(7.5), -np.radians(7.5))
35
+ pos_autorotation_alpha = Bounded(Exponential(20, 1, 10), np.radians(7.5))
36
+ neg_autorotation_alpha = Bounded(Exponential(20, 1, 10), None, -np.radians(7.5))
37
+ drop_pitch_rate = Bounded(Exponential(10, 1, 0.1), 0.2)
38
+ peak_drop_pitch_rate = Trough(Exponential(10, 1, 10), 0.2)
39
+ recovery_roll_rate = Bounded(Exponential(1, 1, 0.01), np.pi * 2, -np.pi*2)
40
+ box = Bounded(Exponential.fit_points([50, 100], [0.5, 1], 10), 0, None)
41
+ btmbox = Bounded(Exponential.fit_points([50, 100], [5, 10], 10), 0, None)
42
+
43
+ class IACInter:
44
+ radius = Comparison(Exponential.fit_points([1, 2], [1, 2], 2))
45
+ speed = Comparison(free)
46
+ roll_rate = Comparison(Exponential.fit_points([1, 2], [0.25, 0.5], 1))
47
+ length = Comparison(Exponential.fit_points([1, 2], [1, 2], 2))
48
+ free = Comparison(free)
49
+
50
+
51
+ class IAC:
52
+ inter = IACInter
53
+ intra = IACIntra
54
+
55
+
56
+ def plot_lookup(lu, v0=0, v1=10):
57
+ import plotly.express as px
58
+
59
+ x = np.linspace(v0, v1, 30)
60
+ px.line(x=x, y=lu(x)).show()
61
+
62
+
63
+ def plot_all(crits):
64
+ from plotly.subplots import make_subplots
65
+ import plotly.graph_objects as go
66
+
67
+ crits = {k: getattr(crits, k) for k in dir(crits) if not k.startswith("__")}
68
+ # names = [f'{k}_{cr}' for k, crit in crits.items() for cr in crit.keys()]
69
+
70
+ nplots = len(crits)
71
+ ncols = 7
72
+ fig = make_subplots(
73
+ int(np.ceil(nplots / ncols)), ncols, subplot_titles=list(crits.keys())
74
+ )
75
+
76
+ for i, crit in enumerate(crits.values()):
77
+ fig.add_trace(
78
+ crit.lookup.trace(showlegend=False), row=1 + i // ncols, col=1 + i % ncols
79
+ )
80
+ fig.show()
81
+
82
+
83
+ if __name__ == "__main__":
84
+ plot_all(IACIntra)
@@ -0,0 +1,79 @@
1
+ from flightanalysis.scoring.measurements import measures, Measurement
2
+ from flightanalysis.scoring.downgrade import DownGrades, dg, DowgradeGroups
3
+ from flightanalysis.scoring.selectors import selectors as sels
4
+ from flightanalysis.scoring.smoothing import smoothers as sms
5
+ from flightanalysis.builders.IAC.criteria import IAC
6
+ import numpy as np
7
+ from flightdata import State
8
+ from flightanalysis.elements import Loop, Line, Snap, Spin, StallTurn
9
+ import geometry as g
10
+
11
+ #LINES
12
+ # track Y Track Z
13
+ # if vel is horizontal: heading attitude altitude track
14
+ # if vel is not horizontal: RF Y attitude RF Z attitude
15
+
16
+ #LOOPS
17
+ #if axial direction vertical: axial track
18
+ #if axial direction not vertical: axial attitude
19
+ # if exit vel horizontal: exit radial track
20
+ # if exit vel not horizontal: exit radial attitude
21
+
22
+
23
+
24
+ def dg_applicator(el: Loop | Line | Snap | Spin | StallTurn, tp: State, last_kind: object, next_kind: object ):
25
+ dgs = []
26
+
27
+ if el.__class__ is Line:
28
+ if abs(el.roll) > 0:
29
+ dgs.append(dg("roll_angle", measures.roll_angle(), None, sels.last(), IAC.intra.end_roll))
30
+ else:
31
+ dgs.append(dg("roll_angle", measures.roll_angle(), sms.lowpass(cutoff=1, order=5), None, IAC.intra.roll))
32
+ if max(tp.pos.z) - min(tp.pos.z) < 1:
33
+ dgs.append(dg("heading", measures.heading_track(), sms.lowpass(cutoff=2, order=5), None, IAC.intra.track))
34
+ dgs.append(dg("climb", measures.climb_track(), sms.lowpass(cutoff=2, order=5), None, IAC.intra.track))
35
+ else:
36
+ dgs.append(dg("pitch", measures.pitch_attitude(), None, None, IAC.intra.track))
37
+ dgs.append(dg("yaw", measures.yaw_attitude(), None, None, IAC.intra.track))
38
+ elif el.__class__ is Loop:
39
+ dgs.append(dg("roundness", measures.curvature_proj(), sms.curvature_lowpass(order=5), None, IAC.intra.loopshape))
40
+ dgs.append(dg("smoothness", measures.absolute_curvature_proj(), sms.lowpass(cutoff=2, order=5), sels.borders(tb=0.25), IAC.intra.loopsmoothness))
41
+ isCircle = g.point.is_parallel(Measurement.get_axial_direction(tp), g.PZ())
42
+ if isCircle:
43
+ dgs.append(dg("axial_track", measures.loop_axial_track(), sms.lowpass(cutoff=2, order=5), None, IAC.intra.track))
44
+ else:
45
+ dgs.append(dg("axial_attitude", measures.loop_axial_attitude(), sms.lowpass(cutoff=2, order=5), None, IAC.intra.track))
46
+ if g.point.is_parallel(tp.vel[-1], g.PX()) and not isCircle:
47
+ dgs.append(dg("radial_track", measures.loop_radial_track(), sms.lowpass(cutoff=2, order=5), sels.last(), IAC.intra.end_track))
48
+ else:
49
+ dgs.append(dg("radial_attitude", measures.loop_radial_attitude(), sms.lowpass(cutoff=2, order=5), sels.last(), IAC.intra.end_track))
50
+ if el.roll == 0:
51
+ dgs.append(dg("roll_angle", measures.roll_angle_p(), sms.lowpass(cutoff=1, order=5), None, IAC.intra.roll))
52
+ else:
53
+ dgs.append(dg("roll_angle", measures.roll_angle_p(), None, sels.last(), IAC.intra.roll))
54
+ elif el.__class__ is StallTurn:
55
+ dgs.append(dg("width", measures.stallturn_width(), None, None, IAC.intra.stallturn_width))
56
+ dgs.append(dg("speed", measures.vertical_speed(), None, sels.first_and_last(), IAC.intra.stallturn_speed))
57
+ dgs.append(dg("roll_angle", measures.roll_angle_z(), None, None, IAC.intra.roll))
58
+ dgs.append(dg("end_yaw", measures.yaw_attitude(), None, sels.last(), IAC.intra.end_track))
59
+ elif el.__class__ is Spin:
60
+ dgs.append(dg("turns", measures.roll_angle_y(), None, sels.last(), IAC.intra.end_roll))
61
+ dgs.append(dg("alpha", measures.spin_alpha_iac(), None, sels.before_recovery(rot=np.pi/4), IAC.intra.pos_autorotation_alpha))
62
+ dgs.append(dg("drop_pitch_rate", measures.pitch_down_rate(), None, sels.autorot_break(rot=np.radians(15)), IAC.intra.drop_pitch_rate ))
63
+ dgs.append(dg("peak_drop_pitch_rate", measures.pitch_down_rate(), None, sels.autorot_break(rot=np.radians(15)), IAC.intra.peak_drop_pitch_rate ))
64
+ dgs.append(dg("exit_y_track", measures.loop_radial_track(), None, sels.last(), IAC.intra.end_track))
65
+ dgs.append(dg("recovery_rate_delta", measures.delta_p(), None, sels.autorot_recovery(rot=np.pi/24), IAC.intra.recovery_roll_rate ))
66
+ elif el.__class__ is Snap:
67
+ dgs.append(dg("turns", measures.roll_angle_y(), None, sels.last(), IAC.intra.end_roll))
68
+ dgs.append(dg("recovery_rate_delta", measures.delta_p(), None, sels.autorot_recovery(rot=np.pi/24), IAC.intra.recovery_roll_rate ))
69
+ dgs.append(dg("alpha", measures.alpha_iac(), None, sels.autorotation(brot=np.pi/4, rrot=np.pi/2), IAC.intra.autorotation_alpha))
70
+ if last_kind is not Snap:
71
+ dgs.append(dg("peak_break_pitch_rate", measures.pitch_rate(), None, sels.autorot_break(rot=np.pi/4), IAC.intra.peak_break_pitch_rate ))
72
+ dgs.append(dg("break_pitch_rate", measures.pitch_rate(), None, sels.autorot_break(rot=np.pi/4), IAC.intra.break_pitch_rate ))
73
+ if (el.__class__ is Line or el.__class__ is Loop ):
74
+ if el.roll > 0:
75
+ dgs.append(dg("roll_rate", measures.roll_rate(), sms.rollrate_lowpass(order=5), None, IAC.intra.rollrate))
76
+ dgs.append(dg("roll_smoothness", measures.abs_roll_rate(), sms.lowpass(cutoff=2, order=5), None, IAC.intra.rollsmoothness))
77
+
78
+
79
+ return DownGrades(dgs)
@@ -0,0 +1,116 @@
1
+ import numpy as np
2
+
3
+ from flightanalysis.definition import ManParm, ManParms
4
+ from flightanalysis.builders.IAC.criteria import IAC
5
+ from flightanalysis.builders.IAC.downgrades import dg_applicator
6
+ from flightanalysis.builders.IAC.box import unlimited_box
7
+ from ..elbuilders import line, loopmaker, rollmaker, spin, stallturn
8
+ from ..manbuilder import ManBuilder
9
+
10
+
11
+ _snap_rate = 3*np.pi
12
+ _roll_rate = np.pi
13
+ _spin_rate = np.pi / 2
14
+ _speed = 60
15
+ _break_angle = np.radians(20)
16
+
17
+ iacmb = ManBuilder(
18
+ ManParms(
19
+ [
20
+ ManParm("speed", IAC.inter.speed, _speed, "m/s"),
21
+ ManParm("loop_radius", IAC.inter.radius, 70.0, "m"),
22
+ ManParm("line_length", IAC.inter.length, 180.0, "m"),
23
+ ManParm("point_length", IAC.inter.length, 20.0, "m"),
24
+ ManParm("partial_roll_rate", IAC.inter.roll_rate, _roll_rate, "rad/s"),
25
+ ManParm("full_roll_rate", IAC.inter.roll_rate, _roll_rate, "rad/s"),
26
+ ManParm("snap_rate", IAC.inter.roll_rate, _snap_rate, "rad/s"),
27
+ ManParm("stallturn_rate", IAC.inter.roll_rate, np.pi/4, "rad/s"),
28
+ ManParm("spin_rate", IAC.inter.roll_rate, _spin_rate, "rad/s"),
29
+ ManParm("ee_pause", IAC.inter.length, 20.0, "m"),
30
+ ]
31
+ ),
32
+ dict(
33
+ line=dict(
34
+ func=line,
35
+ args=[],
36
+ kwargs=dict(
37
+ speed=_speed,
38
+ length=180,
39
+ ),
40
+ ),
41
+ loop=dict(
42
+ func=loopmaker,
43
+ args=["angle"],
44
+ kwargs=dict(
45
+ speed=40,
46
+ radius=70,
47
+ rolls=0.0,
48
+ ke=False,
49
+ rollangle=None,
50
+ rolltypes="roll",
51
+ reversible=True,
52
+ pause_length="point_length",
53
+ break_angle=_break_angle,
54
+ snap_rate=_snap_rate,
55
+ break_roll=np.pi / 4,
56
+ recovery_roll=np.pi / 2,
57
+ mode="imac",
58
+ ),
59
+ ),
60
+ roll=dict(
61
+ func=rollmaker,
62
+ args=["rolls"],
63
+ kwargs=dict(
64
+ padded=True,
65
+ reversible=True,
66
+ speed=40,
67
+ line_length=180,
68
+ partial_rate=_roll_rate,
69
+ full_rate=_roll_rate,
70
+ pause_length="point_length",
71
+ mode="imac",
72
+ break_angle=_break_angle,
73
+ snap_rate=_snap_rate,
74
+ break_roll=np.pi / 4,
75
+ recovery_roll=np.pi / 2,
76
+ rolltypes="roll",
77
+ ),
78
+ ),
79
+ stallturn=dict(
80
+ func=stallturn, args=[], kwargs=dict(speed=0.0, yaw_rate="stallturn_rate")
81
+ ),
82
+ snap=dict(
83
+ func=rollmaker,
84
+ args=["rolls"],
85
+ kwargs=dict(
86
+ padded=True,
87
+ reversible=True,
88
+ speed=40,
89
+ line_length=180,
90
+ partial_rate=_roll_rate,
91
+ full_rate=_roll_rate,
92
+ pause_length="point_length",
93
+ mode="imac",
94
+ break_angle=np.radians(20),
95
+ snap_rate=_snap_rate,
96
+ break_roll=np.pi / 4,
97
+ recovery_roll=np.pi / 2,
98
+ rolltypes="snap",
99
+ ),
100
+ ),
101
+ spin=dict(
102
+ func=spin,
103
+ args=["turns"],
104
+ kwargs=dict(
105
+ speed=10,
106
+ break_angle=np.radians(30),
107
+ rate="spin_rate",
108
+ nd_turns=np.pi / 4,
109
+ recovery_turns=np.pi / 2,
110
+ ),
111
+ ),
112
+ ),
113
+ dg_applicator,
114
+ IAC.inter,
115
+ unlimited_box
116
+ )