flightanalysis 0.1.22__tar.gz → 0.2.1__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 (128) hide show
  1. {flightanalysis-0.1.22/flightanalysis.egg-info → flightanalysis-0.2.1}/PKG-INFO +1 -1
  2. flightanalysis-0.2.1/examples/schedules_construction/__init__.py +0 -0
  3. flightanalysis-0.2.1/examples/schedules_construction/create_all.py +21 -0
  4. flightanalysis-0.2.1/examples/schedules_construction/f3a_a25.py +247 -0
  5. flightanalysis-0.2.1/examples/schedules_construction/f3a_f25.py +265 -0
  6. flightanalysis-0.2.1/examples/schedules_construction/f3a_p23.py +231 -0
  7. flightanalysis-0.2.1/examples/schedules_construction/f3a_p25.py +222 -0
  8. flightanalysis-0.2.1/examples/schedules_construction/f3auk_Intermediate.py +201 -0
  9. flightanalysis-0.2.1/examples/schedules_construction/f3auk_clubman.py +207 -0
  10. flightanalysis-0.2.1/examples/schedules_construction/imac_unlimited_2024.py +139 -0
  11. flightanalysis-0.2.1/examples/schedules_construction/make_manoeuvre.py +56 -0
  12. flightanalysis-0.2.1/examples/scoring/__init__.py +28 -0
  13. flightanalysis-0.2.1/examples/scoring/analysis_reprocess.py +12 -0
  14. flightanalysis-0.2.1/examples/scoring/f3a_criteria_maker.py +41 -0
  15. flightanalysis-0.2.1/examples/scoring/judging.py +50 -0
  16. flightanalysis-0.2.1/examples/scoring/manoeuvres/__init__.py +0 -0
  17. flightanalysis-0.2.1/examples/scoring/manoeuvres/inter_analysis.py +19 -0
  18. flightanalysis-0.2.1/examples/scoring/manoeuvres/intra_analysis.py +26 -0
  19. flightanalysis-0.2.1/examples/scoring/manoeuvres/mans/__init__.py +0 -0
  20. flightanalysis-0.2.1/examples/scoring/manoeuvres/mans/extract_mans.py +28 -0
  21. flightanalysis-0.2.1/examples/scoring/manoeuvres/positioning_analysis.py +11 -0
  22. flightanalysis-0.2.1/examples/scoring/split_optimisation.py +50 -0
  23. flightanalysis-0.2.1/flightanalysis/__init__.py +6 -0
  24. flightanalysis-0.2.1/flightanalysis/analysis/__init__.py +3 -0
  25. flightanalysis-0.2.1/flightanalysis/analysis/el_analysis.py +33 -0
  26. flightanalysis-0.2.1/flightanalysis/analysis/man_analysis.py +275 -0
  27. flightanalysis-0.2.1/flightanalysis/analysis/sch_analysis.py +48 -0
  28. flightanalysis-0.2.1/flightanalysis/data/IMAC_Unlimited2024_schedule.json +2885 -0
  29. flightanalysis-0.2.1/flightanalysis/data/f3a_a25_schedule.json +2674 -0
  30. flightanalysis-0.1.22/flightanalysis/data/f25_schedule.json → flightanalysis-0.2.1/flightanalysis/data/f3a_f25_schedule.json +332 -300
  31. flightanalysis-0.1.22/flightanalysis/data/p23_schedule.json → flightanalysis-0.2.1/flightanalysis/data/f3a_p23_schedule.json +190 -271
  32. flightanalysis-0.1.22/flightanalysis/data/p25_schedule.json → flightanalysis-0.2.1/flightanalysis/data/f3a_p25_schedule.json +254 -336
  33. flightanalysis-0.2.1/flightanalysis/data/f3auk_clubman_schedule.json +2011 -0
  34. flightanalysis-0.2.1/flightanalysis/data/f3auk_inter_schedule.json +1806 -0
  35. flightanalysis-0.2.1/flightanalysis/definition/__init__.py +15 -0
  36. flightanalysis-0.2.1/flightanalysis/definition/builders/__init__.py +0 -0
  37. flightanalysis-0.2.1/flightanalysis/definition/builders/elbuilders.py +315 -0
  38. flightanalysis-0.2.1/flightanalysis/definition/builders/lines.py +0 -0
  39. flightanalysis-0.2.1/flightanalysis/definition/builders/manbuilder.py +302 -0
  40. {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/definition/collectors.py +1 -2
  41. flightanalysis-0.1.22/flightanalysis/schedule/definition/element_definition.py → flightanalysis-0.2.1/flightanalysis/definition/eldef.py +31 -11
  42. flightanalysis-0.1.22/flightanalysis/schedule/definition/manoeuvre_definition.py → flightanalysis-0.2.1/flightanalysis/definition/mandef.py +38 -39
  43. flightanalysis-0.1.22/flightanalysis/schedule/definition/manoeuvre_info.py → flightanalysis-0.2.1/flightanalysis/definition/maninfo.py +31 -11
  44. flightanalysis-0.1.22/flightanalysis/schedule/definition/manoeuvre_parameters.py → flightanalysis-0.2.1/flightanalysis/definition/manparm.py +51 -38
  45. {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/definition/operations/funopp.py +1 -1
  46. {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/definition/operations/itemopp.py +3 -6
  47. {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/definition/operations/mathopp.py +2 -5
  48. {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/definition/operations/operation.py +7 -6
  49. flightanalysis-0.1.22/flightanalysis/schedule/definition/sched_def.py → flightanalysis-0.2.1/flightanalysis/definition/scheddef.py +62 -19
  50. {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/elements/__init__.py +0 -3
  51. {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/elements/autorotation.py +8 -6
  52. {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/elements/element.py +62 -11
  53. {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/elements/line.py +3 -12
  54. {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/elements/loop.py +37 -20
  55. {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/elements/nose_drop.py +12 -7
  56. {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/elements/pitch_break.py +18 -11
  57. {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/elements/recovery.py +9 -9
  58. {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/elements/stall_turn.py +17 -11
  59. {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/manoeuvre.py +22 -8
  60. {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/schedule.py +1 -6
  61. {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/scoring/__init__.py +1 -1
  62. {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/scoring/criteria/__init__.py +2 -1
  63. {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/scoring/criteria/criteria.py +19 -5
  64. flightanalysis-0.2.1/flightanalysis/scoring/criteria/f3a_criteria.py +38 -0
  65. flightanalysis-0.2.1/flightanalysis/scoring/criteria/inter/__init__.py +0 -0
  66. {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/scoring/criteria/inter/combination.py +13 -5
  67. {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/scoring/criteria/inter/comparison.py +3 -5
  68. flightanalysis-0.2.1/flightanalysis/scoring/criteria/intra/__init__.py +0 -0
  69. flightanalysis-0.2.1/flightanalysis/scoring/criteria/intra/bounded.py +68 -0
  70. flightanalysis-0.2.1/flightanalysis/scoring/criteria/intra/continuous.py +89 -0
  71. flightanalysis-0.2.1/flightanalysis/scoring/criteria/intra/single.py +38 -0
  72. flightanalysis-0.2.1/flightanalysis/scoring/downgrade.py +46 -0
  73. flightanalysis-0.2.1/flightanalysis/scoring/measurement.py +232 -0
  74. {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/scoring/results.py +35 -7
  75. {flightanalysis-0.1.22 → flightanalysis-0.2.1/flightanalysis.egg-info}/PKG-INFO +1 -1
  76. flightanalysis-0.2.1/flightanalysis.egg-info/SOURCES.txt +89 -0
  77. {flightanalysis-0.1.22 → flightanalysis-0.2.1}/flightanalysis.egg-info/top_level.txt +1 -0
  78. {flightanalysis-0.1.22 → flightanalysis-0.2.1}/setup.cfg +4 -1
  79. flightanalysis-0.2.1/tests/test_criiteria.py +156 -0
  80. flightanalysis-0.1.22/flightanalysis/__init__.py +0 -8
  81. flightanalysis-0.1.22/flightanalysis/analysis/__init__.py +0 -2
  82. flightanalysis-0.1.22/flightanalysis/analysis/aircraft_analysis.py +0 -131
  83. flightanalysis-0.1.22/flightanalysis/analysis/manoeuvre_analysis.py +0 -332
  84. flightanalysis-0.1.22/flightanalysis/base/__init__.py +0 -5
  85. flightanalysis-0.1.22/flightanalysis/base/collection.py +0 -102
  86. flightanalysis-0.1.22/flightanalysis/base/constructs.py +0 -68
  87. flightanalysis-0.1.22/flightanalysis/base/numpy_encoder.py +0 -9
  88. flightanalysis-0.1.22/flightanalysis/base/table.py +0 -351
  89. flightanalysis-0.1.22/flightanalysis/controls/__init__.py +0 -1
  90. flightanalysis-0.1.22/flightanalysis/controls/controls.py +0 -66
  91. flightanalysis-0.1.22/flightanalysis/environment/__init__.py +0 -5
  92. flightanalysis-0.1.22/flightanalysis/environment/environment.py +0 -49
  93. flightanalysis-0.1.22/flightanalysis/environment/wind.py +0 -128
  94. flightanalysis-0.1.22/flightanalysis/flightline/__init__.py +0 -1
  95. flightanalysis-0.1.22/flightanalysis/flightline/box.py +0 -127
  96. flightanalysis-0.1.22/flightanalysis/model/__init__.py +0 -3
  97. flightanalysis-0.1.22/flightanalysis/model/coefficients.py +0 -24
  98. flightanalysis-0.1.22/flightanalysis/model/constants.py +0 -19
  99. flightanalysis-0.1.22/flightanalysis/model/flow.py +0 -47
  100. flightanalysis-0.1.22/flightanalysis/model/model.py +0 -28
  101. flightanalysis-0.1.22/flightanalysis/schedule/__init__.py +0 -4
  102. flightanalysis-0.1.22/flightanalysis/schedule/definition/__init__.py +0 -23
  103. flightanalysis-0.1.22/flightanalysis/schedule/definition/element_builders.py +0 -184
  104. flightanalysis-0.1.22/flightanalysis/schedule/definition/manoeuvre_builder.py +0 -169
  105. flightanalysis-0.1.22/flightanalysis/schedule/scoring/criteria/f3a_criteria.py +0 -34
  106. flightanalysis-0.1.22/flightanalysis/schedule/scoring/criteria/intra/continuous.py +0 -58
  107. flightanalysis-0.1.22/flightanalysis/schedule/scoring/criteria/intra/single.py +0 -24
  108. flightanalysis-0.1.22/flightanalysis/schedule/scoring/criteria/single.py +0 -26
  109. flightanalysis-0.1.22/flightanalysis/schedule/scoring/downgrade.py +0 -108
  110. flightanalysis-0.1.22/flightanalysis/schedule/scoring/measurement.py +0 -160
  111. flightanalysis-0.1.22/flightanalysis/state/__init__.py +0 -3
  112. flightanalysis-0.1.22/flightanalysis/state/state.py +0 -538
  113. flightanalysis-0.1.22/flightanalysis.egg-info/SOURCES.txt +0 -82
  114. flightanalysis-0.1.22/tests/test_controls.py +0 -18
  115. flightanalysis-0.1.22/tests/test_criiteria.py +0 -61
  116. flightanalysis-0.1.22/tests/test_fc_json.py +0 -72
  117. flightanalysis-0.1.22/tests/test_flightline.py +0 -209
  118. {flightanalysis-0.1.22 → flightanalysis-0.2.1}/LICENSE +0 -0
  119. {flightanalysis-0.1.22 → flightanalysis-0.2.1}/MANIFEST.in +0 -0
  120. {flightanalysis-0.1.22 → flightanalysis-0.2.1}/README.md +0 -0
  121. {flightanalysis-0.1.22/flightanalysis/schedule/scoring/criteria/inter → flightanalysis-0.2.1/examples}/__init__.py +0 -0
  122. {flightanalysis-0.1.22/flightanalysis/schedule/scoring/criteria/intra → flightanalysis-0.2.1/examples/data}/__init__.py +0 -0
  123. {flightanalysis-0.1.22 → flightanalysis-0.2.1}/flightanalysis/data/__init__.py +0 -0
  124. {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/definition/operations/__init__.py +0 -0
  125. {flightanalysis-0.1.22/flightanalysis/schedule → flightanalysis-0.2.1/flightanalysis}/scoring/criteria/exponential.py +0 -0
  126. {flightanalysis-0.1.22 → flightanalysis-0.2.1}/flightanalysis.egg-info/dependency_links.txt +0 -0
  127. {flightanalysis-0.1.22 → flightanalysis-0.2.1}/setup.py +0 -0
  128. {flightanalysis-0.1.22 → flightanalysis-0.2.1}/tests/test_data.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: flightanalysis
3
- Version: 0.1.22
3
+ Version: 0.2.1
4
4
  Summary: A package for analysing flight data
5
5
  Home-page: https://github.com/PyFlightCoach/FlightAnalysis
6
6
  Author: Thomas David
@@ -0,0 +1,21 @@
1
+ from .f3a_p23 import p23_def
2
+ from .f3a_a25 import a25_def
3
+ from .f3a_p25 import p25_def
4
+ from .f3a_f25 import f25_def
5
+ from .imac_unlimited_2024 import sdef as imac_unl2024_def
6
+ from .f3auk_clubman import clubman_def as f3auk_club_def
7
+ from .f3auk_Intermediate import intermediate_def as f3auk_int_def
8
+
9
+ sdefs = {
10
+ 'f3a_p23_schedule': p23_def,
11
+ 'f3a_a25_schedule': a25_def,
12
+ 'f3a_p25_schedule': p25_def,
13
+ 'f3a_f25_schedule': f25_def,
14
+ 'IMAC_Unlimited2024_schedule': imac_unl2024_def,
15
+ 'f3auk_clubman_schedule': f3auk_club_def,
16
+ 'f3auk_inter_schedule': f3auk_int_def
17
+ }
18
+
19
+
20
+ for sdef in sdefs:
21
+ sdef.to_json("flightanalysis/data/p23_schedule.json")
@@ -0,0 +1,247 @@
1
+ '''Author Vince Beesley 18/11/2023'''
2
+
3
+ from flightanalysis import *
4
+ import numpy as np
5
+
6
+ c45 = np.cos(np.radians(45))
7
+
8
+ a25_def = SchedDef([
9
+ f3amb.create(ManInfo
10
+ (
11
+ "Triangle", "trgle", k=3, position=Position.CENTRE,
12
+ start=BoxLocation(Height.TOP, Direction.UPWIND, Orientation.UPRIGHT),
13
+ end=BoxLocation(Height.TOP)
14
+ ),[
15
+ MBTags.CENTRE,
16
+ f3amb.loop(-np.pi/4),
17
+ f3amb.line(),
18
+ f3amb.loop(-np.pi*3/4),
19
+ centred(f3amb.roll(2*np.pi, line_length=str(2 * c45 * f3amb.mps.line_length))),
20
+ f3amb.loop(-np.pi*3/4),
21
+ f3amb.line(),
22
+ f3amb.loop(-np.pi/4),
23
+ MBTags.CENTRE
24
+ ],line_length=150),
25
+
26
+
27
+ f3amb.create(ManInfo(
28
+ "half square", "hSqL", k=2, position=Position.END,
29
+ start=BoxLocation(Height.TOP, Direction.UPWIND, Orientation.UPRIGHT),
30
+ end=BoxLocation(Height.BTM)
31
+ ),[
32
+ f3amb.loop(-np.pi/2),
33
+ f3amb.roll(np.pi),
34
+ f3amb.loop(np.pi/2)]),
35
+
36
+
37
+ f3amb.create(
38
+ ManInfo(
39
+ "Square on Corner", "sqL", k=4, position=Position.CENTRE,
40
+ start=BoxLocation(Height.BTM, Direction.DOWNWIND, Orientation.UPRIGHT),
41
+ end=BoxLocation(Height.BTM)
42
+ ),
43
+ [
44
+ MBTags.CENTRE,
45
+ f3amb.loop(np.pi/4),
46
+ f3amb.line(),
47
+ f3amb.loop(np.pi/2),
48
+ f3amb.roll("1/2"),
49
+ centred(f3amb.loop(-np.pi/2)),
50
+ f3amb.roll("1/2"),
51
+ f3amb.loop(np.pi/2),
52
+ f3amb.line(),
53
+ f3amb.loop(np.pi/4),
54
+ MBTags.CENTRE],
55
+ line_length=80),
56
+
57
+
58
+ f3amb.create(ManInfo(
59
+ "Figure P", "fig9", k=3, position=Position.END,
60
+ start=BoxLocation(Height.BTM, Direction.DOWNWIND, Orientation.UPRIGHT),
61
+ end=BoxLocation(Height.MID)
62
+ ),[
63
+ f3amb.loop(np.pi/2),
64
+ f3amb.roll("1/2"),
65
+ f3amb.loop(np.pi*3/2)]),
66
+
67
+ f3amb.create(ManInfo(
68
+ "4 Quarter Rolls", "rollC", k=4, position=Position.CENTRE,
69
+ start=BoxLocation(Height.MID, Direction.UPWIND, Orientation.UPRIGHT),
70
+ end=BoxLocation(Height.MID)
71
+ ),[
72
+ centred(f3amb.roll('4x4', padded=False)),
73
+ ]),
74
+
75
+ f3amb.create(ManInfo(
76
+ "Stall Turn", "stall", k=3, position=Position.END,
77
+ start=BoxLocation(Height.MID, Direction.UPWIND, Orientation.UPRIGHT),
78
+ end=BoxLocation(Height.BTM)
79
+ ),[
80
+ f3amb.loop(np.pi/2),
81
+ f3amb.line(length=50),
82
+ f3amb.stallturn(),
83
+ f3amb.roll("1/2", line_length=180),
84
+ f3amb.loop(-np.pi/2)]),
85
+
86
+ f3amb.create(ManInfo(
87
+ "Double Immelman", "dImm", k=4, position=Position.CENTRE,
88
+ start=BoxLocation(Height.BTM, Direction.DOWNWIND, Orientation.INVERTED),
89
+ end=BoxLocation(Height.BTM)
90
+ ),[
91
+ f3amb.roll("1/2", padded=False),
92
+ f3amb.loop(np.pi),
93
+ f3amb.roll("1/2" , padded=False),
94
+ f3amb.line(length=80),
95
+ f3amb.loop(-np.pi),
96
+ f3amb.roll("1/2" , padded=False),
97
+ ],
98
+ loop_radius=100),
99
+
100
+
101
+ f3amb.create(ManInfo(
102
+ "Humpty", "hB", k=2, position=Position.END,
103
+ start=BoxLocation(Height.BTM, Direction.DOWNWIND, Orientation.UPRIGHT),
104
+ end=BoxLocation(Height.BTM)
105
+ ),[
106
+ f3amb.loop(np.pi/2),
107
+ f3amb.line(),
108
+ f3amb.loop(-np.pi),
109
+ f3amb.roll("1/2"),
110
+ f3amb.loop(np.pi/2)]),
111
+
112
+
113
+ f3amb.create(ManInfo(
114
+ "Outside Loop", "loop", k=3, position=Position.CENTRE,
115
+ start=BoxLocation(Height.BTM, Direction.UPWIND, Orientation.UPRIGHT),
116
+ end=BoxLocation(Height.BTM)
117
+ ),[
118
+ f3amb.roll("1/2", padded=False),
119
+ f3amb.line(length='ee_pause'),
120
+ MBTags.CENTRE,
121
+ f3amb.loop(-2*np.pi),
122
+ MBTags.CENTRE,
123
+ f3amb.line(length='ee_pause'),
124
+ f3amb.roll("1/2", padded=False),
125
+ ],
126
+ loop_radius=100,
127
+
128
+ ),
129
+
130
+ f3amb.create(ManInfo(
131
+ "Half Square on Corner", "hSqL2", k=2, position=Position.END,
132
+ start=BoxLocation(Height.BTM, Direction.UPWIND, Orientation.UPRIGHT),
133
+ end=BoxLocation(Height.TOP)
134
+ ),[
135
+ f3amb.loop(np.pi/4),
136
+ f3amb.line(),
137
+ f3amb.loop(np.pi/2),
138
+ f3amb.line(),
139
+ f3amb.loop(np.pi/4),
140
+ ], line_length=130*c45),
141
+
142
+
143
+ f3amb.create(ManInfo(
144
+ "Cloverleaf", "hClov", k=5, position=Position.CENTRE,
145
+ start=BoxLocation(Height.TOP, Direction.DOWNWIND, Orientation.INVERTED),
146
+ end=BoxLocation(Height.TOP)
147
+ ),[
148
+ f3amb.loop(np.pi/2),
149
+ MBTags.CENTRE,
150
+ f3amb.line(),
151
+ f3amb.loop(3*np.pi/2),
152
+ centred(f3amb.line(length=str(f3amb.mps.loop_radius * 2))),
153
+ f3amb.loop(np.pi*3/2),
154
+ MBTags.CENTRE,
155
+ f3amb.line(),
156
+ f3amb.loop(np.pi/2),
157
+ ]),
158
+
159
+ f3amb.create(ManInfo(
160
+ "Figure Et", "rEt", k=4, position=Position.END,
161
+ start=BoxLocation(Height.TOP, Direction.DOWNWIND, Orientation.INVERTED),
162
+ end=BoxLocation(Height.TOP)
163
+ ),[
164
+ f3amb.loop(np.pi/4),
165
+ f3amb.line(length=str(f3amb.mps.line_length / c45)),
166
+ f3amb.loop(np.pi*5/4),
167
+ f3amb.line(),
168
+ f3amb.loop(-np.pi/2),
169
+ ]),
170
+
171
+ f3amb.create(ManInfo(
172
+ "Spin", "iSpin", k=3, position=Position.CENTRE,
173
+ start=BoxLocation(Height.TOP, Direction.UPWIND, Orientation.UPRIGHT),
174
+ end=BoxLocation(Height.BTM),
175
+ ),[
176
+ MBTags.CENTRE,
177
+ f3amb.spin(r(2)),
178
+ f3amb.line(length=165),
179
+ f3amb.loop(np.pi/2),
180
+
181
+ ]),
182
+
183
+
184
+ f3amb.create(ManInfo(
185
+ "Top Hat", "tHat", k=3, position=Position.END,
186
+ start=BoxLocation(Height.BTM, Direction.UPWIND, Orientation.UPRIGHT),
187
+ end=BoxLocation(Height.BTM)
188
+ ),[
189
+ f3amb.loop(np.pi/2),
190
+ f3amb.roll("1/2"),
191
+ f3amb.loop(np.pi/2),
192
+ f3amb.line(length=50),
193
+ f3amb.loop(np.pi/2),
194
+ f3amb.line(),
195
+ f3amb.loop(np.pi/2)
196
+ ]),
197
+
198
+ f3amb.create(ManInfo(
199
+ "Figure Z", "Z", k=4, position=Position.CENTRE,
200
+ start=BoxLocation(Height.BTM, Direction.DOWNWIND, Orientation.UPRIGHT),
201
+ end=BoxLocation(Height.TOP)
202
+ ),[
203
+ f3amb.loop(3*np.pi/4),
204
+ centred(f3amb.roll(np.pi)),
205
+ f3amb.loop(3*np.pi/4),
206
+ ], loop_radius=40,
207
+ ),
208
+
209
+ f3amb.create(ManInfo(
210
+ "Comet", "Com", k=3, position=Position.END,
211
+ start=BoxLocation(Height.TOP, Direction.DOWNWIND, Orientation.INVERTED),
212
+ end=BoxLocation(Height.BTM)
213
+ ),[
214
+ f3amb.loop(np.pi/4),
215
+ f3amb.line(),
216
+ f3amb.loop(-3*np.pi/2),
217
+ f3amb.line(),
218
+ f3amb.loop(np.pi/4),
219
+ ], line_length=(1/c45 + 1) * 50 + 30 - (1/c45 - 2) * 50, loop_radius=50),
220
+
221
+ f3amb.create(ManInfo(
222
+ "Figure S", "figS", k=5, position=Position.CENTRE,
223
+ start=BoxLocation(Height.BTM, Direction.UPWIND, Orientation.UPRIGHT),
224
+ end=BoxLocation(Height.TOP)
225
+ ),[
226
+ MBTags.CENTRE,
227
+ f3amb.loop(np.pi),
228
+ MBTags.CENTRE,
229
+ f3amb.loop(-np.pi),
230
+ MBTags.CENTRE,
231
+ ], )
232
+
233
+ ]
234
+ )
235
+
236
+
237
+ if __name__ == "__main__":
238
+
239
+ # a25_def.plot().show()
240
+
241
+ # for mdef in a25_def:
242
+ # mdef.plot(depth=170, wind=1).show()
243
+ # import os
244
+ # a25_def.create_fcjs('a25', f'{os.environ['HOME']}/Desktop/templates/')
245
+
246
+ a25_def.to_json("flightanalysis/data/f3a_a25_schedule.json")
247
+
@@ -0,0 +1,265 @@
1
+ from flightanalysis.definition import *
2
+ from flightanalysis.elements import *
3
+ from flightanalysis.scoring.criteria import *
4
+ import numpy as np
5
+
6
+ c45 = np.cos(np.radians(45))
7
+
8
+
9
+
10
+ f25_def = SchedDef([
11
+ f3amb.create(ManInfo(
12
+ "Square on Corner", "sLoop", k=4, position=Position.CENTRE,
13
+ start=BoxLocation(Height.BTM, Direction.UPWIND, Orientation.UPRIGHT),
14
+ end=BoxLocation(Height.BTM)
15
+ ),[
16
+ MBTags.CENTRE,
17
+ f3amb.loop(np.pi/4, rolls="roll_option[0]"),
18
+ f3amb.line(),
19
+ f3amb.loop("roll_option[1]", rolls=r(1/2), ke=True),
20
+ f3amb.line(),
21
+ centred(f3amb.loop("roll_option[2]", rolls=r(1/2), ke=True)),
22
+ f3amb.line(),
23
+ f3amb.loop("roll_option[3]", rolls=r(1/2), ke=True),
24
+ f3amb.line(),
25
+ f3amb.loop("roll_option[4]", rolls="roll_option[5]", ke=True),
26
+ MBTags.CENTRE
27
+ ],
28
+ roll_option=ManParm("roll_option", Combination(desired=[
29
+ [r(1/4), -r(1/4), r(1/4), -r(1/4), r(1/8), -r(1/4)],
30
+ [-r(1/4), r(1/4), -r(1/4), r(1/4), -r(1/8), r(1/4)]
31
+ ]), 0),
32
+ line_length=70
33
+ ),
34
+ f3amb.create(ManInfo(
35
+ "Figure P", "fig9", k=3, position=Position.END,
36
+ start=BoxLocation(Height.BTM, Direction.UPWIND, Orientation.INVERTED),
37
+ end=BoxLocation(Height.MID)
38
+ ),[
39
+ f3amb.loop(-np.pi/2),
40
+ f3amb.roll([2*np.pi,-np.pi]),
41
+ f3amb.loop(-3*np.pi/2),
42
+ ], full_roll_rate=np.pi, partial_roll_rate=np.pi ),
43
+ f3amb.create(ManInfo(
44
+ "Roll Combo", "rollC", k=4, position=Position.CENTRE,
45
+ start=BoxLocation(Height.MID, Direction.DOWNWIND, Orientation.INVERTED),
46
+ end=BoxLocation(Height.BTM)
47
+ ),[
48
+ centred(f3amb.roll(
49
+ [np.pi/2, np.pi/2, -np.pi/2, -np.pi/2, -np.pi/2, -np.pi/2, np.pi/2, np.pi/2],
50
+ padded=False
51
+ ))
52
+ ], ),
53
+ f3amb.create(ManInfo(
54
+ "Half Loop", "hLoop", k=4, position=Position.END,
55
+ start=BoxLocation(Height.MID, Direction.DOWNWIND, Orientation.INVERTED),
56
+ end=BoxLocation(Height.TOP)
57
+ ),[
58
+ f3amb.loop(-np.pi, rolls=np.pi)
59
+ ], ),
60
+ f3amb.create(ManInfo(
61
+ "Humpty", "hB", k=5, position=Position.CENTRE,
62
+ start=BoxLocation(Height.TOP, Direction.UPWIND, Orientation.INVERTED),
63
+ end=BoxLocation(Height.BTM)
64
+ ),[
65
+ f3amb.loop(np.pi/2),
66
+ f3amb.snap(r(1.5)),
67
+ centred(f3amb.loop(np.pi, rolls=np.pi)),
68
+ f3amb.roll(r(1.5)),
69
+ f3amb.loop(-np.pi/2)
70
+ ], full_roll_rate=np.pi),
71
+ f3amb.create(ManInfo(
72
+ "Spins", "spin", k=3, position=Position.END,
73
+ start=BoxLocation(Height.TOP, Direction.UPWIND, Orientation.UPRIGHT),
74
+ end=BoxLocation(Height.BTM)
75
+ ),[
76
+ f3amb.spin(r(3)),
77
+ f3amb.roll(r(0.5), line_length=147),
78
+ f3amb.loop(np.pi/2)
79
+ ], ),
80
+ f3amb.create(ManInfo(
81
+ "Rolling Circle", "hCirc", k=5, position=Position.CENTRE,
82
+ start=BoxLocation(Height.BTM, Direction.DOWNWIND, Orientation.UPRIGHT),
83
+ end=BoxLocation(Height.BTM)
84
+ ),[
85
+ MBTags.CENTRE,
86
+ f3amb.loop("roll_option[0]", rolls="roll_option[1]", ke=True),
87
+ centred(f3amb.loop("roll_option[2]", rolls="roll_option[3]", ke=True)),
88
+ f3amb.loop("roll_option[4]", rolls="roll_option[5]", ke=True),
89
+ MBTags.CENTRE
90
+ ],
91
+ loop_radius=100,
92
+ roll_option=ManParm("roll_option", Combination(desired=[
93
+ [np.pi/2, np.pi, -np.pi, -np.pi, np.pi/2, np.pi],
94
+ [-np.pi/2, -np.pi, np.pi, np.pi, -np.pi/2, -np.pi]
95
+ ]), 1),
96
+ ),
97
+ f3amb.create(ManInfo(
98
+ "Shark Fin", "sFin", k=4, position=Position.END,
99
+ start=BoxLocation(Height.BTM, Direction.DOWNWIND, Orientation.INVERTED),
100
+ end=BoxLocation(Height.BTM)
101
+ ),[
102
+ f3amb.loop(-np.pi/2),
103
+ f3amb.roll('2/2'),
104
+ f3amb.loop(-3*np.pi/4),
105
+ f3amb.snap([r(1), r(-1)], line_length=str(f3amb.mps.line_length / c45 + 2*f3amb.mps.loop_radius)),
106
+ #L2 = (L1 + 2*R - 2*R(1-c45)) / c45
107
+ #L2 = (L1/c45 + 2*R)
108
+ f3amb.loop(np.pi/4)
109
+ ], line_length=80, full_roll_rate=np.pi, loop_radius=40),
110
+ f3amb.create(ManInfo(
111
+ "Square Octagonal Loop", "sV8", k=5, position=Position.CENTRE,
112
+ start=BoxLocation(Height.BTM, Direction.UPWIND, Orientation.UPRIGHT),
113
+ end=BoxLocation(Height.BTM)
114
+ ),[
115
+ f3amb.loop(np.pi/2),
116
+ f3amb.roll(r(0.5)),
117
+ f3amb.loop(-np.pi/2),
118
+ centred(f3amb.roll(2*np.pi)),
119
+ f3amb.loop(np.pi/2),
120
+ f3amb.roll("roll_option[0]"),
121
+ f3amb.loop("roll_option[1]", ke=True),
122
+ centred(f3amb.roll(2*np.pi)),
123
+ f3amb.loop("roll_option[2]", ke=True),
124
+ f3amb.roll("roll_option[3]"),
125
+ f3amb.loop(-np.pi/2),
126
+ centred(f3amb.roll(2*np.pi)),
127
+ f3amb.loop(np.pi/2),
128
+ f3amb.roll('1/2'),
129
+ f3amb.loop(-np.pi/2)
130
+ ], line_length=60, full_roll_rate=3*np.pi/2, partial_roll_rate=3*np.pi/2, loop_radius=35,
131
+ roll_option=ManParm("roll_option", Combination(desired=[
132
+ [np.pi/2, -np.pi/2, -np.pi/2, np.pi/2],
133
+ [-np.pi/2, np.pi/2, np.pi/2, -np.pi/2]
134
+ ]), 0),
135
+ ),
136
+ f3amb.create(ManInfo(
137
+ "Humpty_2", "hB2", k=3, position=Position.END,
138
+ start=BoxLocation(Height.BTM, Direction.UPWIND, Orientation.INVERTED),
139
+ end=BoxLocation(Height.BTM)
140
+ ),[
141
+ f3amb.loop(-np.pi/2),
142
+ f3amb.roll('1/2'),
143
+ f3amb.loop(-np.pi),
144
+ f3amb.roll('3/2'),
145
+ f3amb.loop(np.pi/2),
146
+ ], ),
147
+ f3amb.create(ManInfo(
148
+ "Triangular Loop", "keTrg", k=5, position=Position.CENTRE,
149
+ start=BoxLocation(Height.BTM, Direction.DOWNWIND, Orientation.UPRIGHT),
150
+ end=BoxLocation(Height.BTM)
151
+ ),[
152
+ f3amb.loop(r(3/8), rolls="roll_option[0]"),
153
+ f3amb.roll(r(1/2)),
154
+ centred(f3amb.loop("roll_option[1]", rolls="top_roll_option[0]", ke=True)),
155
+ f3amb.roll(r(1/2)),
156
+ f3amb.loop("roll_option[2]", rolls="roll_option[3]", ke=True)
157
+ ],
158
+ roll_option=ManParm("roll_option", Combination(desired=r([
159
+ [-1/4, -1/4, -3/8, -1/4],
160
+ [1/4, 1/4, 3/8, 1/4]
161
+ ])), 0),
162
+ top_roll_option=ManParm("top_roll_option", Combination(desired=r([[-1/2], [1/2]])), 0),
163
+ ),
164
+ f3amb.create(ManInfo(
165
+ "Half 8 Sided Loop", "h8L", k=3, position=Position.END,
166
+ start=BoxLocation(Height.BTM, Direction.DOWNWIND, Orientation.UPRIGHT),
167
+ end=BoxLocation(Height.TOP)
168
+ ),[
169
+ f3amb.loop(np.pi/4),
170
+ f3amb.roll("roll_option[0]"),
171
+ f3amb.loop("roll_option[1]", ke=True),
172
+ f3amb.line(),
173
+ f3amb.loop("roll_option[2]", ke=True),
174
+ f3amb.roll("roll_option[3]"),
175
+ f3amb.loop(np.pi/4)
176
+ ], line_length=65, loop_radius=35,
177
+ roll_option=ManParm("roll_option", Combination(desired=[
178
+ [np.pi/2, -np.pi/4, -np.pi/4, -np.pi/2],
179
+ [-np.pi/2, np.pi/4, np.pi/4, np.pi/2]
180
+ ]), 0),
181
+ ),
182
+ f3amb.create(ManInfo(
183
+ "45 degree downline", "dl45", k=4, position=Position.CENTRE,
184
+ start=BoxLocation(Height.TOP, Direction.UPWIND, Orientation.INVERTED),
185
+ end=BoxLocation(Height.BTM)
186
+ ),[
187
+ f3amb.loop(np.pi/4),
188
+ centred(f3amb.roll([r(1.25), -r(1.25)])),
189
+ f3amb.loop(-np.pi/4)
190
+ ], full_roll_rate=np.pi, line_length=231/c45 - (2/c45-2)*55 ),
191
+ #231/c45 - (2/c45-2)*R)= L
192
+ f3amb.create(ManInfo(
193
+ "Half Square Loop", "hSLoop", k=3, position=Position.END,
194
+ start=BoxLocation(Height.BTM, Direction.UPWIND, Orientation.INVERTED),
195
+ end=BoxLocation(Height.TOP)
196
+ ),[
197
+ f3amb.loop(-np.pi/2),
198
+ f3amb.roll([2*np.pi, - np.pi]),
199
+ f3amb.loop(np.pi/2)
200
+ ], full_roll_rate=np.pi, partial_roll_rate=np.pi ),
201
+ f3amb.create(ManInfo(
202
+ "Avalanche", "Aval", k=6, position=Position.CENTRE,
203
+ start=BoxLocation(Height.TOP, Direction.DOWNWIND, Orientation.INVERTED),
204
+ end=BoxLocation(Height.TOP)
205
+ ),[
206
+ MBTags.CENTRE,
207
+ f3amb.loop(np.pi/2, rolls="roll_option[0]"),
208
+ f3amb.loop("roll_option[1]", ke=True),
209
+ centred(f3amb.snap(r(1), padded=False)),
210
+ f3amb.loop("roll_option[2]", ke=True),
211
+ f3amb.loop("roll_option[3]", rolls="roll_option[4]", ke=True),
212
+ MBTags.CENTRE
213
+ ], loop_radius=100,
214
+ roll_option=ManParm("roll_option", Combination(desired=[
215
+ [np.pi/2, -np.pi/2, -np.pi/2, -np.pi/2, -np.pi/2],
216
+ [-np.pi/2, np.pi/2, np.pi/2, np.pi/2, np.pi/2]
217
+ ]), 0),
218
+ ),
219
+ f3amb.create(ManInfo(
220
+ "Split S", "keS", k=4, position=Position.END,
221
+ start=BoxLocation(Height.TOP, Direction.DOWNWIND, Orientation.INVERTED),
222
+ end=BoxLocation(Height.BTM)
223
+ ),[
224
+ f3amb.roll("roll_option[0]", padded=False),
225
+ f3amb.loop("roll_option[1]", ke=True),
226
+ f3amb.roll("roll_option[2]", padded=False)
227
+ ], loop_radius=122.5,
228
+ roll_option=ManParm("roll_option", Combination(desired=[
229
+ [np.pi/2, -np.pi, np.pi/2],
230
+ [-np.pi/2, np.pi, -np.pi/2],
231
+ ]), 0),
232
+ ),
233
+ f3amb.create(ManInfo(
234
+ "Stall Turn", "stall", k=5, position=Position.CENTRE,
235
+ start=BoxLocation(Height.BTM, Direction.UPWIND, Orientation.INVERTED),
236
+ end=BoxLocation(Height.BTM)
237
+ ),[
238
+ f3amb.roll('1/2', padded=False),
239
+ f3amb.line(length="ee_pause"),
240
+ f3amb.loop(np.pi/2),
241
+ MBTags.CENTRE,
242
+ f3amb.roll("3x4"),
243
+ f3amb.stallturn(),
244
+ f3amb.snap(r(0.75)),
245
+ f3amb.loop(-np.pi/2),
246
+ f3amb.line(length="ee_pause"),
247
+ f3amb.roll('1/2', padded=False),
248
+ ],
249
+ line_length=150,
250
+ partial_roll_rate=np.pi,
251
+ ee_pause=10,
252
+ #roll_option=need to thing about how to do this
253
+ )
254
+ ])
255
+
256
+
257
+
258
+ if __name__ == "__main__":
259
+
260
+
261
+ #f25_def.plot().show()
262
+ # f25_def.create_fcj('F25', 'f25_template_fcj.json')
263
+ f25_def.to_json("flightanalysis/data/f3a_f25_schedule.json")
264
+ #import os
265
+ #f25_def.create_fcjs('f25', f'{os.environ['HOME']}/Desktop/templates/')