flightanalysis 0.2.14__tar.gz → 0.2.15__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 (140) hide show
  1. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/PKG-INFO +3 -3
  2. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/analysis/manoeuvre_analysis/alignment.py +8 -1
  3. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/analysis/manoeuvre_analysis/scored.py +6 -1
  4. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/analysis/sch_analysis.py +44 -50
  5. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/results.py +48 -3
  6. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis.egg-info/PKG-INFO +3 -3
  7. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis.egg-info/requires.txt +2 -2
  8. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/requirements-dev.txt +1 -1
  9. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/requirements.txt +1 -1
  10. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/.github/workflows/publish_pypi.yml +0 -0
  11. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/.gitignore +0 -0
  12. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/LICENSE +0 -0
  13. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/MANIFEST.in +0 -0
  14. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/README.md +0 -0
  15. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/__init__.py +0 -0
  16. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/data/__init__.py +0 -0
  17. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/data/manual_F3A_F23_22_04_28_00000231.json +0 -0
  18. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/data/manual_F3A_P23_22_05_31_00000350.json +0 -0
  19. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/data/manual_F3A_P23_23_08_11_00000094.json +0 -0
  20. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/scoring/__init__.py +0 -0
  21. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/scoring/f3a_criteria_maker.py +0 -0
  22. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/scoring/judging.py +0 -0
  23. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/scoring/manoeuvres/__init__.py +0 -0
  24. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/scoring/manoeuvres/inter_analysis.py +0 -0
  25. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/scoring/manoeuvres/intra_analysis.py +0 -0
  26. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/scoring/manoeuvres/mans/__init__.py +0 -0
  27. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/scoring/manoeuvres/mans/extract_mans.py +0 -0
  28. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/scoring/manoeuvres/mans/tHat.json +0 -0
  29. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/scoring/manoeuvres/positioning_analysis.py +0 -0
  30. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/__init__.py +0 -0
  31. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/analysis/__init__.py +0 -0
  32. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/analysis/el_analysis.py +0 -0
  33. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/analysis/manoeuvre_analysis/__init__.py +0 -0
  34. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/analysis/manoeuvre_analysis/analysis.py +0 -0
  35. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/analysis/manoeuvre_analysis/basic.py +0 -0
  36. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/analysis/manoeuvre_analysis/complete.py +0 -0
  37. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/data/IMAC_Unlimited2024_schedule.json +0 -0
  38. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/data/__init__.py +0 -0
  39. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/data/f3a_a25_schedule.json +0 -0
  40. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/data/f3a_f25_schedule.json +0 -0
  41. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/data/f3a_p23_schedule.json +0 -0
  42. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/data/f3a_p25_schedule.json +0 -0
  43. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/data/f3auk_clubman_schedule.json +0 -0
  44. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/data/f3auk_inter_schedule.json +0 -0
  45. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/__init__.py +0 -0
  46. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/builders/__init__.py +0 -0
  47. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/builders/elbuilders.py +0 -0
  48. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/builders/lines.py +0 -0
  49. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/builders/manbuilder.py +0 -0
  50. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/collectors.py +0 -0
  51. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/eldef.py +0 -0
  52. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/mandef.py +0 -0
  53. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/maninfo.py +0 -0
  54. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/manoption.py +0 -0
  55. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/manparm.py +0 -0
  56. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/operations/__init__.py +0 -0
  57. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/operations/funopp.py +0 -0
  58. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/operations/itemopp.py +0 -0
  59. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/operations/mathopp.py +0 -0
  60. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/operations/operation.py +0 -0
  61. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/scheddef.py +0 -0
  62. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/scheduleinfo.py +0 -0
  63. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/elements/__init__.py +0 -0
  64. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/elements/autorotation.py +0 -0
  65. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/elements/element.py +0 -0
  66. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/elements/line.py +0 -0
  67. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/elements/loop.py +0 -0
  68. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/elements/nose_drop.py +0 -0
  69. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/elements/pitch_break.py +0 -0
  70. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/elements/recovery.py +0 -0
  71. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/elements/stall_turn.py +0 -0
  72. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/manoeuvre.py +0 -0
  73. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/schedule.py +0 -0
  74. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/__init__.py +0 -0
  75. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/criteria/__init__.py +0 -0
  76. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/criteria/criteria.py +0 -0
  77. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/criteria/exponential.py +0 -0
  78. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/criteria/f3a_criteria.py +0 -0
  79. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/criteria/inter/__init__.py +0 -0
  80. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/criteria/inter/combination.py +0 -0
  81. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/criteria/inter/comparison.py +0 -0
  82. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/criteria/intra/__init__.py +0 -0
  83. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/criteria/intra/bounded.py +0 -0
  84. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/criteria/intra/continuous.py +0 -0
  85. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/criteria/intra/single.py +0 -0
  86. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/downgrade.py +0 -0
  87. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/measurement.py +0 -0
  88. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scripts/batch_analyse.py +0 -0
  89. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scripts/collect_scores.py +0 -0
  90. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scripts/plot_scores.py +0 -0
  91. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis.egg-info/SOURCES.txt +0 -0
  92. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis.egg-info/dependency_links.txt +0 -0
  93. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis.egg-info/entry_points.txt +0 -0
  94. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis.egg-info/top_level.txt +0 -0
  95. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/pyproject.toml +0 -0
  96. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/scripts/AMA_Intermediate2024.py +0 -0
  97. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/scripts/__init__.py +0 -0
  98. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/scripts/create_all.py +0 -0
  99. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/scripts/f3a_a25.py +0 -0
  100. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/scripts/f3a_f25.py +0 -0
  101. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/scripts/f3a_p23.py +0 -0
  102. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/scripts/f3a_p25.py +0 -0
  103. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/scripts/f3auk_clubman.py +0 -0
  104. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/scripts/f3auk_intermediate.py +0 -0
  105. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/scripts/imac_sport2024.py +0 -0
  106. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/scripts/imac_unlim2024.py +0 -0
  107. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/scripts/make_manoeuvre.py +0 -0
  108. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/scripts/nsrca_inter2024.py +0 -0
  109. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/setup.cfg +0 -0
  110. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/EmailedBox.f3a +0 -0
  111. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/__init__.py +0 -0
  112. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/conftest.py +0 -0
  113. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/data/manual_F3A_P23.json +0 -0
  114. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/data/p23.BIN +0 -0
  115. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/data/p23_box.f3a +0 -0
  116. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/data/p23_fc.json +0 -0
  117. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/data/p23_flight.json +0 -0
  118. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_criiteria.py +0 -0
  119. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_data.py +0 -0
  120. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/__init__.py +0 -0
  121. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_definition/__init__.py +0 -0
  122. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_definition/test_definition_eldef.py +0 -0
  123. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_definition/test_definition_manparm.py +0 -0
  124. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_definition/test_definition_mpopp.py +0 -0
  125. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_definition/test_schedule_definition.py +0 -0
  126. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_definition/test_schedule_definition_maninfo.py +0 -0
  127. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_element/__init__.py +0 -0
  128. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_element/loop_analysis.json +0 -0
  129. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_element/p23_th_e0.csv +0 -0
  130. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_element/p23_th_e0.json +0 -0
  131. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_element/p23_th_e0_template.csv +0 -0
  132. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_element/test_schedule_element.py +0 -0
  133. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_element/test_schedule_element_line.py +0 -0
  134. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_element/test_schedule_element_loop.py +0 -0
  135. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_element/test_schedule_element_nose_drop.py +0 -0
  136. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_element/test_schedule_element_pitch_break.py +0 -0
  137. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_element/test_schedule_element_recovery.py +0 -0
  138. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_element/test_schedule_element_stallturn.py +0 -0
  139. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_measurement.py +0 -0
  140. {flightanalysis-0.2.14 → flightanalysis-0.2.15}/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.2.14
3
+ Version: 0.2.15
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.6
19
- Requires-Dist: flightdata>=0.2.13
19
+ Requires-Dist: flightdata>=0.2.14
20
20
  Provides-Extra: dev
21
21
  Requires-Dist: numpy; extra == "dev"
22
22
  Requires-Dist: pandas; extra == "dev"
@@ -26,7 +26,7 @@ Requires-Dist: simplejson; extra == "dev"
26
26
  Requires-Dist: loguru; extra == "dev"
27
27
  Requires-Dist: joblib; extra == "dev"
28
28
  Requires-Dist: pfc-geometry>=0.2.6; extra == "dev"
29
- Requires-Dist: flightdata>=0.2.13; extra == "dev"
29
+ Requires-Dist: flightdata>=0.2.14; extra == "dev"
30
30
  Requires-Dist: ardupilot_log_reader>=0.3.1; extra == "dev"
31
31
  Requires-Dist: pymavlink; extra == "dev"
32
32
 
@@ -92,6 +92,13 @@ class Alignment(Basic):
92
92
  **data
93
93
  )
94
94
  return data
95
-
95
+
96
+ def fcj_results(self):
97
+ df = self.flown.label_ranges('element').iloc[:,:3]
98
+ df.columns = ['name', 'start', 'stop']
99
+ return dict(
100
+ els=df.to_dict('records')
101
+ )
102
+
96
103
  from .complete import Complete # noqa: E402
97
104
  from .scored import Scored # noqa: E402
@@ -42,4 +42,9 @@ class Scored(Complete):
42
42
  )
43
43
 
44
44
  return data
45
-
45
+
46
+ def fcj_results(self):
47
+ return dict(
48
+ **super().fcj_results(),
49
+ results=self.scores.fcj_results()
50
+ )
@@ -1,6 +1,6 @@
1
1
  from __future__ import annotations
2
2
  from typing import Self, Union
3
- from json import load
3
+ from json import load, dump
4
4
  from flightdata import Flight, State, Origin, Collection
5
5
  from flightanalysis.definition import SchedDef, ScheduleInfo
6
6
  from . import manoeuvre_analysis as analysis
@@ -9,7 +9,7 @@ from joblib import Parallel, delayed
9
9
  import os
10
10
  import pandas as pd
11
11
  from importlib.metadata import version
12
- import geometry as g
12
+ from packaging import version as pkgversion
13
13
 
14
14
 
15
15
  class ScheduleAnalysis(Collection):
@@ -22,10 +22,8 @@ class ScheduleAnalysis(Collection):
22
22
 
23
23
  @staticmethod
24
24
  def from_fcj(file: Union[str, dict], info: ScheduleInfo=None) -> ScheduleAnalysis:
25
- if isinstance(file, str):
26
- data = load(open(file, 'r'))
27
- else:
28
- data = file
25
+ data = load(open(file, 'r')) if isinstance(file, str) else file
26
+
29
27
  flight = Flight.from_fc_json(data)
30
28
 
31
29
  if info is None:
@@ -33,25 +31,50 @@ class ScheduleAnalysis(Collection):
33
31
 
34
32
  sdef = SchedDef.load(info)
35
33
  box = Origin.from_fcjson_parmameters(data["parameters"])
36
- state = State.from_flight(flight, box).splitter_labels(
37
- data["mans"],
38
- sdef.uids
39
- )
34
+ state = State.from_flight(flight, box).splitter_labels(data["mans"],sdef.uids)
40
35
  direction = -state.get_manoeuvre(1)[0].direction()[0]
41
36
 
42
- return ScheduleAnalysis(
43
- [analysis.Basic(
44
- i,
45
- mdef,
46
- state.get_manoeuvre(mdef.uid),
47
- direction
48
- ) for i, mdef in enumerate(sdef)],
49
- info
50
- )
37
+ if 'fcs_scores' in data:
38
+ versions = [pkgversion.parse(res['fa_version']) for res in data['fcs_scores']]
39
+ ilatest = versions.index(max(versions))
40
+
41
+ mas = []
42
+ for i, mdef in enumerate(sdef):
43
+ st = state.get_manoeuvre(mdef.uid)
44
+
45
+ if 'fcs_scores' in data and len(data['fcs_scores']) > 0:
46
+ df = pd.DataFrame(data['fcs_scores'][ilatest]['manresults'][i+1]['els'])
47
+ st = st.splitter_labels(df.to_dict('records'), target_col='element')
48
+
49
+ mas.append(analysis.Basic(i, mdef, st, direction).proceed())
50
+
51
+ return ScheduleAnalysis(mas,info)
51
52
 
53
+ def append_scores_to_fcj(self, file: Union[str, dict]) -> dict:
54
+ data = load(open(file, 'r')) if isinstance(file, str) else file
55
+
56
+ new_results = dict(
57
+ fa_version = version('flightanalysis'),
58
+ manresults = [None] + \
59
+ [man.fcj_results() if hasattr(man, 'fcj_results') else None for man in self]
60
+ )
61
+
62
+ if 'fcs_scores' not in data:
63
+ data['fcs_scores'] = []
64
+
65
+ for res in data['fcs_scores']:
66
+ if res['fa_version'] == new_results['fa_version']:
67
+ res['manresults'] = new_results['manresults']
68
+ break
69
+ else:
70
+ data['fcs_scores'].append(new_results)
71
+
72
+ return data
73
+
74
+
52
75
  def run_all(self) -> Self:
53
76
  def parse_analyse_serialise(pad):
54
- res = analysis.Basic.from_dict(pad).run_all()
77
+ res = analysis.parse_dict(pad).run_all()
55
78
  logger.info(f'Completed {res.name}')
56
79
  return res.to_dict()
57
80
 
@@ -73,23 +96,6 @@ class ScheduleAnalysis(Collection):
73
96
  madicts = Parallel(n_jobs=os.cpu_count())(delayed(parse_analyse_serialise)(mad) for mad in inmadicts)
74
97
  return ScheduleAnalysis([analysis.Scored.from_dict(mad) for mad in madicts], self.sinfo)
75
98
 
76
- @staticmethod
77
- def from_fcscore(file: Union[str, dict], fallback=True) -> ScheduleAnalysis:
78
- if isinstance(file, str) or isinstance(file, os.PathLike):
79
- data = load(open(file, 'r'))
80
- else:
81
- data = file
82
- sinfo = ScheduleInfo(**data['sinfo'])
83
- sdef = SchedDef.load(sinfo)
84
-
85
- mas = []
86
- for mdef in sdef:
87
- mas.append(analysis.Scored.from_dict(
88
- data['data'][mdef.info.short_name],
89
- fallback
90
- ))
91
-
92
- return ScheduleAnalysis(mas, sinfo)
93
99
 
94
100
  def scores(self):
95
101
  scores = {}
@@ -101,16 +107,4 @@ class ScheduleAnalysis(Collection):
101
107
  def summarydf(self):
102
108
  return pd.DataFrame([ma.scores.summary() if hasattr(ma, 'scores') else {} for ma in self])
103
109
 
104
- def to_fcscore(self, name: str) -> dict:
105
- total, scores = self.scores()
106
-
107
- odata = dict(
108
- name = name,
109
- client_version = 'Py',
110
- server_version = version('flightanalysis'),
111
- sinfo = self.sinfo.__dict__,
112
- score = total,
113
- manscores = scores,
114
- data = self.to_dict()
115
- )
116
- return odata
110
+
@@ -8,6 +8,16 @@ from flightanalysis.scoring.measurement import Measurement
8
8
  from dataclasses import dataclass
9
9
 
10
10
 
11
+ def ease(val, factor=3):
12
+ '''factor == 3 for hard / no easement'''
13
+ b = 1.3 - factor*0.1
14
+ m = 6 / 6**b
15
+ return m * val**b
16
+
17
+ def trunc(val):
18
+ return np.floor(val * 2) / 2
19
+
20
+
11
21
  @dataclass
12
22
  class Result:
13
23
  """
@@ -25,6 +35,10 @@ class Result:
25
35
  def total(self):
26
36
  return float(sum(self.dgs))
27
37
 
38
+ def score(self, difficulty=3, truncate: None | str=None):
39
+ res = sum(ease(self.dgs, difficulty))
40
+ return trunc(res) if truncate=='result' else res
41
+
28
42
  def to_dict(self):
29
43
  return dict(
30
44
  name = self.name,
@@ -99,6 +113,10 @@ class Results(Collection):
99
113
  VType = Result
100
114
  uid="name"
101
115
 
116
+ def score(self, difficulty=3, truncate: None | str=False):
117
+ res = sum([r.score(difficulty, truncate) for r in self])
118
+ return trunc(res) if truncate=='results' else res
119
+
102
120
  def __init__(self, name, *args, **kwargs):
103
121
  super().__init__(*args, **kwargs)
104
122
  self.name = name
@@ -143,6 +161,9 @@ class ElementsResults(Collection):
143
161
  VType=Results
144
162
  uid="name"
145
163
 
164
+ def score(self, difficulty=3, truncate=False):
165
+ return sum([r.score(difficulty, truncate) for r in self])
166
+
146
167
  @property
147
168
  def total(self):
148
169
  return sum([r.total for r in self])
@@ -181,8 +202,19 @@ class ManoeuvreResults:
181
202
  def summary(self):
182
203
  return {k: v.total for k, v in self.__dict__.items() if v is not None}
183
204
 
184
- def score(self):
185
- return max(0, 10 - sum([v for v in self.summary().values()]))
205
+ def score_summary(self, difficulty, truncate):
206
+ intra=self.intra.score(difficulty, 'results' if truncate else None)
207
+ inter=self.inter.score(difficulty, 'result' if truncate else None)
208
+ positioning=self.positioning.score(difficulty, 'result' if truncate else None)
209
+ return dict(
210
+ intra=intra,
211
+ inter=inter,
212
+ positioning=positioning,
213
+ total=10 - intra - inter - positioning
214
+ )
215
+
216
+ def score(self, difficulty=3, truncate: bool=False):
217
+ return self.score_summary(difficulty, truncate)['total']
186
218
 
187
219
  def to_dict(self):
188
220
  return dict(
@@ -199,4 +231,17 @@ class ManoeuvreResults:
199
231
  Results.from_dict(data['inter']),
200
232
  ElementsResults.from_dict(data['intra']),
201
233
  Results.from_dict(data['positioning']),
202
- )
234
+ )
235
+
236
+ def fcj_results(self):
237
+ res = []
238
+ for diff in [1,2,3]:
239
+ for trunc in [False, True]:
240
+ res.append(dict(
241
+ score=self.score_summary(diff, trunc),
242
+ properties=dict(
243
+ difficulty=diff,
244
+ truncate=trunc
245
+ )
246
+ ))
247
+ return res
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flightanalysis
3
- Version: 0.2.14
3
+ Version: 0.2.15
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.6
19
- Requires-Dist: flightdata>=0.2.13
19
+ Requires-Dist: flightdata>=0.2.14
20
20
  Provides-Extra: dev
21
21
  Requires-Dist: numpy; extra == "dev"
22
22
  Requires-Dist: pandas; extra == "dev"
@@ -26,7 +26,7 @@ Requires-Dist: simplejson; extra == "dev"
26
26
  Requires-Dist: loguru; extra == "dev"
27
27
  Requires-Dist: joblib; extra == "dev"
28
28
  Requires-Dist: pfc-geometry>=0.2.6; extra == "dev"
29
- Requires-Dist: flightdata>=0.2.13; extra == "dev"
29
+ Requires-Dist: flightdata>=0.2.14; extra == "dev"
30
30
  Requires-Dist: ardupilot_log_reader>=0.3.1; extra == "dev"
31
31
  Requires-Dist: pymavlink; extra == "dev"
32
32
 
@@ -6,7 +6,7 @@ simplejson
6
6
  loguru
7
7
  joblib
8
8
  pfc-geometry>=0.2.6
9
- flightdata>=0.2.13
9
+ flightdata>=0.2.14
10
10
 
11
11
  [dev]
12
12
  numpy
@@ -17,6 +17,6 @@ simplejson
17
17
  loguru
18
18
  joblib
19
19
  pfc-geometry>=0.2.6
20
- flightdata>=0.2.13
20
+ flightdata>=0.2.14
21
21
  ardupilot_log_reader>=0.3.1
22
22
  pymavlink
@@ -6,6 +6,6 @@ simplejson
6
6
  loguru
7
7
  joblib
8
8
  pfc-geometry>=0.2.6
9
- flightdata>=0.2.13
9
+ flightdata>=0.2.14
10
10
  ardupilot_log_reader>=0.3.1
11
11
  pymavlink
@@ -6,4 +6,4 @@ simplejson
6
6
  loguru
7
7
  joblib
8
8
  pfc-geometry>=0.2.6
9
- flightdata>=0.2.13
9
+ flightdata>=0.2.14
File without changes