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.
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/PKG-INFO +3 -3
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/analysis/manoeuvre_analysis/alignment.py +8 -1
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/analysis/manoeuvre_analysis/scored.py +6 -1
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/analysis/sch_analysis.py +44 -50
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/results.py +48 -3
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis.egg-info/PKG-INFO +3 -3
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis.egg-info/requires.txt +2 -2
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/requirements-dev.txt +1 -1
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/requirements.txt +1 -1
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/.github/workflows/publish_pypi.yml +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/.gitignore +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/LICENSE +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/MANIFEST.in +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/README.md +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/__init__.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/data/__init__.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/data/manual_F3A_F23_22_04_28_00000231.json +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/data/manual_F3A_P23_22_05_31_00000350.json +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/data/manual_F3A_P23_23_08_11_00000094.json +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/scoring/__init__.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/scoring/f3a_criteria_maker.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/scoring/judging.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/scoring/manoeuvres/__init__.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/scoring/manoeuvres/inter_analysis.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/scoring/manoeuvres/intra_analysis.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/scoring/manoeuvres/mans/__init__.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/scoring/manoeuvres/mans/extract_mans.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/scoring/manoeuvres/mans/tHat.json +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/scoring/manoeuvres/positioning_analysis.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/__init__.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/analysis/__init__.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/analysis/el_analysis.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/analysis/manoeuvre_analysis/__init__.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/analysis/manoeuvre_analysis/analysis.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/analysis/manoeuvre_analysis/basic.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/analysis/manoeuvre_analysis/complete.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/data/IMAC_Unlimited2024_schedule.json +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/data/__init__.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/data/f3a_a25_schedule.json +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/data/f3a_f25_schedule.json +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/data/f3a_p23_schedule.json +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/data/f3a_p25_schedule.json +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/data/f3auk_clubman_schedule.json +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/data/f3auk_inter_schedule.json +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/__init__.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/builders/__init__.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/builders/elbuilders.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/builders/lines.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/builders/manbuilder.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/collectors.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/eldef.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/mandef.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/maninfo.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/manoption.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/manparm.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/operations/__init__.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/operations/funopp.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/operations/itemopp.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/operations/mathopp.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/operations/operation.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/scheddef.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/scheduleinfo.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/elements/__init__.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/elements/autorotation.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/elements/element.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/elements/line.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/elements/loop.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/elements/nose_drop.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/elements/pitch_break.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/elements/recovery.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/elements/stall_turn.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/manoeuvre.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/schedule.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/__init__.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/criteria/__init__.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/criteria/criteria.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/criteria/exponential.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/criteria/f3a_criteria.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/criteria/inter/__init__.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/criteria/inter/combination.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/criteria/inter/comparison.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/criteria/intra/__init__.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/criteria/intra/bounded.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/criteria/intra/continuous.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/criteria/intra/single.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/downgrade.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/measurement.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scripts/batch_analyse.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scripts/collect_scores.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scripts/plot_scores.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis.egg-info/SOURCES.txt +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis.egg-info/dependency_links.txt +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis.egg-info/entry_points.txt +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis.egg-info/top_level.txt +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/pyproject.toml +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/scripts/AMA_Intermediate2024.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/scripts/__init__.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/scripts/create_all.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/scripts/f3a_a25.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/scripts/f3a_f25.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/scripts/f3a_p23.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/scripts/f3a_p25.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/scripts/f3auk_clubman.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/scripts/f3auk_intermediate.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/scripts/imac_sport2024.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/scripts/imac_unlim2024.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/scripts/make_manoeuvre.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/scripts/nsrca_inter2024.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/setup.cfg +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/EmailedBox.f3a +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/__init__.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/conftest.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/data/manual_F3A_P23.json +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/data/p23.BIN +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/data/p23_box.f3a +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/data/p23_fc.json +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/data/p23_flight.json +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_criiteria.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_data.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/__init__.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_definition/__init__.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_definition/test_definition_eldef.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_definition/test_definition_manparm.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_definition/test_definition_mpopp.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_definition/test_schedule_definition.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_definition/test_schedule_definition_maninfo.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_element/__init__.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_element/loop_analysis.json +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_element/p23_th_e0.csv +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_element/p23_th_e0.json +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_element/p23_th_e0_template.csv +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_element/test_schedule_element.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_element/test_schedule_element_line.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_element/test_schedule_element_loop.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_element/test_schedule_element_nose_drop.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_element/test_schedule_element_pitch_break.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_element/test_schedule_element_recovery.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_element/test_schedule_element_stallturn.py +0 -0
- {flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_measurement.py +0 -0
- {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.
|
|
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.
|
|
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.
|
|
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
|
|
@@ -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
|
|
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
|
-
|
|
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
|
-
|
|
43
|
-
[
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
|
185
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
20
|
+
flightdata>=0.2.14
|
|
21
21
|
ardupilot_log_reader>=0.3.1
|
|
22
22
|
pymavlink
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/data/manual_F3A_F23_22_04_28_00000231.json
RENAMED
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/data/manual_F3A_P23_22_05_31_00000350.json
RENAMED
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/data/manual_F3A_P23_23_08_11_00000094.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/scoring/manoeuvres/inter_analysis.py
RENAMED
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/scoring/manoeuvres/intra_analysis.py
RENAMED
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/scoring/manoeuvres/mans/__init__.py
RENAMED
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/scoring/manoeuvres/mans/extract_mans.py
RENAMED
|
File without changes
|
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/examples/scoring/manoeuvres/positioning_analysis.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/analysis/manoeuvre_analysis/basic.py
RENAMED
|
File without changes
|
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/data/IMAC_Unlimited2024_schedule.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/data/f3auk_clubman_schedule.json
RENAMED
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/data/f3auk_inter_schedule.json
RENAMED
|
File without changes
|
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/builders/__init__.py
RENAMED
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/builders/elbuilders.py
RENAMED
|
File without changes
|
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/builders/manbuilder.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/operations/__init__.py
RENAMED
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/operations/funopp.py
RENAMED
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/operations/itemopp.py
RENAMED
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/operations/mathopp.py
RENAMED
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/definition/operations/operation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/criteria/exponential.py
RENAMED
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/criteria/f3a_criteria.py
RENAMED
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/criteria/inter/__init__.py
RENAMED
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/criteria/inter/combination.py
RENAMED
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/criteria/inter/comparison.py
RENAMED
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/criteria/intra/__init__.py
RENAMED
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/criteria/intra/bounded.py
RENAMED
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/criteria/intra/continuous.py
RENAMED
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis/scoring/criteria/intra/single.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/flightanalysis.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_definition/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_element/__init__.py
RENAMED
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_element/loop_analysis.json
RENAMED
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_element/p23_th_e0.csv
RENAMED
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_element/p23_th_e0.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{flightanalysis-0.2.14 → flightanalysis-0.2.15}/tests/test_schedule/test_schedule_manoeuvre.py
RENAMED
|
File without changes
|