Start work on optimized multiprocessing random a/c gen. & eval.

Commit
8b6f11119790c8c930734894a37d2a4aaa42462d
Author
blendoit <blendoit@gmail.com>
Author date
Committer
blendoit <blendoit@gmail.com>
Committer date
Changed files
Pipfile
index 309b2b0f..9534830b 100644..100644
@@ -6,8 +6,6 @@
6 6 [dev-packages]
7 7
8 8 [packages]
9 Removed: numpy = "*"
10 Removed: matplotlib = "*"
11 9
12 10 [requires]
13 Removed: python_version = "3.7"
11 Added: python_version = "3.6"
Pipfile.lock
index 7ee8515e..419c7abf 100644..100644
@@ -1,11 +1,11 @@
1 1 {
2 2 "_meta": {
3 3 "hash": {
4 Removed: "sha256": "a67dca5f16ddc46fb13b6e907c6a3a310410154c905c1fbffcc496db0d7ccd87"
4 Added: "sha256": "415dfdcb118dd9bdfef17671cb7dcd78dbd69b6ae7d4f39e8b44e71d60ca72e7"
5 5 },
6 6 "pipfile-spec": 6,
7 7 "requires": {
8 Removed: "python_version": "3.7"
8 Added: "python_version": "3.6"
9 9 },
10 10 "sources": [
11 11 {
@@ -15,110 +15,6 @@
15 15 }
16 16 ]
17 17 },
18 Removed: "default": {
19 Removed: "cycler": {
20 Removed: "hashes": [
21 Removed: "sha256:1d8a5ae1ff6c5cf9b93e8811e581232ad8920aeec647c37316ceac982b08cb2d",
22 Removed: "sha256:cd7b2d1018258d7247a71425e9f26463dfb444d411c39569972f4ce586b0c9d8"
23 Removed: ],
24 Removed: "version": "==0.10.0"
25 Removed: },
26 Removed: "kiwisolver": {
27 Removed: "hashes": [
28 Removed: "sha256:05b5b061e09f60f56244adc885c4a7867da25ca387376b02c1efc29cc16bcd0f",
29 Removed: "sha256:26f4fbd6f5e1dabff70a9ba0d2c4bd30761086454aa30dddc5b52764ee4852b7",
30 Removed: "sha256:3b2378ad387f49cbb328205bda569b9f87288d6bc1bf4cd683c34523a2341efe",
31 Removed: "sha256:400599c0fe58d21522cae0e8b22318e09d9729451b17ee61ba8e1e7c0346565c",
32 Removed: "sha256:47b8cb81a7d18dbaf4fed6a61c3cecdb5adec7b4ac292bddb0d016d57e8507d5",
33 Removed: "sha256:53eaed412477c836e1b9522c19858a8557d6e595077830146182225613b11a75",
34 Removed: "sha256:58e626e1f7dfbb620d08d457325a4cdac65d1809680009f46bf41eaf74ad0187",
35 Removed: "sha256:5a52e1b006bfa5be04fe4debbcdd2688432a9af4b207a3f429c74ad625022641",
36 Removed: "sha256:5c7ca4e449ac9f99b3b9d4693debb1d6d237d1542dd6a56b3305fe8a9620f883",
37 Removed: "sha256:682e54f0ce8f45981878756d7203fd01e188cc6c8b2c5e2cf03675390b4534d5",
38 Removed: "sha256:79bfb2f0bd7cbf9ea256612c9523367e5ec51d7cd616ae20ca2c90f575d839a2",
39 Removed: "sha256:7f4dd50874177d2bb060d74769210f3bce1af87a8c7cf5b37d032ebf94f0aca3",
40 Removed: "sha256:8944a16020c07b682df861207b7e0efcd2f46c7488619cb55f65882279119389",
41 Removed: "sha256:8aa7009437640beb2768bfd06da049bad0df85f47ff18426261acecd1cf00897",
42 Removed: "sha256:939f36f21a8c571686eb491acfffa9c7f1ac345087281b412d63ea39ca14ec4a",
43 Removed: "sha256:9733b7f64bd9f807832d673355f79703f81f0b3e52bfce420fc00d8cb28c6a6c",
44 Removed: "sha256:a02f6c3e229d0b7220bd74600e9351e18bc0c361b05f29adae0d10599ae0e326",
45 Removed: "sha256:a0c0a9f06872330d0dd31b45607197caab3c22777600e88031bfe66799e70bb0",
46 Removed: "sha256:acc4df99308111585121db217681f1ce0eecb48d3a828a2f9bbf9773f4937e9e",
47 Removed: "sha256:b64916959e4ae0ac78af7c3e8cef4becee0c0e9694ad477b4c6b3a536de6a544",
48 Removed: "sha256:d3fcf0819dc3fea58be1fd1ca390851bdb719a549850e708ed858503ff25d995",
49 Removed: "sha256:d52e3b1868a4e8fd18b5cb15055c76820df514e26aa84cc02f593d99fef6707f",
50 Removed: "sha256:db1a5d3cc4ae943d674718d6c47d2d82488ddd94b93b9e12d24aabdbfe48caee",
51 Removed: "sha256:e3a21a720791712ed721c7b95d433e036134de6f18c77dbe96119eaf7aa08004",
52 Removed: "sha256:e8bf074363ce2babeb4764d94f8e65efd22e6a7c74860a4f05a6947afc020ff2",
53 Removed: "sha256:f16814a4a96dc04bf1da7d53ee8d5b1d6decfc1a92a63349bb15d37b6a263dd9",
54 Removed: "sha256:f2b22153870ca5cf2ab9c940d7bc38e8e9089fa0f7e5856ea195e1cf4ff43d5a",
55 Removed: "sha256:f790f8b3dff3d53453de6a7b7ddd173d2e020fb160baff578d578065b108a05f"
56 Removed: ],
57 Removed: "version": "==1.1.0"
58 Removed: },
59 Removed: "matplotlib": {
60 Removed: "hashes": [
61 Removed: "sha256:1febd22afe1489b13c6749ea059d392c03261b2950d1d45c17e3aed812080c93",
62 Removed: "sha256:31a30d03f39528c79f3a592857be62a08595dec4ac034978ecd0f814fa0eec2d",
63 Removed: "sha256:4442ce720907f67a79d45de9ada47be81ce17e6c2f448b3c64765af93f6829c9",
64 Removed: "sha256:796edbd1182cbffa7e1e7a97f1e141f875a8501ba8dd834269ae3cd45a8c976f",
65 Removed: "sha256:934e6243df7165aad097572abf5b6003c77c9b6c480c3c4de6f2ef1b5fdd4ec0",
66 Removed: "sha256:bab9d848dbf1517bc58d1f486772e99919b19efef5dd8596d4b26f9f5ee08b6b",
67 Removed: "sha256:c1fe1e6cdaa53f11f088b7470c2056c0df7d80ee4858dadf6cbe433fcba4323b",
68 Removed: "sha256:e5b8aeca9276a3a988caebe9f08366ed519fff98f77c6df5b64d7603d0e42e36",
69 Removed: "sha256:ec6bd0a6a58df3628ff269978f4a4b924a0d371ad8ce1f8e2b635b99e482877a"
70 Removed: ],
71 Removed: "index": "pypi",
72 Removed: "version": "==3.1.1"
73 Removed: },
74 Removed: "numpy": {
75 Removed: "hashes": [
76 Removed: "sha256:0b0dd8f47fb177d00fa6ef2d58783c4f41ad3126b139c91dd2f7c4b3fdf5e9a5",
77 Removed: "sha256:25ffe71f96878e1da7e014467e19e7db90ae7d4e12affbc73101bcf61785214e",
78 Removed: "sha256:26efd7f7d755e6ca966a5c0ac5a930a87dbbaab1c51716ac26a38f42ecc9bc4b",
79 Removed: "sha256:28b1180c758abf34a5c3fea76fcee66a87def1656724c42bb14a6f9717a5bdf7",
80 Removed: "sha256:2e418f0a59473dac424f888dd57e85f77502a593b207809211c76e5396ae4f5c",
81 Removed: "sha256:30c84e3a62cfcb9e3066f25226e131451312a044f1fe2040e69ce792cb7de418",
82 Removed: "sha256:4650d94bb9c947151737ee022b934b7d9a845a7c76e476f3e460f09a0c8c6f39",
83 Removed: "sha256:4dd830a11e8724c9c9379feed1d1be43113f8bcce55f47ea7186d3946769ce26",
84 Removed: "sha256:4f2a2b279efde194877aff1f76cf61c68e840db242a5c7169f1ff0fd59a2b1e2",
85 Removed: "sha256:62d22566b3e3428dfc9ec972014c38ed9a4db4f8969c78f5414012ccd80a149e",
86 Removed: "sha256:669795516d62f38845c7033679c648903200980d68935baaa17ac5c7ae03ae0c",
87 Removed: "sha256:75fcd60d682db3e1f8fbe2b8b0c6761937ad56d01c1dc73edf4ef2748d5b6bc4",
88 Removed: "sha256:9395b0a41e8b7e9a284e3be7060db9d14ad80273841c952c83a5afc241d2bd98",
89 Removed: "sha256:9e37c35fc4e9410093b04a77d11a34c64bf658565e30df7cbe882056088a91c1",
90 Removed: "sha256:a0678793096205a4d784bd99f32803ba8100f639cf3b932dc63b21621390ea7e",
91 Removed: "sha256:b46554ad4dafb2927f88de5a1d207398c5385edbb5c84d30b3ef187c4a3894d8",
92 Removed: "sha256:c867eeccd934920a800f65c6068acdd6b87e80d45cd8c8beefff783b23cdc462",
93 Removed: "sha256:dd0667f5be56fb1b570154c2c0516a528e02d50da121bbbb2cbb0b6f87f59bc2",
94 Removed: "sha256:de2b1c20494bdf47f0160bd88ed05f5e48ae5dc336b8de7cfade71abcc95c0b9",
95 Removed: "sha256:f1df7b2b7740dd777571c732f98adb5aad5450aee32772f1b39249c8a50386f6",
96 Removed: "sha256:ffca69e29079f7880c5392bf675eb8b4146479d976ae1924d01cd92b04cccbcc"
97 Removed: ],
98 Removed: "index": "pypi",
99 Removed: "version": "==1.17.3"
100 Removed: },
101 Removed: "pyparsing": {
102 Removed: "hashes": [
103 Removed: "sha256:6f98a7b9397e206d78cc01df10131398f1c8b8510a2f4d97d9abd82e1aacdd80",
104 Removed: "sha256:d9338df12903bbf5d65a0e4e87c2161968b10d2e489652bb47001d82a9b028b4"
105 Removed: ],
106 Removed: "version": "==2.4.2"
107 Removed: },
108 Removed: "python-dateutil": {
109 Removed: "hashes": [
110 Removed: "sha256:7e6584c74aeed623791615e26efd690f29817a27c73085b78e4bad02493df2fb",
111 Removed: "sha256:c89805f6f4d64db21ed966fda138f8a5ed7a4fdbc1a8ee329ce1b74e3c74da9e"
112 Removed: ],
113 Removed: "version": "==2.8.0"
114 Removed: },
115 Removed: "six": {
116 Removed: "hashes": [
117 Removed: "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c",
118 Removed: "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73"
119 Removed: ],
120 Removed: "version": "==1.12.0"
121 Removed: }
122 Removed: },
18 Added: "default": {},
123 19 "develop": {}
124 20 }
aircraftstudio/__init__.py
index 00000000..dda0cea5 000000..100644
@@ -0,0 +1,1 @@
1 Added: from . import creator, evaluator, generator
aircraftstudio/creator/__init__.py
index 00000000..818c7b27 000000..100644
@@ -0,0 +1,4 @@
1 Added: from . import base
2 Added: from . import fuselage
3 Added: from . import propulsion
4 Added: from . import wing
aircraftstudio/creator/base.py
index 00000000..92fe421d 000000..100644
@@ -0,0 +1,112 @@
1 Added: """The base.py module contains parent classes for components."""
2 Added:
3 Added: import numpy as np
4 Added: import os.path
5 Added: import random
6 Added: import logging
7 Added:
8 Added: from aircraftstudio import creator
9 Added:
10 Added: logging.basicConfig(filename='log_base.txt',
11 Added: level=logging.DEBUG,
12 Added: format='%(asctime)s - %(levelname)s - %(message)s')
13 Added:
14 Added:
15 Added: class Aircraft:
16 Added: """This class tracks all sub-components and is fed to the evaluator."""
17 Added: name = None
18 Added: fuselage = None
19 Added: propulsion = None
20 Added: wing = None
21 Added: properties = {}
22 Added:
23 Added: naca = [2412, 3412, 2420]
24 Added:
25 Added: def __init__(self):
26 Added: self.results = {}
27 Added:
28 Added: def __str__(self):
29 Added: return self.name
30 Added:
31 Added: @classmethod
32 Added: def from_default(cls):
33 Added: aircraft = Aircraft()
34 Added: aircraft.name = 'default_aircraft_' + str(random.randrange(1000, 9999))
35 Added: airfoil = creator.wing.Airfoil(aircraft, 'default_airfoil')
36 Added: airfoil.add_naca(2412)
37 Added: soar1 = creator.wing.Spar(airfoil, 'default_spar_1', 0.30)
38 Added: soar2 = creator.wing.Spar(airfoil, 'default_spar_2', 0.60)
39 Added: stringer = creator.wing.Stringer(airfoil, 'default_stringer')
40 Added: return aircraft
41 Added:
42 Added: @classmethod
43 Added: def from_random(cls):
44 Added: aircraft = Aircraft()
45 Added: aircraft.name = 'random_aircraft_' + str(random.randrange(1000, 9999))
46 Added: airfoil = creator.wing.Airfoil(aircraft, 'random_airfoil')
47 Added: airfoil.add_naca(random.choice(cls.naca))
48 Added: soar1 = creator.wing.Spar(airfoil, 'random_spar_1',
49 Added: random.randrange(20, 80) / 100)
50 Added: soar2 = creator.wing.Spar(airfoil, 'random_spar_2',
51 Added: random.randrange(20, 80) / 100)
52 Added: stringer = creator.wing.Stringer(airfoil, 'random_stringer',
53 Added: random.randint(1, 10),
54 Added: random.randint(1, 10),
55 Added: random.randint(1, 10),
56 Added: random.randint(1, 10))
57 Added: return aircraft
58 Added:
59 Added:
60 Added: class Component:
61 Added: """Basic component providing coordinates, tools and a component tree."""
62 Added: def __init__(self, parent, name):
63 Added: self.parent = parent
64 Added: self.name = name
65 Added: self.x = np.array([])
66 Added: self.z = np.array([])
67 Added: self.y = np.array([])
68 Added: self.material = None
69 Added: self.mass = float()
70 Added: self.properties = {}
71 Added:
72 Added: def __str__(self):
73 Added: return self.name
74 Added:
75 Added: def info_print(self, round):
76 Added: """Print all the component's coordinates to the terminal."""
77 Added: name = f' CREATOR DATA FOR {str(self).upper()} '
78 Added: num_of_dashes = len(name)
79 Added: print(num_of_dashes * '-')
80 Added: print(name)
81 Added: for k, v in self.__dict__.items():
82 Added: if type(v) is not np.ndarray:
83 Added: print(f'{k}:\n', v)
84 Added: print(num_of_dashes * '-')
85 Added: for k, v in self.__dict__.items():
86 Added: if type(v) is np.ndarray:
87 Added: print(f'{k}:\n', np.around(v, round))
88 Added: return None
89 Added:
90 Added: def info_save(self,
91 Added: save_path='/home/blendux/Projects/Aircraft_Studio/save'):
92 Added: """Save all the object's coordinates (must be full path)."""
93 Added: file_name = f'{self.name}_info.txt'
94 Added: full_path = os.path.join(save_path, file_name)
95 Added: try:
96 Added: with open(full_path, 'w') as f:
97 Added: for k, v in self.__dict__.items():
98 Added: if type(v) is not np.ndarray:
99 Added: f.write(f'{k}=\n')
100 Added: f.write(str(v))
101 Added: f.write("\n")
102 Added: # print(num_of_dashes * '-')
103 Added: for k, v in self.__dict__.items():
104 Added: if type(v) is np.ndarray:
105 Added: f.write(f'{k}=\n')
106 Added: f.write(str(v))
107 Added: f.write("\n")
108 Added: logging.debug(f'Successfully wrote to file {full_path}')
109 Added: except IOError:
110 Added: print(f'Unable to write {file_name} to specified directory.\n',
111 Added: 'Was the full path passed to the function?')
112 Added: return None
aircraftstudio/creator/fuselage.py
index 00000000..e69de29b 000000..100644
aircraftstudio/creator/propulsion.py
index 00000000..e69de29b 000000..100644
aircraftstudio/creator/wing.py
index 00000000..afe52fe9 000000..100644
@@ -0,0 +1,312 @@
1 Added: """
2 Added: The wing.py module contains class definitions for and various components
3 Added: we add to an airfoil (spars, stringers, and ribs).
4 Added:
5 Added: Classes:
6 Added: Airfoil: instantiated with class method to provide coordinates to heirs.
7 Added: Spar: inherits from Airfoil.
8 Added: Stringer: also inherits from Airfoil.
9 Added:
10 Added: Functions:
11 Added: plot_geom(airfoil): generates a 2D plot of the airfoil & any components.
12 Added: """
13 Added:
14 Added: import logging
15 Added: import numpy as np
16 Added: from math import sin, cos, atan
17 Added: import bisect as bi
18 Added: import matplotlib.pyplot as plt
19 Added:
20 Added: from aircraftstudio.creator import base
21 Added: import resources.materials as mt
22 Added:
23 Added:
24 Added: class Airfoil(base.Component):
25 Added: """This class represents a single NACA airfoil.
26 Added:
27 Added: The coordinates are saved as two np.arrays
28 Added: for the x- and z-coordinates. The coordinates start at
29 Added: the leading edge, travel over the airfoil's upper edge,
30 Added: then loop back to the leading edge via the lower edge.
31 Added:
32 Added: This method was chosen for easier future exports
33 Added: to 3D CAD packages like SolidWorks, which can import such
34 Added: geometry as coordinates written in a CSV file.
35 Added: """
36 Added: def __init__(self,
37 Added: parent,
38 Added: name,
39 Added: chord=68,
40 Added: semi_span=150,
41 Added: material=mt.aluminium):
42 Added: super().__init__(parent, name)
43 Added: parent.wing = self
44 Added: if chord > 20:
45 Added: self.chord = chord
46 Added: else:
47 Added: self.chord = 20
48 Added: logging.debug('Chord too small, using minimum value of 20.')
49 Added: parent
50 Added: self.semi_span = semi_span
51 Added: self.material = material
52 Added: self.spars = []
53 Added: self.stringers = []
54 Added:
55 Added: def add_naca(self, naca_num=2412):
56 Added: """Generate surface geometry for a NACA airfoil.
57 Added:
58 Added: The nested functions perform the required steps to generate geometry,
59 Added: and can be called to solve the geometry y-coordinate for any 'x' input.
60 Added: Equation coefficients were retrieved from Wikipedia.org.
61 Added:
62 Added: Parameters:
63 Added: naca_num: 4-digit NACA wing
64 Added:
65 Added: Return:
66 Added: None
67 Added: """
68 Added: self.naca_num = naca_num
69 Added: # Variables extracted from naca_num argument passed to the function
70 Added: m = int(str(naca_num)[0]) / 100
71 Added: p = int(str(naca_num)[1]) / 10
72 Added: t = int(str(naca_num)[2:]) / 100
73 Added: # x-coordinate of maximum camber
74 Added: p_c = p * self.chord
75 Added:
76 Added: def get_camber(x):
77 Added: """
78 Added: Returns camber z-coordinate from 1 'x' along the airfoil chord.
79 Added: """
80 Added: z_c = float()
81 Added: if 0 <= x < p_c:
82 Added: z_c = (m / (p**2)) * (2 * p * (x / self.chord) -
83 Added: (x / self.chord)**2)
84 Added: elif p_c <= x <= self.chord:
85 Added: z_c = (m /
86 Added: ((1 - p)**2)) * ((1 - 2 * p) + 2 * p *
87 Added: (x / self.chord) - (x / self.chord)**2)
88 Added: return (z_c * self.chord)
89 Added:
90 Added: def get_thickness(x):
91 Added: """Return thickness from 1 'x' along the airfoil chord."""
92 Added: x = 0 if x < 0 else x
93 Added: z_t = 5 * t * self.chord * (+0.2969 *
94 Added: (x / self.chord)**0.5 - 0.1260 *
95 Added: (x / self.chord)**1 - 0.3516 *
96 Added: (x / self.chord)**2 + 0.2843 *
97 Added: (x / self.chord)**3 - 0.1015 *
98 Added: (x / self.chord)**4)
99 Added: return z_t
100 Added:
101 Added: def get_theta(x):
102 Added: dz_c = float()
103 Added: if 0 <= x < p_c:
104 Added: dz_c = ((2 * m) / p**2) * (p - x / self.chord)
105 Added: elif p_c <= x <= self.chord:
106 Added: dz_c = (2 * m) / ((1 - p)**2) * (p - x / self.chord)
107 Added:
108 Added: theta = atan(dz_c)
109 Added: return theta
110 Added:
111 Added: def get_coord_u(x):
112 Added: x = x - get_thickness(x) * sin(get_theta(x))
113 Added: z = get_camber(x) + get_thickness(x) * cos(get_theta(x))
114 Added: return (x, z)
115 Added:
116 Added: def get_coord_l(x):
117 Added: x = x + get_thickness(x) * sin(get_theta(x))
118 Added: z = get_camber(x) - get_thickness(x) * cos(get_theta(x))
119 Added: return (x, z)
120 Added:
121 Added: # Densify x-coordinates 10 times for first 1/4 chord length
122 Added: x_chord_25_percent = round(self.chord / 4)
123 Added: x_chord = [i / 10 for i in range(x_chord_25_percent * 10)]
124 Added: x_chord.extend(i for i in range(x_chord_25_percent, self.chord + 1))
125 Added: # Generate our airfoil skin geometry from previous sub-functions
126 Added: self.x_c = np.array([])
127 Added: self.z_c = np.array([])
128 Added: # Upper surface and camber line
129 Added: for x in x_chord:
130 Added: self.x_c = np.append(self.x_c, x)
131 Added: self.z_c = np.append(self.z_c, get_camber(x))
132 Added: self.x = np.append(self.x, get_coord_u(x)[0])
133 Added: self.z = np.append(self.z, get_coord_u(x)[1])
134 Added: # Lower surface
135 Added: for x in x_chord[::-1]:
136 Added: self.x = np.append(self.x, get_coord_l(x)[0])
137 Added: self.z = np.append(self.z, get_coord_l(x)[1])
138 Added: return None
139 Added:
140 Added:
141 Added: class Spar(base.Component):
142 Added: """Contains a single spar's data."""
143 Added: def __init__(self, parent, name, loc_percent=0.30, material=mt.aluminium):
144 Added: """Set spar location as percent of chord length."""
145 Added: super().__init__(parent, name)
146 Added: parent.spars.append(self)
147 Added: self.material = material
148 Added: self.cap_area = float()
149 Added: # bi.bisect_left: returns index of first value in parent.x > loc
150 Added: # This ensures that spar geom intersects with airfoil geom.
151 Added: loc = loc_percent * parent.chord
152 Added: # Spar upper coordinates
153 Added: spar_u = bi.bisect_left(parent.x, loc) - 1
154 Added: self.x = np.append(self.x, parent.x[spar_u])
155 Added: self.z = np.append(self.z, parent.z[spar_u])
156 Added: # Spar lower coordinates
157 Added: spar_l = bi.bisect_left(parent.x[::-1], loc)
158 Added: self.x = np.append(self.x, parent.x[-spar_l])
159 Added: self.z = np.append(self.z, parent.z[-spar_l])
160 Added: return None
161 Added:
162 Added: def set_cap_area(self, cap_area):
163 Added: self.cap_area = cap_area
164 Added: return None
165 Added:
166 Added: def set_mass(self, mass):
167 Added: self.mass = mass
168 Added: return None
169 Added:
170 Added:
171 Added: class Stringer(base.Component):
172 Added: """Contains the coordinates of all stringers."""
173 Added: def __init__(self,
174 Added: parent,
175 Added: name,
176 Added: den_u_1=4,
177 Added: den_u_2=4,
178 Added: den_l_1=4,
179 Added: den_l_2=4):
180 Added: """Add equally distributed stringers to four airfoil locations
181 Added: (upper nose, lower nose, upper surface, lower surface).
182 Added:
183 Added: den_u_1: upper nose number of stringers
184 Added: den_u_2: upper surface number of stringers
185 Added: den_l_1: lower nose number of stringers
186 Added: den_l_2: lower surface number of stringers
187 Added: """
188 Added: super().__init__(parent, name)
189 Added: parent.stringers = self
190 Added: self.x_start = []
191 Added: self.x_end = []
192 Added: self.z_start = []
193 Added: self.z_end = []
194 Added: self.diameter = float()
195 Added: self.area = float()
196 Added:
197 Added: # Find distance between leading edge and first upper stringer
198 Added: # interval = self.parent.spars[0].x[0] / (den_u_1 + 1)
199 Added: interval = 2
200 Added: # initialise first self.stringer_x at first interval
201 Added: x = interval
202 Added: # Add upper stringers from leading edge until first spar.
203 Added: for _ in range(0, den_u_1):
204 Added: # Index of the first value of airfoil.x > x
205 Added: i = bi.bisect_left(self.parent.x, x)
206 Added: self.x = np.append(self.x, self.parent.x[i])
207 Added: self.z = np.append(self.z, self.parent.z[i])
208 Added: x += interval
209 Added: # Add upper stringers from first spar until last spar
210 Added: interval = (self.parent.spars[-1].x[0] -
211 Added: self.parent.spars[0].x[0]) / (den_u_2 + 1)
212 Added: x = interval + self.parent.spars[0].x[0]
213 Added: for _ in range(0, den_u_2):
214 Added: i = bi.bisect_left(self.parent.x, x)
215 Added: self.x = np.append(self.x, self.parent.x[i])
216 Added: self.z = np.append(self.z, self.parent.z[i])
217 Added: x += interval
218 Added:
219 Added: # Find distance between leading edge and first lower stringer
220 Added: interval = self.parent.spars[0].x[1] / (den_l_1 + 1)
221 Added: x = interval
222 Added: # Add lower stringers from leading edge until first spar.
223 Added: for _ in range(0, den_l_1):
224 Added: i = bi.bisect_left(self.parent.x[::-1], x)
225 Added: self.x = np.append(self.x, self.parent.x[-i])
226 Added: self.z = np.append(self.z, self.parent.z[-i])
227 Added: x += interval
228 Added: # Add lower stringers from first spar until last spar
229 Added: interval = (self.parent.spars[-1].x[1] -
230 Added: self.parent.spars[0].x[1]) / (den_l_2 + 1)
231 Added: x = interval + self.parent.spars[0].x[1]
232 Added: for _ in range(0, den_l_2):
233 Added: i = bi.bisect_left(self.parent.x[::-1], x)
234 Added: self.x = np.append(self.x, self.parent.x[-i])
235 Added: self.z = np.append(self.z, self.parent.z[-i])
236 Added: x += interval
237 Added: return None
238 Added:
239 Added: def add_area(self, area):
240 Added: self.area = area
241 Added: return None
242 Added:
243 Added: def add_mass(self, mass):
244 Added: self.mass = len(self.x) * mass + len(self.x) * mass
245 Added: return None
246 Added:
247 Added: def add_webs(self, thickness):
248 Added: """Add webs to stringers."""
249 Added: for _ in range(len(self.x) // 2):
250 Added: self.x_start.append(self.x[_])
251 Added: self.x_end.append(self.x[_ + 1])
252 Added: self.z_start.append(self.z[_])
253 Added: self.z_end.append(self.z[_ + 1])
254 Added: self.thickness = thickness
255 Added: return None
256 Added:
257 Added: def info_print(self, round=2):
258 Added: super().info_print(round)
259 Added: print('Stringer Area:\n', np.around(self.area, round))
260 Added: return None
261 Added:
262 Added:
263 Added: def plot_geom(airfoil):
264 Added: """This function plots the airfoil's + sub-components' geometry."""
265 Added: fig, ax = plt.subplots()
266 Added:
267 Added: # Plot chord
268 Added: x = [0, airfoil.chord]
269 Added: y = [0, 0]
270 Added: ax.plot(x, y, linewidth='1')
271 Added: # Plot quarter chord
272 Added: ax.plot(airfoil.chord / 4,
273 Added: 0,
274 Added: '.',
275 Added: color='g',
276 Added: markersize=24,
277 Added: label='Quarter-chord')
278 Added: # Plot mean camber line
279 Added: ax.plot(airfoil.x_c,
280 Added: airfoil.z_c,
281 Added: '-.',
282 Added: color='r',
283 Added: linewidth='2',
284 Added: label='Mean camber line')
285 Added: # Plot airfoil surfaces
286 Added: ax.plot(airfoil.x, airfoil.z, color='b', linewidth='1')
287 Added:
288 Added: try: # Plot spars
289 Added: for spar in airfoil.spars:
290 Added: x = (spar.x)
291 Added: y = (spar.z)
292 Added: ax.plot(x, y, '-', color='y', linewidth='4')
293 Added: except AttributeError:
294 Added: print('No spars to plot.')
295 Added: try: # Plot stringers
296 Added: for i in range(len(airfoil.stringers.x)):
297 Added: x = airfoil.stringers.x[i]
298 Added: y = airfoil.stringers.z[i]
299 Added: ax.plot(x, y, '.', color='y', markersize=12)
300 Added: except AttributeError:
301 Added: print('No stringers to plot.')
302 Added:
303 Added: ax.set(title='NACA ' + str(airfoil.naca_num) + ' airfoil',
304 Added: xlabel='X axis',
305 Added: ylabel='Z axis')
306 Added:
307 Added: plt.grid(axis='both', linestyle=':', linewidth=1)
308 Added: plt.gca().set_aspect('equal', adjustable='box')
309 Added: plt.gca().legend(bbox_to_anchor=(1, 1),
310 Added: bbox_transform=plt.gcf().transFigure)
311 Added: plt.show()
312 Added: return fig, ax
aircraftstudio/evaluator/__init__.py
index 00000000..a58168bf 000000..100644
@@ -0,0 +1,1 @@
1 Added: from .evaluator import *
aircraftstudio/evaluator/dP.py
index 00000000..b6aaa3b6 000000..100644
@@ -0,0 +1,18 @@
1 Added: def get_dx(self, component):
2 Added: return [x - self.centroid[0] for x in component.x_start]
3 Added:
4 Added:
5 Added: def get_dz(self, component):
6 Added: return [x - self.centroid[1] for x in component.x_start]
7 Added:
8 Added:
9 Added: def get_dP(self, xDist, zDist, V_x, V_z, area):
10 Added: I_x = self.I_['x']
11 Added: I_z = self.I_['z']
12 Added: I_xz = self.I_['xz']
13 Added: denom = float(I_x * I_z - I_xz**2)
14 Added: z = float()
15 Added: for _ in range(len(xDist)):
16 Added: z += float(-area * xDist[_] * (I_x * V_x - I_xz * V_z) / denom -
17 Added: area * zDist[_] * (I_z * V_z - I_xz * V_x) / denom)
18 Added: return z
aircraftstudio/evaluator/drag.py
index 00000000..73a26fce 000000..100644
@@ -0,0 +1,18 @@
1 Added: import random
2 Added:
3 Added: def get_drag(aircraft, drag):
4 Added: # Transform semi-span integer into list
5 Added: semi_span = [x for x in range(0, aircraft.wing.semi_span)]
6 Added:
7 Added: # Drag increases after 80% of the semi_span
8 Added: cutoff = round(0.8 * aircraft.wing.span)
9 Added:
10 Added: # Drag increases by 25% after 80% of the semi_span
11 Added: F_x = [drag for x in semi_span[0:cutoff]]
12 Added: F_x.extend([1.25 * drag for x in semi_span[cutoff:]])
13 Added: return F_x
14 Added:
15 Added:
16 Added: def get_drag_total(aircraft):
17 Added: """Get total drag force acting on the aircraft."""
18 Added: return random.random() * 100
aircraftstudio/evaluator/evaluator.py
index 00000000..18bb692a 000000..100644
@@ -0,0 +1,195 @@
1 Added: """
2 Added: The evaluator.py module contains functions
3 Added: that return calculated data for an aircraft.
4 Added: Plotting aircraft components is also possible.
5 Added: """
6 Added:
7 Added: import os.path
8 Added: import concurrent.futures
9 Added: import matplotlib.pyplot as plt
10 Added:
11 Added: from . import drag, inertia, lift, mass
12 Added:
13 Added:
14 Added: def analyze(aircraft):
15 Added: """Analyze a single aircraft."""
16 Added: results = {
17 Added: 'Lift': lift.get_lift_total(aircraft),
18 Added: 'Drag': drag.get_drag_total(aircraft),
19 Added: 'Mass': mass.get_mass_total(aircraft),
20 Added: 'Centroid': inertia.get_centroid(aircraft)
21 Added: }
22 Added: aircraft.results = results
23 Added: return aircraft.name, results
24 Added:
25 Added:
26 Added: def analyze_all(population):
27 Added: """Analyze all aircraft in a given population."""
28 Added: # for aircraft in population.aircrafts:
29 Added: # print(analyze(aircraft))
30 Added: with concurrent.futures.ProcessPoolExecutor() as executor:
31 Added: results = executor.map(analyze, population.aircrafts)
32 Added: for result in results:
33 Added: print(result)
34 Added: return None
35 Added:
36 Added: # def analysis(self, V_x, V_z):
37 Added: # """Perform all analysis calculations and store in class instance."""
38 Added:
39 Added: # self.drag = self.get_drag(10)
40 Added: # self.lift_rectangular = self.get_lift_rectangular(13.7)
41 Added: # self.lift_elliptical = self.get_lift_elliptical(15)
42 Added: # self.lift_total = self.get_lift_total()
43 Added: # self.mass_dist = self.get_mass_distribution(self.mass_total)
44 Added: # self.centroid = self.get_centroid()
45 Added: # self.I_['x'] = self.get_inertia_terms()[0]
46 Added: # self.I_['z'] = self.get_inertia_terms()[1]
47 Added: # self.I_['xz'] = self.get_inertia_terms()[2]
48 Added: # spar_dx = self.get_dx(self.spar)
49 Added: # spar_dz = self.get_dz(self.spar)
50 Added: # self.spar.dP_x = self.get_dP(spar_dx, spar_dz, V_x, 0,
51 Added: # self.spar.cap_area)
52 Added: # self.spar.dP_z = self.get_dP(spar_dx, spar_dz, 0, V_z,
53 Added: # self.spar.cap_area)
54 Added: # print("yayyyyy")
55 Added: # return None
56 Added:
57 Added: # print(f"Analysis results for {aircraft.name}:\n", results)
58 Added: # self.results = self.get_lift_total(aircraft)
59 Added:
60 Added: # self.drag = self.get_drag(10)
61 Added: # self.lift_rectangular = self.get_lift_rectangular(13.7)
62 Added: # self.lift_elliptical = self.get_lift_elliptical(15)
63 Added: # self.lift_total = self.get_lift_total()
64 Added: # self.mass_dist = self.get_mass_distribution(self.mass_total)
65 Added: # self.centroid = self.get_centroid()
66 Added: # self.I_['x'] = self.get_inertia_terms()[0]
67 Added: # self.I_['z'] = self.get_inertia_terms()[1]
68 Added: # self.I_['xz'] = self.get_inertia_terms()[2]
69 Added: # spar_dx = self.get_dx(self.spar)
70 Added: # spar_dz = self.get_dz(self.spar)
71 Added: # self.spar.dP_x = self.get_dP(spar_dx, spar_dz, V_x, 0,
72 Added: # self.spar.cap_area)
73 Added: # self.spar.dP_z = self.get_dP(spar_dx, spar_dz, 0, V_z,
74 Added: # self.spar.cap_area)
75 Added: # return None
76 Added:
77 Added: def tree_print(self, population):
78 Added: """Print the list of subcomponents."""
79 Added: name = f" TREE FOR {[i.name for i in population.aircraft]} IN {self.name} "
80 Added: num_of_dashes = len(name)
81 Added: print(num_of_dashes * '-')
82 Added: print(name)
83 Added: for aircraft in population:
84 Added: print(".")
85 Added: print(f"`-- {aircraft}")
86 Added: print(f" |--{aircraft.wing}")
87 Added: print(f" | |-- {aircraft.wing.stringers}")
88 Added: for spar in aircraft.wing.spars[:-1]:
89 Added: print(f" | |-- {spar}")
90 Added: print(f" | `-- {aircraft.wing.spars[-1]}")
91 Added: print(f" |-- {aircraft.fuselage}")
92 Added: print(f" `-- {aircraft.propulsion}")
93 Added: print(num_of_dashes * '-')
94 Added: return None
95 Added:
96 Added: def tree_save(self,
97 Added: population,
98 Added: save_path='/home/blendux/Projects/Aircraft_Studio/save'):
99 Added: """Save the evaluator's tree to a file."""
100 Added: for aircraft in population.aircraft:
101 Added: file_name = f"{aircraft.name}_tree.txt"
102 Added: full_path = os.path.join(save_path, file_name)
103 Added: with open(full_path, 'w') as f:
104 Added: try:
105 Added: f.write(".\n")
106 Added: f.write(f"`-- {aircraft}\n")
107 Added: f.write(f" |--{aircraft.wing}\n")
108 Added: for spar in aircraft.wing.spars[:-1]:
109 Added: f.write(f" | |-- {spar}\n")
110 Added: f.write(f" | `-- {aircraft.wing.spars[-1]}\n")
111 Added: f.write(f" |-- {aircraft.fuselage}\n")
112 Added: f.write(f" `-- {aircraft.propulsion}\n")
113 Added: logging.debug(f'Successfully wrote to file {full_path}')
114 Added:
115 Added: except IOError:
116 Added: print(
117 Added: f'Unable to write {file_name} to specified directory.',
118 Added: 'Was the full path passed to the function?')
119 Added: return None
120 Added:
121 Added:
122 Added: def plot_geom(evaluator):
123 Added: """This function plots analysis results over the airfoil's geometry."""
124 Added: # Plot chord
125 Added: x_chord = [0, evaluator.chord]
126 Added: y_chord = [0, 0]
127 Added: plt.plot(x_chord, y_chord, linewidth='1')
128 Added: # Plot quarter chord
129 Added: plt.plot(evaluator.chord / 4,
130 Added: 0,
131 Added: '.',
132 Added: color='g',
133 Added: markersize=24,
134 Added: label='Quarter-chord')
135 Added: # Plot airfoil surfaces
136 Added: x = [0.98 * x for x in evaluator.airfoil.x]
137 Added: y = [0.98 * z for z in evaluator.airfoil.z]
138 Added: plt.fill(x, y, color='w', linewidth='1', fill=False)
139 Added: x = [1.02 * x for x in evaluator.airfoil.x]
140 Added: y = [1.02 * z for z in evaluator.airfoil.z]
141 Added: plt.fill(x, y, color='b', linewidth='1', fill=False)
142 Added:
143 Added: # Plot spars
144 Added: try:
145 Added: for _ in range(len(evaluator.spar.x)):
146 Added: x = (evaluator.spar.x[_])
147 Added: y = (evaluator.spar.z[_])
148 Added: plt.plot(x, y, '-', color='b')
149 Added: except AttributeError:
150 Added: print('No spars to plot.')
151 Added: # Plot stringers
152 Added: try:
153 Added: for _ in range(0, len(evaluator.stringer.x)):
154 Added: x = evaluator.stringer.x[_]
155 Added: y = evaluator.stringer.z[_]
156 Added: plt.plot(x, y, '.', color='y', markersize=12)
157 Added: except AttributeError:
158 Added: print('No stringers to plot.')
159 Added:
160 Added: # Plot centroid
161 Added: x = evaluator.centroid[0]
162 Added: y = evaluator.centroid[1]
163 Added: plt.plot(x, y, '.', color='r', markersize=24, label='centroid')
164 Added:
165 Added: # Graph formatting
166 Added: plt.xlabel('X axis')
167 Added: plt.ylabel('Z axis')
168 Added:
169 Added: plot_bound = max(evaluator.airfoil.x)
170 Added: plt.xlim(-0.10 * plot_bound, 1.10 * plot_bound)
171 Added: plt.ylim(-(1.10 * plot_bound / 2), (1.10 * plot_bound / 2))
172 Added: plt.gca().set_aspect('equal', adjustable='box')
173 Added: plt.gca().legend()
174 Added: plt.grid(axis='both', linestyle=':', linewidth=1)
175 Added: plt.show()
176 Added: return None
177 Added:
178 Added:
179 Added: def plot_lift(evaluator):
180 Added: x = range(evaluator.semi_span)
181 Added: y_1 = evaluator.lift_rectangular
182 Added: y_2 = evaluator.lift_elliptical
183 Added: y_3 = evaluator.lift_total
184 Added: plt.plot(x, y_1, '.', color='b', markersize=4, label='Rectangular lift')
185 Added: plt.plot(x, y_2, '.', color='g', markersize=4, label='Elliptical lift')
186 Added: plt.plot(x, y_3, '.', color='r', markersize=4, label='Total lift')
187 Added:
188 Added: # Graph formatting
189 Added: plt.xlabel('Semi-span location')
190 Added: plt.ylabel('Lift')
191 Added:
192 Added: plt.gca().legend()
193 Added: plt.grid(axis='both', linestyle=':', linewidth=1)
194 Added: plt.show()
195 Added: return None
aircraftstudio/evaluator/inertia.py
index 00000000..f0477665 000000..100644
@@ -0,0 +1,66 @@
1 Added: def get_centroid(aircraft):
2 Added: """Return the coordinates of the centroid."""
3 Added: # stringer_area = aircraft.wing.stringers.area
4 Added: # cap_area = aircraft.wing.spars.cap_area
5 Added:
6 Added: # TODO: Fix this
7 Added: # caps_x = [value for spar in aircraft.wing.spars.x for value in spar]
8 Added: # caps_z = [value for spar in aircraft.wing.spars.z for value in spar]
9 Added: # stringers_x = aircraft.wing.stringers.x
10 Added: # stringers_z = aircraft.wing.stringers.z
11 Added:
12 Added: # denominator = float(
13 Added: # len(caps_x) * cap_area + len(stringers_x) * stringer_area)
14 Added:
15 Added: # centroid_x = float(
16 Added: # sum([x * cap_area
17 Added: # for x in caps_x]) + sum([x * stringer_area for x in stringers_x]))
18 Added: # centroid_x = centroid_x / denominator
19 Added:
20 Added: # centroid_z = float(
21 Added: # sum([z * cap_area
22 Added: # for z in caps_z]) + sum([z * stringer_area for z in stringers_z]))
23 Added: # centroid_z = centroid_z / denominator
24 Added:
25 Added: # return (centroid_x, centroid_z)
26 Added: return (200, 420)
27 Added:
28 Added:
29 Added: def get_inertia_terms(self):
30 Added: """Obtain all inertia terms."""
31 Added: stringer_area = self.stringer.area
32 Added: cap_area = self.spar.cap_area
33 Added:
34 Added: # Adds upper and lower components' coordinates to list
35 Added: x_stringers = self.stringer.x
36 Added: z_stringers = self.stringer.z
37 Added: x_spars = self.spar.x[:][0] + self.spar.x[:][1]
38 Added: z_spars = self.spar.z[:][0] + self.spar.z[:][1]
39 Added: stringer_count = range(len(x_stringers))
40 Added: spar_count = range(len(self.spar.x))
41 Added:
42 Added: # I_x is the sum of the contributions of the spar caps and stringers
43 Added: # TODO: replace list indices with dictionary value
44 Added: I_x = sum(
45 Added: [cap_area * (z_spars[i] - self.centroid[1])**2 for i in spar_count])
46 Added: I_x += sum([
47 Added: stringer_area * (z_stringers[i] - self.centroid[1])**2
48 Added: for i in stringer_count
49 Added: ])
50 Added:
51 Added: I_z = sum(
52 Added: [cap_area * (x_spars[i] - self.centroid[0])**2 for i in spar_count])
53 Added: I_z += sum([
54 Added: stringer_area * (x_stringers[i] - self.centroid[0])**2
55 Added: for i in stringer_count
56 Added: ])
57 Added:
58 Added: I_xz = sum([
59 Added: cap_area * (x_spars[i] - self.centroid[0]) *
60 Added: (z_spars[i] - self.centroid[1]) for i in spar_count
61 Added: ])
62 Added: I_xz += sum([
63 Added: stringer_area * (x_stringers[i] - self.centroid[0]) *
64 Added: (z_stringers[i] - self.centroid[1]) for i in stringer_count
65 Added: ])
66 Added: return (I_x, I_z, I_xz)
aircraftstudio/evaluator/lift.py
index 00000000..516d649d 000000..100644
@@ -0,0 +1,30 @@
1 Added: import numpy as np
2 Added: from math import sqrt
3 Added:
4 Added:
5 Added: def _get_lift_rectangular(aircraft, lift=50):
6 Added: L_prime = np.array([
7 Added: lift / (aircraft.wing.semi_span * 2)
8 Added: for _ in range(aircraft.wing.semi_span)
9 Added: ])
10 Added: return L_prime
11 Added:
12 Added:
13 Added: def _get_lift_elliptical(aircraft, L_0=3.2):
14 Added: L_prime = np.array([
15 Added: 0.5 * L_0 / (aircraft.wing.semi_span * 2) *
16 Added: sqrt(1 - (y / aircraft.wing.semi_span)**2)
17 Added: for y in range(aircraft.wing.semi_span)
18 Added: ])
19 Added: return L_prime
20 Added:
21 Added:
22 Added: def get_lift_total(aircraft):
23 Added: """Combination of rectangular and elliptical lift."""
24 Added: # F_z = self._get_lift_rectangular(aircraft) + self._get_lift_elliptical(
25 Added: # aircraft)
26 Added: # F_z = self._get_lift_rectangular(
27 Added: # aircraft) + self._get_lift_elliptical(aircraft) / 2
28 Added: # F_z = [i + j for i, j in self._get_lift_rectangular]
29 Added: # return F_z
30 Added: return 400
aircraftstudio/evaluator/mass.py
index 00000000..7edb9268 000000..100644
@@ -0,0 +1,8 @@
1 Added: def get_mass_distribution(self, total_mass):
2 Added: F_z = [total_mass / self.semi_span for x in range(0, self.semi_span)]
3 Added: return F_z
4 Added:
5 Added:
6 Added: def get_mass_total(aircraft):
7 Added: """Get the total aircraft mass."""
8 Added: return 2000
aircraftstudio/generator/__init__.py
index 00000000..4f233cbb 000000..100644
@@ -0,0 +1,1 @@
1 Added: from .generator import *
aircraftstudio/generator/generator.py
index 00000000..898683a0 000000..100644
@@ -0,0 +1,43 @@
1 Added: """
2 Added: The generator.py module contains classes describing genetic populations
3 Added: and methods to generate default aircraft.
4 Added: """
5 Added:
6 Added: from aircraftstudio import creator
7 Added:
8 Added:
9 Added: def default_fuselage():
10 Added: pass
11 Added:
12 Added:
13 Added: def default_propulsion():
14 Added: pass
15 Added:
16 Added:
17 Added: class Population():
18 Added: """Represents a collection of aircraft."""
19 Added: def __init__(self, size):
20 Added: self.aircrafts = []
21 Added: for _ in range(size):
22 Added: self.aircrafts.append(creator.base.Aircraft.from_random())
23 Added: self.size = size
24 Added: self.results = None
25 Added: self.gen_number = 0 # incremented for every generation
26 Added:
27 Added: #TODO class methods for default and random population
28 Added: # def from_default(self, size):
29 Added: # for i in range(size):
30 Added: # self.aircrafts.append(creator.base.Aircraft.from_default())
31 Added:
32 Added: # def from_random(self, size):
33 Added: # for i in range(size):
34 Added: # self.aircrafts.append(creator.base.Aircraft.from_random())
35 Added:
36 Added: def mutate(self, prob_mt):
37 Added: """Randomly mutate the genes of prob_mt % of the population."""
38 Added: def crossover(self, prob_cx):
39 Added: """Combine the genes of prob_cx % of the population."""
40 Added: def reproduce(self, prob_rp):
41 Added: """Pass on the genes of the fittest prob_rp % of the population."""
42 Added: def fitness():
43 Added: """Rate the fitness of an individual on a relative scale (0-100)"""
creator/__init__.py
index 818c7b27..00000000 100644..000000
@@ -1,4 +0,0 @@
1 Removed: from . import base
2 Removed: from . import fuselage
3 Removed: from . import propulsion
4 Removed: from . import wing
creator/__init__.pyc
index 022f4931..00000000 100644..000000

Binary files differ

creator/base.py
index 130add31..00000000 100644..000000
@@ -1,93 +0,0 @@
1 Removed: """The base.py module contains parent classes for components."""
2 Removed:
3 Removed: import numpy as np
4 Removed: import os.path
5 Removed: import random
6 Removed: import logging
7 Removed:
8 Removed: import creator
9 Removed:
10 Removed: logging.basicConfig(filename='log_base.txt',
11 Removed: level=logging.DEBUG,
12 Removed: format='%(asctime)s - %(levelname)s - %(message)s')
13 Removed:
14 Removed:
15 Removed: class Aircraft:
16 Removed: """This class tracks all sub-components and is fed to the evaluator."""
17 Removed: name = None
18 Removed: fuselage = None
19 Removed: propulsion = None
20 Removed: wing = None
21 Removed: properties = {}
22 Removed:
23 Removed: def __init__(self):
24 Removed: self.results = {}
25 Removed:
26 Removed: def __str__(self):
27 Removed: return self.name
28 Removed:
29 Removed: @classmethod
30 Removed: def from_default(cls):
31 Removed: aircraft = creator.base.Aircraft()
32 Removed: aircraft.name = 'default_aircraft_' + str(random.randrange(1000, 9999))
33 Removed: airfoil = creator.wing.Airfoil(aircraft, 'default_airfoil')
34 Removed: airfoil.add_naca(2412)
35 Removed: soar1 = creator.wing.Spar(airfoil, 'default_spar_1', 0.30)
36 Removed: soar2 = creator.wing.Spar(airfoil, 'default_spar_2', 0.60)
37 Removed: stringer = creator.wing.Stringer(airfoil, 'default_stringer')
38 Removed: return aircraft
39 Removed:
40 Removed:
41 Removed: class Component:
42 Removed: """Basic component providing coordinates, tools and a component tree."""
43 Removed: def __init__(self, parent, name):
44 Removed: self.parent = parent
45 Removed: self.name = name
46 Removed: self.x = np.array([])
47 Removed: self.z = np.array([])
48 Removed: self.y = np.array([])
49 Removed: self.material = None
50 Removed: self.mass = float()
51 Removed: self.properties = {}
52 Removed:
53 Removed: def __str__(self):
54 Removed: return self.name
55 Removed:
56 Removed: def info_print(self, round):
57 Removed: """Print all the component's coordinates to the terminal."""
58 Removed: name = f' CREATOR DATA FOR {str(self).upper()} '
59 Removed: num_of_dashes = len(name)
60 Removed: print(num_of_dashes * '-')
61 Removed: print(name)
62 Removed: for k, v in self.__dict__.items():
63 Removed: if type(v) is not np.ndarray:
64 Removed: print(f'{k}:\n', v)
65 Removed: print(num_of_dashes * '-')
66 Removed: for k, v in self.__dict__.items():
67 Removed: if type(v) is np.ndarray:
68 Removed: print(f'{k}:\n', np.around(v, round))
69 Removed: return None
70 Removed:
71 Removed: def info_save(self,
72 Removed: save_path='/home/blendux/Projects/Aircraft_Studio/save'):
73 Removed: """Save all the object's coordinates (must be full path)."""
74 Removed: file_name = f'{self.name}_info.txt'
75 Removed: full_path = os.path.join(save_path, file_name)
76 Removed: try:
77 Removed: with open(full_path, 'w') as f:
78 Removed: for k, v in self.__dict__.items():
79 Removed: if type(v) is not np.ndarray:
80 Removed: f.write(f'{k}=\n')
81 Removed: f.write(str(v))
82 Removed: f.write("\n")
83 Removed: # print(num_of_dashes * '-')
84 Removed: for k, v in self.__dict__.items():
85 Removed: if type(v) is np.ndarray:
86 Removed: f.write(f'{k}=\n')
87 Removed: f.write(str(v))
88 Removed: f.write("\n")
89 Removed: logging.debug(f'Successfully wrote to file {full_path}')
90 Removed: except IOError:
91 Removed: print(f'Unable to write {file_name} to specified directory.\n',
92 Removed: 'Was the full path passed to the function?')
93 Removed: return None
creator/fuselage.py
index e69de29b..00000000 100644..000000
creator/log_base.txt
index e69de29b..00000000 100644..000000
creator/propulsion.py
index e69de29b..00000000 100644..000000
creator/wing.py
index 01aa6ffa..00000000 100644..000000
@@ -1,312 +0,0 @@
1 Removed: """
2 Removed: The wing.py module contains class definitions for and various components
3 Removed: we add to an airfoil (spars, stringers, and ribs).
4 Removed:
5 Removed: Classes:
6 Removed: Airfoil: instantiated with class method to provide coordinates to heirs.
7 Removed: Spar: inherits from Airfoil.
8 Removed: Stringer: also inherits from Airfoil.
9 Removed:
10 Removed: Functions:
11 Removed: plot_geom(airfoil): generates a 2D plot of the airfoil & any components.
12 Removed: """
13 Removed:
14 Removed: import logging
15 Removed: import numpy as np
16 Removed: from math import sin, cos, atan
17 Removed: import bisect as bi
18 Removed: import matplotlib.pyplot as plt
19 Removed:
20 Removed: import creator.base as base
21 Removed: import resources.materials as mt
22 Removed:
23 Removed:
24 Removed: class Airfoil(base.Component):
25 Removed: """This class represents a single NACA airfoil.
26 Removed:
27 Removed: The coordinates are saved as two np.arrays
28 Removed: for the x- and z-coordinates. The coordinates start at
29 Removed: the leading edge, travel over the airfoil's upper edge,
30 Removed: then loop back to the leading edge via the lower edge.
31 Removed:
32 Removed: This method was chosen for easier future exports
33 Removed: to 3D CAD packages like SolidWorks, which can import such
34 Removed: geometry as coordinates written in a CSV file.
35 Removed: """
36 Removed: def __init__(self,
37 Removed: parent,
38 Removed: name,
39 Removed: chord=68,
40 Removed: semi_span=150,
41 Removed: material=mt.aluminium):
42 Removed: super().__init__(parent, name)
43 Removed: parent.wing = self
44 Removed: if chord > 20:
45 Removed: self.chord = chord
46 Removed: else:
47 Removed: self.chord = 20
48 Removed: logging.debug('Chord too small, using minimum value of 20.')
49 Removed: parent
50 Removed: self.semi_span = semi_span
51 Removed: self.material = material
52 Removed: self.spars = []
53 Removed: self.stringers = []
54 Removed:
55 Removed: def add_naca(self, naca_num=2412):
56 Removed: """Generate surface geometry for a NACA airfoil.
57 Removed:
58 Removed: The nested functions perform the required steps to generate geometry,
59 Removed: and can be called to solve the geometry y-coordinate for any 'x' input.
60 Removed: Equation coefficients were retrieved from Wikipedia.org.
61 Removed:
62 Removed: Parameters:
63 Removed: naca_num: 4-digit NACA wing
64 Removed:
65 Removed: Return:
66 Removed: None
67 Removed: """
68 Removed: self.naca_num = naca_num
69 Removed: # Variables extracted from naca_num argument passed to the function
70 Removed: m = int(str(naca_num)[0]) / 100
71 Removed: p = int(str(naca_num)[1]) / 10
72 Removed: t = int(str(naca_num)[2:]) / 100
73 Removed: # x-coordinate of maximum camber
74 Removed: p_c = p * self.chord
75 Removed:
76 Removed: def get_camber(x):
77 Removed: """
78 Removed: Returns camber z-coordinate from 1 'x' along the airfoil chord.
79 Removed: """
80 Removed: z_c = float()
81 Removed: if 0 <= x < p_c:
82 Removed: z_c = (m / (p**2)) * (2 * p * (x / self.chord) -
83 Removed: (x / self.chord)**2)
84 Removed: elif p_c <= x <= self.chord:
85 Removed: z_c = (m /
86 Removed: ((1 - p)**2)) * ((1 - 2 * p) + 2 * p *
87 Removed: (x / self.chord) - (x / self.chord)**2)
88 Removed: return (z_c * self.chord)
89 Removed:
90 Removed: def get_thickness(x):
91 Removed: """Return thickness from 1 'x' along the airfoil chord."""
92 Removed: x = 0 if x < 0 else x
93 Removed: z_t = 5 * t * self.chord * (+0.2969 *
94 Removed: (x / self.chord)**0.5 - 0.1260 *
95 Removed: (x / self.chord)**1 - 0.3516 *
96 Removed: (x / self.chord)**2 + 0.2843 *
97 Removed: (x / self.chord)**3 - 0.1015 *
98 Removed: (x / self.chord)**4)
99 Removed: return z_t
100 Removed:
101 Removed: def get_theta(x):
102 Removed: dz_c = float()
103 Removed: if 0 <= x < p_c:
104 Removed: dz_c = ((2 * m) / p**2) * (p - x / self.chord)
105 Removed: elif p_c <= x <= self.chord:
106 Removed: dz_c = (2 * m) / ((1 - p)**2) * (p - x / self.chord)
107 Removed:
108 Removed: theta = atan(dz_c)
109 Removed: return theta
110 Removed:
111 Removed: def get_coord_u(x):
112 Removed: x = x - get_thickness(x) * sin(get_theta(x))
113 Removed: z = get_camber(x) + get_thickness(x) * cos(get_theta(x))
114 Removed: return (x, z)
115 Removed:
116 Removed: def get_coord_l(x):
117 Removed: x = x + get_thickness(x) * sin(get_theta(x))
118 Removed: z = get_camber(x) - get_thickness(x) * cos(get_theta(x))
119 Removed: return (x, z)
120 Removed:
121 Removed: # Densify x-coordinates 10 times for first 1/4 chord length
122 Removed: x_chord_25_percent = round(self.chord / 4)
123 Removed: x_chord = [i / 10 for i in range(x_chord_25_percent * 10)]
124 Removed: x_chord.extend(i for i in range(x_chord_25_percent, self.chord + 1))
125 Removed: # Generate our airfoil skin geometry from previous sub-functions
126 Removed: self.x_c = np.array([])
127 Removed: self.z_c = np.array([])
128 Removed: # Upper surface and camber line
129 Removed: for x in x_chord:
130 Removed: self.x_c = np.append(self.x_c, x)
131 Removed: self.z_c = np.append(self.z_c, get_camber(x))
132 Removed: self.x = np.append(self.x, get_coord_u(x)[0])
133 Removed: self.z = np.append(self.z, get_coord_u(x)[1])
134 Removed: # Lower surface
135 Removed: for x in x_chord[::-1]:
136 Removed: self.x = np.append(self.x, get_coord_l(x)[0])
137 Removed: self.z = np.append(self.z, get_coord_l(x)[1])
138 Removed: return None
139 Removed:
140 Removed:
141 Removed: class Spar(base.Component):
142 Removed: """Contains a single spar's data."""
143 Removed: def __init__(self, parent, name, loc_percent=0.30, material=mt.aluminium):
144 Removed: """Set spar location as percent of chord length."""
145 Removed: super().__init__(parent, name)
146 Removed: parent.spars.append(self)
147 Removed: self.material = material
148 Removed: self.cap_area = float()
149 Removed: # bi.bisect_left: returns index of first value in parent.x > loc
150 Removed: # This ensures that spar geom intersects with airfoil geom.
151 Removed: loc = loc_percent * parent.chord
152 Removed: # Spar upper coordinates
153 Removed: spar_u = bi.bisect_left(parent.x, loc) - 1
154 Removed: self.x = np.append(self.x, parent.x[spar_u])
155 Removed: self.z = np.append(self.z, parent.z[spar_u])
156 Removed: # Spar lower coordinates
157 Removed: spar_l = bi.bisect_left(parent.x[::-1], loc)
158 Removed: self.x = np.append(self.x, parent.x[-spar_l])
159 Removed: self.z = np.append(self.z, parent.z[-spar_l])
160 Removed: return None
161 Removed:
162 Removed: def set_cap_area(self, cap_area):
163 Removed: self.cap_area = cap_area
164 Removed: return None
165 Removed:
166 Removed: def set_mass(self, mass):
167 Removed: self.mass = mass
168 Removed: return None
169 Removed:
170 Removed:
171 Removed: class Stringer(base.Component):
172 Removed: """Contains the coordinates of all stringers."""
173 Removed: def __init__(self,
174 Removed: parent,
175 Removed: name,
176 Removed: den_u_1=4,
177 Removed: den_u_2=4,
178 Removed: den_l_1=4,
179 Removed: den_l_2=4):
180 Removed: """Add equally distributed stringers to four airfoil locations
181 Removed: (upper nose, lower nose, upper surface, lower surface).
182 Removed:
183 Removed: den_u_1: upper nose number of stringers
184 Removed: den_u_2: upper surface number of stringers
185 Removed: den_l_1: lower nose number of stringers
186 Removed: den_l_2: lower surface number of stringers
187 Removed: """
188 Removed: super().__init__(parent, name)
189 Removed: parent.stringers = self
190 Removed: self.x_start = []
191 Removed: self.x_end = []
192 Removed: self.z_start = []
193 Removed: self.z_end = []
194 Removed: self.diameter = float()
195 Removed: self.area = float()
196 Removed:
197 Removed: # Find distance between leading edge and first upper stringer
198 Removed: # interval = self.parent.spars[0].x[0] / (den_u_1 + 1)
199 Removed: interval = 2
200 Removed: # initialise first self.stringer_x at first interval
201 Removed: x = interval
202 Removed: # Add upper stringers from leading edge until first spar.
203 Removed: for _ in range(0, den_u_1):
204 Removed: # Index of the first value of airfoil.x > x
205 Removed: i = bi.bisect_left(self.parent.x, x)
206 Removed: self.x = np.append(self.x, self.parent.x[i])
207 Removed: self.z = np.append(self.z, self.parent.z[i])
208 Removed: x += interval
209 Removed: # Add upper stringers from first spar until last spar
210 Removed: interval = (self.parent.spars[-1].x[0] -
211 Removed: self.parent.spars[0].x[0]) / (den_u_2 + 1)
212 Removed: x = interval + self.parent.spars[0].x[0]
213 Removed: for _ in range(0, den_u_2):
214 Removed: i = bi.bisect_left(self.parent.x, x)
215 Removed: self.x = np.append(self.x, self.parent.x[i])
216 Removed: self.z = np.append(self.z, self.parent.z[i])
217 Removed: x += interval
218 Removed:
219 Removed: # Find distance between leading edge and first lower stringer
220 Removed: interval = self.parent.spars[0].x[1] / (den_l_1 + 1)
221 Removed: x = interval
222 Removed: # Add lower stringers from leading edge until first spar.
223 Removed: for _ in range(0, den_l_1):
224 Removed: i = bi.bisect_left(self.parent.x[::-1], x)
225 Removed: self.x = np.append(self.x, self.parent.x[-i])
226 Removed: self.z = np.append(self.z, self.parent.z[-i])
227 Removed: x += interval
228 Removed: # Add lower stringers from first spar until last spar
229 Removed: interval = (self.parent.spars[-1].x[1] -
230 Removed: self.parent.spars[0].x[1]) / (den_l_2 + 1)
231 Removed: x = interval + self.parent.spars[0].x[1]
232 Removed: for _ in range(0, den_l_2):
233 Removed: i = bi.bisect_left(self.parent.x[::-1], x)
234 Removed: self.x = np.append(self.x, self.parent.x[-i])
235 Removed: self.z = np.append(self.z, self.parent.z[-i])
236 Removed: x += interval
237 Removed: return None
238 Removed:
239 Removed: def add_area(self, area):
240 Removed: self.area = area
241 Removed: return None
242 Removed:
243 Removed: def add_mass(self, mass):
244 Removed: self.mass = len(self.x) * mass + len(self.x) * mass
245 Removed: return None
246 Removed:
247 Removed: def add_webs(self, thickness):
248 Removed: """Add webs to stringers."""
249 Removed: for _ in range(len(self.x) // 2):
250 Removed: self.x_start.append(self.x[_])
251 Removed: self.x_end.append(self.x[_ + 1])
252 Removed: self.z_start.append(self.z[_])
253 Removed: self.z_end.append(self.z[_ + 1])
254 Removed: self.thickness = thickness
255 Removed: return None
256 Removed:
257 Removed: def info_print(self, round=2):
258 Removed: super().info_print(round)
259 Removed: print('Stringer Area:\n', np.around(self.area, round))
260 Removed: return None
261 Removed:
262 Removed:
263 Removed: def plot_geom(airfoil):
264 Removed: """This function plots the airfoil's + sub-components' geometry."""
265 Removed: fig, ax = plt.subplots()
266 Removed:
267 Removed: # Plot chord
268 Removed: x = [0, airfoil.chord]
269 Removed: y = [0, 0]
270 Removed: ax.plot(x, y, linewidth='1')
271 Removed: # Plot quarter chord
272 Removed: ax.plot(airfoil.chord / 4,
273 Removed: 0,
274 Removed: '.',
275 Removed: color='g',
276 Removed: markersize=24,
277 Removed: label='Quarter-chord')
278 Removed: # Plot mean camber line
279 Removed: ax.plot(airfoil.x_c,
280 Removed: airfoil.z_c,
281 Removed: '-.',
282 Removed: color='r',
283 Removed: linewidth='2',
284 Removed: label='Mean camber line')
285 Removed: # Plot airfoil surfaces
286 Removed: ax.plot(airfoil.x, airfoil.z, color='b', linewidth='1')
287 Removed:
288 Removed: try: # Plot spars
289 Removed: for spar in airfoil.spars:
290 Removed: x = (spar.x)
291 Removed: y = (spar.z)
292 Removed: ax.plot(x, y, '-', color='y', linewidth='4')
293 Removed: except AttributeError:
294 Removed: print('No spars to plot.')
295 Removed: try: # Plot stringers
296 Removed: for i in range(len(airfoil.stringers.x)):
297 Removed: x = airfoil.stringers.x[i]
298 Removed: y = airfoil.stringers.z[i]
299 Removed: ax.plot(x, y, '.', color='y', markersize=12)
300 Removed: except AttributeError:
301 Removed: print('No stringers to plot.')
302 Removed:
303 Removed: ax.set(title='NACA ' + str(airfoil.naca_num) + ' airfoil',
304 Removed: xlabel='X axis',
305 Removed: ylabel='Z axis')
306 Removed:
307 Removed: plt.grid(axis='both', linestyle=':', linewidth=1)
308 Removed: plt.gca().set_aspect('equal', adjustable='box')
309 Removed: plt.gca().legend(bbox_to_anchor=(1, 1),
310 Removed: bbox_transform=plt.gcf().transFigure)
311 Removed: plt.show()
312 Removed: return fig, ax
evaluator/__init__.py
index a58168bf..00000000 100644..000000
@@ -1,1 +0,0 @@
1 Removed: from .evaluator import *
evaluator/dP.py
index b6aaa3b6..00000000 100644..000000
@@ -1,18 +0,0 @@
1 Removed: def get_dx(self, component):
2 Removed: return [x - self.centroid[0] for x in component.x_start]
3 Removed:
4 Removed:
5 Removed: def get_dz(self, component):
6 Removed: return [x - self.centroid[1] for x in component.x_start]
7 Removed:
8 Removed:
9 Removed: def get_dP(self, xDist, zDist, V_x, V_z, area):
10 Removed: I_x = self.I_['x']
11 Removed: I_z = self.I_['z']
12 Removed: I_xz = self.I_['xz']
13 Removed: denom = float(I_x * I_z - I_xz**2)
14 Removed: z = float()
15 Removed: for _ in range(len(xDist)):
16 Removed: z += float(-area * xDist[_] * (I_x * V_x - I_xz * V_z) / denom -
17 Removed: area * zDist[_] * (I_z * V_z - I_xz * V_x) / denom)
18 Removed: return z
evaluator/drag.py
index 73a26fce..00000000 100644..000000
@@ -1,18 +0,0 @@
1 Removed: import random
2 Removed:
3 Removed: def get_drag(aircraft, drag):
4 Removed: # Transform semi-span integer into list
5 Removed: semi_span = [x for x in range(0, aircraft.wing.semi_span)]
6 Removed:
7 Removed: # Drag increases after 80% of the semi_span
8 Removed: cutoff = round(0.8 * aircraft.wing.span)
9 Removed:
10 Removed: # Drag increases by 25% after 80% of the semi_span
11 Removed: F_x = [drag for x in semi_span[0:cutoff]]
12 Removed: F_x.extend([1.25 * drag for x in semi_span[cutoff:]])
13 Removed: return F_x
14 Removed:
15 Removed:
16 Removed: def get_drag_total(aircraft):
17 Removed: """Get total drag force acting on the aircraft."""
18 Removed: return random.random() * 100
evaluator/evaluator.py
index 18bb692a..00000000 100644..000000
@@ -1,195 +0,0 @@
1 Removed: """
2 Removed: The evaluator.py module contains functions
3 Removed: that return calculated data for an aircraft.
4 Removed: Plotting aircraft components is also possible.
5 Removed: """
6 Removed:
7 Removed: import os.path
8 Removed: import concurrent.futures
9 Removed: import matplotlib.pyplot as plt
10 Removed:
11 Removed: from . import drag, inertia, lift, mass
12 Removed:
13 Removed:
14 Removed: def analyze(aircraft):
15 Removed: """Analyze a single aircraft."""
16 Removed: results = {
17 Removed: 'Lift': lift.get_lift_total(aircraft),
18 Removed: 'Drag': drag.get_drag_total(aircraft),
19 Removed: 'Mass': mass.get_mass_total(aircraft),
20 Removed: 'Centroid': inertia.get_centroid(aircraft)
21 Removed: }
22 Removed: aircraft.results = results
23 Removed: return aircraft.name, results
24 Removed:
25 Removed:
26 Removed: def analyze_all(population):
27 Removed: """Analyze all aircraft in a given population."""
28 Removed: # for aircraft in population.aircrafts:
29 Removed: # print(analyze(aircraft))
30 Removed: with concurrent.futures.ProcessPoolExecutor() as executor:
31 Removed: results = executor.map(analyze, population.aircrafts)
32 Removed: for result in results:
33 Removed: print(result)
34 Removed: return None
35 Removed:
36 Removed: # def analysis(self, V_x, V_z):
37 Removed: # """Perform all analysis calculations and store in class instance."""
38 Removed:
39 Removed: # self.drag = self.get_drag(10)
40 Removed: # self.lift_rectangular = self.get_lift_rectangular(13.7)
41 Removed: # self.lift_elliptical = self.get_lift_elliptical(15)
42 Removed: # self.lift_total = self.get_lift_total()
43 Removed: # self.mass_dist = self.get_mass_distribution(self.mass_total)
44 Removed: # self.centroid = self.get_centroid()
45 Removed: # self.I_['x'] = self.get_inertia_terms()[0]
46 Removed: # self.I_['z'] = self.get_inertia_terms()[1]
47 Removed: # self.I_['xz'] = self.get_inertia_terms()[2]
48 Removed: # spar_dx = self.get_dx(self.spar)
49 Removed: # spar_dz = self.get_dz(self.spar)
50 Removed: # self.spar.dP_x = self.get_dP(spar_dx, spar_dz, V_x, 0,
51 Removed: # self.spar.cap_area)
52 Removed: # self.spar.dP_z = self.get_dP(spar_dx, spar_dz, 0, V_z,
53 Removed: # self.spar.cap_area)
54 Removed: # print("yayyyyy")
55 Removed: # return None
56 Removed:
57 Removed: # print(f"Analysis results for {aircraft.name}:\n", results)
58 Removed: # self.results = self.get_lift_total(aircraft)
59 Removed:
60 Removed: # self.drag = self.get_drag(10)
61 Removed: # self.lift_rectangular = self.get_lift_rectangular(13.7)
62 Removed: # self.lift_elliptical = self.get_lift_elliptical(15)
63 Removed: # self.lift_total = self.get_lift_total()
64 Removed: # self.mass_dist = self.get_mass_distribution(self.mass_total)
65 Removed: # self.centroid = self.get_centroid()
66 Removed: # self.I_['x'] = self.get_inertia_terms()[0]
67 Removed: # self.I_['z'] = self.get_inertia_terms()[1]
68 Removed: # self.I_['xz'] = self.get_inertia_terms()[2]
69 Removed: # spar_dx = self.get_dx(self.spar)
70 Removed: # spar_dz = self.get_dz(self.spar)
71 Removed: # self.spar.dP_x = self.get_dP(spar_dx, spar_dz, V_x, 0,
72 Removed: # self.spar.cap_area)
73 Removed: # self.spar.dP_z = self.get_dP(spar_dx, spar_dz, 0, V_z,
74 Removed: # self.spar.cap_area)
75 Removed: # return None
76 Removed:
77 Removed: def tree_print(self, population):
78 Removed: """Print the list of subcomponents."""
79 Removed: name = f" TREE FOR {[i.name for i in population.aircraft]} IN {self.name} "
80 Removed: num_of_dashes = len(name)
81 Removed: print(num_of_dashes * '-')
82 Removed: print(name)
83 Removed: for aircraft in population:
84 Removed: print(".")
85 Removed: print(f"`-- {aircraft}")
86 Removed: print(f" |--{aircraft.wing}")
87 Removed: print(f" | |-- {aircraft.wing.stringers}")
88 Removed: for spar in aircraft.wing.spars[:-1]:
89 Removed: print(f" | |-- {spar}")
90 Removed: print(f" | `-- {aircraft.wing.spars[-1]}")
91 Removed: print(f" |-- {aircraft.fuselage}")
92 Removed: print(f" `-- {aircraft.propulsion}")
93 Removed: print(num_of_dashes * '-')
94 Removed: return None
95 Removed:
96 Removed: def tree_save(self,
97 Removed: population,
98 Removed: save_path='/home/blendux/Projects/Aircraft_Studio/save'):
99 Removed: """Save the evaluator's tree to a file."""
100 Removed: for aircraft in population.aircraft:
101 Removed: file_name = f"{aircraft.name}_tree.txt"
102 Removed: full_path = os.path.join(save_path, file_name)
103 Removed: with open(full_path, 'w') as f:
104 Removed: try:
105 Removed: f.write(".\n")
106 Removed: f.write(f"`-- {aircraft}\n")
107 Removed: f.write(f" |--{aircraft.wing}\n")
108 Removed: for spar in aircraft.wing.spars[:-1]:
109 Removed: f.write(f" | |-- {spar}\n")
110 Removed: f.write(f" | `-- {aircraft.wing.spars[-1]}\n")
111 Removed: f.write(f" |-- {aircraft.fuselage}\n")
112 Removed: f.write(f" `-- {aircraft.propulsion}\n")
113 Removed: logging.debug(f'Successfully wrote to file {full_path}')
114 Removed:
115 Removed: except IOError:
116 Removed: print(
117 Removed: f'Unable to write {file_name} to specified directory.',
118 Removed: 'Was the full path passed to the function?')
119 Removed: return None
120 Removed:
121 Removed:
122 Removed: def plot_geom(evaluator):
123 Removed: """This function plots analysis results over the airfoil's geometry."""
124 Removed: # Plot chord
125 Removed: x_chord = [0, evaluator.chord]
126 Removed: y_chord = [0, 0]
127 Removed: plt.plot(x_chord, y_chord, linewidth='1')
128 Removed: # Plot quarter chord
129 Removed: plt.plot(evaluator.chord / 4,
130 Removed: 0,
131 Removed: '.',
132 Removed: color='g',
133 Removed: markersize=24,
134 Removed: label='Quarter-chord')
135 Removed: # Plot airfoil surfaces
136 Removed: x = [0.98 * x for x in evaluator.airfoil.x]
137 Removed: y = [0.98 * z for z in evaluator.airfoil.z]
138 Removed: plt.fill(x, y, color='w', linewidth='1', fill=False)
139 Removed: x = [1.02 * x for x in evaluator.airfoil.x]
140 Removed: y = [1.02 * z for z in evaluator.airfoil.z]
141 Removed: plt.fill(x, y, color='b', linewidth='1', fill=False)
142 Removed:
143 Removed: # Plot spars
144 Removed: try:
145 Removed: for _ in range(len(evaluator.spar.x)):
146 Removed: x = (evaluator.spar.x[_])
147 Removed: y = (evaluator.spar.z[_])
148 Removed: plt.plot(x, y, '-', color='b')
149 Removed: except AttributeError:
150 Removed: print('No spars to plot.')
151 Removed: # Plot stringers
152 Removed: try:
153 Removed: for _ in range(0, len(evaluator.stringer.x)):
154 Removed: x = evaluator.stringer.x[_]
155 Removed: y = evaluator.stringer.z[_]
156 Removed: plt.plot(x, y, '.', color='y', markersize=12)
157 Removed: except AttributeError:
158 Removed: print('No stringers to plot.')
159 Removed:
160 Removed: # Plot centroid
161 Removed: x = evaluator.centroid[0]
162 Removed: y = evaluator.centroid[1]
163 Removed: plt.plot(x, y, '.', color='r', markersize=24, label='centroid')
164 Removed:
165 Removed: # Graph formatting
166 Removed: plt.xlabel('X axis')
167 Removed: plt.ylabel('Z axis')
168 Removed:
169 Removed: plot_bound = max(evaluator.airfoil.x)
170 Removed: plt.xlim(-0.10 * plot_bound, 1.10 * plot_bound)
171 Removed: plt.ylim(-(1.10 * plot_bound / 2), (1.10 * plot_bound / 2))
172 Removed: plt.gca().set_aspect('equal', adjustable='box')
173 Removed: plt.gca().legend()
174 Removed: plt.grid(axis='both', linestyle=':', linewidth=1)
175 Removed: plt.show()
176 Removed: return None
177 Removed:
178 Removed:
179 Removed: def plot_lift(evaluator):
180 Removed: x = range(evaluator.semi_span)
181 Removed: y_1 = evaluator.lift_rectangular
182 Removed: y_2 = evaluator.lift_elliptical
183 Removed: y_3 = evaluator.lift_total
184 Removed: plt.plot(x, y_1, '.', color='b', markersize=4, label='Rectangular lift')
185 Removed: plt.plot(x, y_2, '.', color='g', markersize=4, label='Elliptical lift')
186 Removed: plt.plot(x, y_3, '.', color='r', markersize=4, label='Total lift')
187 Removed:
188 Removed: # Graph formatting
189 Removed: plt.xlabel('Semi-span location')
190 Removed: plt.ylabel('Lift')
191 Removed:
192 Removed: plt.gca().legend()
193 Removed: plt.grid(axis='both', linestyle=':', linewidth=1)
194 Removed: plt.show()
195 Removed: return None
evaluator/inertia.py
index f0477665..00000000 100644..000000
@@ -1,66 +0,0 @@
1 Removed: def get_centroid(aircraft):
2 Removed: """Return the coordinates of the centroid."""
3 Removed: # stringer_area = aircraft.wing.stringers.area
4 Removed: # cap_area = aircraft.wing.spars.cap_area
5 Removed:
6 Removed: # TODO: Fix this
7 Removed: # caps_x = [value for spar in aircraft.wing.spars.x for value in spar]
8 Removed: # caps_z = [value for spar in aircraft.wing.spars.z for value in spar]
9 Removed: # stringers_x = aircraft.wing.stringers.x
10 Removed: # stringers_z = aircraft.wing.stringers.z
11 Removed:
12 Removed: # denominator = float(
13 Removed: # len(caps_x) * cap_area + len(stringers_x) * stringer_area)
14 Removed:
15 Removed: # centroid_x = float(
16 Removed: # sum([x * cap_area
17 Removed: # for x in caps_x]) + sum([x * stringer_area for x in stringers_x]))
18 Removed: # centroid_x = centroid_x / denominator
19 Removed:
20 Removed: # centroid_z = float(
21 Removed: # sum([z * cap_area
22 Removed: # for z in caps_z]) + sum([z * stringer_area for z in stringers_z]))
23 Removed: # centroid_z = centroid_z / denominator
24 Removed:
25 Removed: # return (centroid_x, centroid_z)
26 Removed: return (200, 420)
27 Removed:
28 Removed:
29 Removed: def get_inertia_terms(self):
30 Removed: """Obtain all inertia terms."""
31 Removed: stringer_area = self.stringer.area
32 Removed: cap_area = self.spar.cap_area
33 Removed:
34 Removed: # Adds upper and lower components' coordinates to list
35 Removed: x_stringers = self.stringer.x
36 Removed: z_stringers = self.stringer.z
37 Removed: x_spars = self.spar.x[:][0] + self.spar.x[:][1]
38 Removed: z_spars = self.spar.z[:][0] + self.spar.z[:][1]
39 Removed: stringer_count = range(len(x_stringers))
40 Removed: spar_count = range(len(self.spar.x))
41 Removed:
42 Removed: # I_x is the sum of the contributions of the spar caps and stringers
43 Removed: # TODO: replace list indices with dictionary value
44 Removed: I_x = sum(
45 Removed: [cap_area * (z_spars[i] - self.centroid[1])**2 for i in spar_count])
46 Removed: I_x += sum([
47 Removed: stringer_area * (z_stringers[i] - self.centroid[1])**2
48 Removed: for i in stringer_count
49 Removed: ])
50 Removed:
51 Removed: I_z = sum(
52 Removed: [cap_area * (x_spars[i] - self.centroid[0])**2 for i in spar_count])
53 Removed: I_z += sum([
54 Removed: stringer_area * (x_stringers[i] - self.centroid[0])**2
55 Removed: for i in stringer_count
56 Removed: ])
57 Removed:
58 Removed: I_xz = sum([
59 Removed: cap_area * (x_spars[i] - self.centroid[0]) *
60 Removed: (z_spars[i] - self.centroid[1]) for i in spar_count
61 Removed: ])
62 Removed: I_xz += sum([
63 Removed: stringer_area * (x_stringers[i] - self.centroid[0]) *
64 Removed: (z_stringers[i] - self.centroid[1]) for i in stringer_count
65 Removed: ])
66 Removed: return (I_x, I_z, I_xz)
evaluator/lift.py
index 516d649d..00000000 100644..000000
@@ -1,30 +0,0 @@
1 Removed: import numpy as np
2 Removed: from math import sqrt
3 Removed:
4 Removed:
5 Removed: def _get_lift_rectangular(aircraft, lift=50):
6 Removed: L_prime = np.array([
7 Removed: lift / (aircraft.wing.semi_span * 2)
8 Removed: for _ in range(aircraft.wing.semi_span)
9 Removed: ])
10 Removed: return L_prime
11 Removed:
12 Removed:
13 Removed: def _get_lift_elliptical(aircraft, L_0=3.2):
14 Removed: L_prime = np.array([
15 Removed: 0.5 * L_0 / (aircraft.wing.semi_span * 2) *
16 Removed: sqrt(1 - (y / aircraft.wing.semi_span)**2)
17 Removed: for y in range(aircraft.wing.semi_span)
18 Removed: ])
19 Removed: return L_prime
20 Removed:
21 Removed:
22 Removed: def get_lift_total(aircraft):
23 Removed: """Combination of rectangular and elliptical lift."""
24 Removed: # F_z = self._get_lift_rectangular(aircraft) + self._get_lift_elliptical(
25 Removed: # aircraft)
26 Removed: # F_z = self._get_lift_rectangular(
27 Removed: # aircraft) + self._get_lift_elliptical(aircraft) / 2
28 Removed: # F_z = [i + j for i, j in self._get_lift_rectangular]
29 Removed: # return F_z
30 Removed: return 400
evaluator/mass.py
index 7edb9268..00000000 100644..000000
@@ -1,8 +0,0 @@
1 Removed: def get_mass_distribution(self, total_mass):
2 Removed: F_z = [total_mass / self.semi_span for x in range(0, self.semi_span)]
3 Removed: return F_z
4 Removed:
5 Removed:
6 Removed: def get_mass_total(aircraft):
7 Removed: """Get the total aircraft mass."""
8 Removed: return 2000
example.py
index 5faaae35..8bc3033f 100644..100644
@@ -1,4 +1,5 @@
1 Removed: """This example illustrates the usage of creator, evaluator and generator.
1 Added: """
2 Added: This example illustrates the usage of creator, evaluator and generator.
2 3
3 4 All the steps of airfoil creation & evaluation are detailed here;
4 5 furthermore, the generator.py module contains certain presets
@@ -9,11 +10,7 @@
9 10 Generate a population of airfoils & optimize.
10 11 """
11 12
12 Removed: import matplotlib.pyplot as plt
13 Removed:
14 Removed: import creator
15 Removed: import evaluator
16 Removed: import generator
13 Added: import aircraftstudio as acs
17 14 import resources.materials as mt
18 15
19 16 import time
@@ -54,18 +51,15 @@
54 51 # stringer2 = creator.wing.Stringer(af2, 'stringer2')
55 52 # stringer2.info_save(SAVE_PATH)
56 53
57 Removed: pop = generator.Population(200)
54 Added: population = acs.generator.Population(10000)
55 Added: acs.evaluator.analyze_all(population) # 123s with multiprocessing :-(
58 56
59 Removed: evaluator.analyze_all(pop)
57 Added: def foo(size):
58 Added: for _ in range(size):
59 Added: print(acs.evaluator.analyze(acs.creator.base.Aircraft.from_random()))
60 Added: return None
60 61
61 Removed: # for aircraft in pop.aircrafts:
62 Removed: # print(aircraft.results)
63 Removed:
64 Removed: # for i in eval.aircrafts:
65 Removed: # print(i.name)
66 Removed:
67 Removed: # for i in eval.aircrafts:
68 Removed: # print(i.results)
62 Added: foo(10000) # 106s
69 63
70 64 # Final execution time
71 65 final_time = time.time() - start_time
generator/__init__.py
index 4f233cbb..00000000 100644..000000
@@ -1,1 +0,0 @@
1 Removed: from .generator import *
generator/generator.py
index c2b81036..00000000 100644..000000
@@ -1,43 +0,0 @@
1 Removed: """
2 Removed: The generator.py module contains classes describing genetic populations
3 Removed: and methods to generate default aircraft.
4 Removed: """
5 Removed:
6 Removed: import random
7 Removed: import concurrent.futures
8 Removed:
9 Removed: import creator
10 Removed: import evaluator
11 Removed:
12 Removed:
13 Removed: def default_fuselage():
14 Removed: pass
15 Removed:
16 Removed:
17 Removed: def default_propulsion():
18 Removed: pass
19 Removed:
20 Removed:
21 Removed: class Population():
22 Removed: """Represents a collection of aircraft."""
23 Removed: def __init__(self, size):
24 Removed: self.aircrafts = []
25 Removed: for i in range(size):
26 Removed: self.aircrafts.append(creator.base.Aircraft.from_default())
27 Removed: self.size = size
28 Removed: self.results = None
29 Removed: self.gen_number = 0 # incremented for every generation
30 Removed:
31 Removed: def evaluate(self):
32 Removed: with concurrent.futures.ProcessPoolExecutor as executor:
33 Removed: for aircraft in self.aircrafts:
34 Removed: executor.submit(evaluator.analyze, aircraft)
35 Removed:
36 Removed: def mutate(self, prob_mt):
37 Removed: """Randomly mutate the genes of prob_mt % of the population."""
38 Removed: def crossover(self, prob_cx):
39 Removed: """Combine the genes of prob_cx % of the population."""
40 Removed: def reproduce(self, prob_rp):
41 Removed: """Pass on the genes of the fittest prob_rp % of the population."""
42 Removed: def fitness():
43 Removed: """Rate the fitness of an individual on a relative scale (0-100)"""
log_base.txt
index e69de29b..65b05830 100644..100644
@@ -0,0 +1,208 @@
1 Added: 2019-10-22 15:23:21,536 - DEBUG - $HOME=/home/blendux
2 Added: 2019-10-22 15:23:21,536 - DEBUG - CONFIGDIR=/home/blendux/.config/matplotlib
3 Added: 2019-10-22 15:23:21,536 - DEBUG - matplotlib data path: /usr/lib/python3.7/site-packages/matplotlib/mpl-data
4 Added: 2019-10-22 15:23:21,541 - DEBUG - loaded rc file /usr/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc
5 Added: 2019-10-22 15:23:21,543 - DEBUG - matplotlib version 3.1.1
6 Added: 2019-10-22 15:23:21,543 - DEBUG - interactive is False
7 Added: 2019-10-22 15:23:21,543 - DEBUG - platform is linux
8 Added: 2019-10-22 15:23:21,543 - DEBUG - loaded modules: ['sys', 'builtins', '_frozen_importlib', '_imp', '_thread', '_warnings', '_weakref', 'zipimport', '_frozen_importlib_external', '_io', 'marshal', 'posix', 'encodings', 'codecs', '_codecs', 'encodings.aliases', 'encodings.utf_8', '_signal', '__main__', 'encodings.latin_1', 'io', 'abc', '_abc', 'site', 'os', 'stat', '_stat', 'posixpath', 'genericpath', 'os.path', '_collections_abc', '_sitebuiltins', '_bootlocale', '_locale', 'types', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'warnings', 'importlib.util', 'importlib.abc', 'importlib.machinery', 'contextlib', 'collections', 'operator', '_operator', 'keyword', 'heapq', '_heapq', 'itertools', 'reprlib', '_collections', 'functools', '_functools', 'mpl_toolkits', 'sphinxcontrib', 'aircraftstudio', 'aircraftstudio.creator', 'aircraftstudio.creator.base', 'numpy', '__future__', 'numpy._globals', 'numpy.__config__', 'numpy.version', 'numpy._distributor_init', 'numpy.core', 'numpy.core.info', 'numpy.core.multiarray', 'numpy.core.overrides', 'textwrap', 're', 'enum', 'sre_compile', '_sre', 'sre_parse', 'sre_constants', 'copyreg', 'datetime', 'time', 'math', '_datetime', 'numpy.core._multiarray_umath', 'numpy.compat', 'numpy.compat._inspect', 'numpy.compat.py3k', 'pathlib', 'fnmatch', 'ntpath', 'errno', 'urllib', 'urllib.parse', 'pickle', 'struct', '_struct', '_compat_pickle', '_pickle', 'numpy.core.umath', 'numpy.core.numerictypes', 'numbers', 'numpy.core._string_helpers', 'numpy.core._type_aliases', 'numpy.core._dtype', 'numpy.core.numeric', 'numpy.core._exceptions', 'numpy.core._asarray', 'numpy.core._ufunc_config', 'collections.abc', 'numpy.core.fromnumeric', 'numpy.core._methods', 'numpy.core.arrayprint', 'numpy.core.defchararray', 'numpy.core.records', 'numpy.core.memmap', 'numpy.core.function_base', 'numpy.core.machar', 'numpy.core.getlimits', 'numpy.core.shape_base', 'numpy.core.einsumfunc', 'numpy.core._add_newdocs', 'numpy.core._multiarray_tests', 'numpy.core._dtype_ctypes', '_ctypes', 'ctypes', 'ctypes._endian', 'numpy.core._internal', 'platform', 'subprocess', 'signal', '_posixsubprocess', 'select', 'selectors', 'threading', 'traceback', 'linecache', 'tokenize', 'token', '_weakrefset', 'numpy._pytesttester', 'numpy.lib', 'numpy.lib.info', 'numpy.lib.type_check', 'numpy.lib.ufunclike', 'numpy.lib.index_tricks', 'numpy.matrixlib', 'numpy.matrixlib.defmatrix', 'ast', '_ast', 'numpy.linalg', 'numpy.linalg.info', 'numpy.linalg.linalg', 'numpy.lib.twodim_base', 'numpy.linalg.lapack_lite', 'numpy.linalg._umath_linalg', 'numpy.lib.function_base', 'numpy.lib.histograms', 'numpy.lib.stride_tricks', 'numpy.lib.mixins', 'numpy.lib.nanfunctions', 'numpy.lib.shape_base', 'numpy.lib.scimath', 'numpy.lib.polynomial', 'numpy.lib.utils', 'numpy.lib.arraysetops', 'numpy.lib.npyio', 'weakref', 'numpy.lib.format', 'numpy.lib._datasource', 'shutil', 'zlib', 'bz2', '_compression', '_bz2', 'lzma', '_lzma', 'pwd', 'grp', 'numpy.lib._iotools', 'numpy.lib.financial', 'decimal', '_pydecimal', 'contextvars', '_contextvars', 'locale', 'numpy.lib.arrayterator', 'numpy.lib.arraypad', 'numpy.lib._version', 'numpy.fft', 'numpy.fft._pocketfft', 'numpy.fft._pocketfft_internal', 'numpy.fft.helper', 'numpy.polynomial', 'numpy.polynomial.polynomial', 'numpy.polynomial.polyutils', 'numpy.polynomial._polybase', 'numpy.polynomial.chebyshev', 'numpy.polynomial.legendre', 'numpy.polynomial.hermite', 'numpy.polynomial.hermite_e', 'numpy.polynomial.laguerre', 'numpy.random', 'numpy.random._pickle', 'numpy.random.mtrand', 'cython_runtime', 'numpy.random.common', 'numpy.random.bounded_integers', 'numpy.random.mt19937', 'numpy.random.bit_generator', '_cython_0_29_13', 'secrets', 'base64', 'binascii', 'hmac', '_hashlib', 'hashlib', '_blake2', '_sha3', 'random', 'bisect', '_bisect', '_random', 'numpy.random.philox', 'numpy.random.pcg64', 'numpy.random.sfc64', 'numpy.random.generator', 'numpy.ctypeslib', 'numpy.ma', 'numpy.ma.core', 'numpy.ma.extras', 'numpy.testing', 'unittest', 'unittest.result', 'unittest.util', 'unittest.case', 'difflib', 'logging', 'string', '_string', 'atexit', 'pprint', 'unittest.suite', 'unittest.loader', 'unittest.main', 'argparse', 'gettext', 'unittest.runner', 'unittest.signals', 'numpy.testing._private', 'numpy.testing._private.utils', 'gc', 'tempfile', 'numpy.testing._private.decorators', 'numpy.testing._private.nosetester', 'aircraftstudio.creator.fuselage', 'aircraftstudio.creator.propulsion', 'aircraftstudio.creator.wing', 'matplotlib', 'distutils', 'distutils.version', 'inspect', 'dis', 'opcode', '_opcode', 'matplotlib.cbook', 'glob', 'gzip', 'matplotlib.cbook.deprecation', 'matplotlib.rcsetup', 'matplotlib.fontconfig_pattern', 'pyparsing', 'copy', 'matplotlib.colors', 'matplotlib._color_data', 'cycler', 'six', 'six.moves', 'matplotlib._version', 'json', 'json.decoder', 'json.scanner', '_json', 'json.encoder', 'matplotlib.ft2font', 'dateutil', 'dateutil._version', 'kiwisolver', 'socket', '_socket']
9 Added: 2019-10-22 15:23:21,578 - DEBUG - CACHEDIR=/home/blendux/.cache/matplotlib
10 Added: 2019-10-22 15:23:21,580 - DEBUG - Using fontManager instance from /home/blendux/.cache/matplotlib/fontlist-v310.json
11 Added: 2019-10-22 15:23:21,677 - DEBUG - Loaded backend qt5agg version unknown.
12 Added: 2019-10-22 15:23:21,688 - DEBUG - Loaded backend tkagg version unknown.
13 Added: 2019-10-22 15:23:21,689 - DEBUG - Loaded backend TkAgg version unknown.
14 Added: 2019-10-22 15:47:34,956 - DEBUG - $HOME=/home/blendux
15 Added: 2019-10-22 15:47:34,956 - DEBUG - CONFIGDIR=/home/blendux/.config/matplotlib
16 Added: 2019-10-22 15:47:34,957 - DEBUG - matplotlib data path: /usr/lib/python3.7/site-packages/matplotlib/mpl-data
17 Added: 2019-10-22 15:47:34,961 - DEBUG - loaded rc file /usr/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc
18 Added: 2019-10-22 15:47:34,963 - DEBUG - matplotlib version 3.1.1
19 Added: 2019-10-22 15:47:34,963 - DEBUG - interactive is False
20 Added: 2019-10-22 15:47:34,963 - DEBUG - platform is linux
21 Added: 2019-10-22 15:47:34,963 - DEBUG - loaded modules: ['sys', 'builtins', '_frozen_importlib', '_imp', '_thread', '_warnings', '_weakref', 'zipimport', '_frozen_importlib_external', '_io', 'marshal', 'posix', 'encodings', 'codecs', '_codecs', 'encodings.aliases', 'encodings.utf_8', '_signal', '__main__', 'encodings.latin_1', 'io', 'abc', '_abc', 'site', 'os', 'stat', '_stat', 'posixpath', 'genericpath', 'os.path', '_collections_abc', '_sitebuiltins', '_bootlocale', '_locale', 'types', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'warnings', 'importlib.util', 'importlib.abc', 'importlib.machinery', 'contextlib', 'collections', 'operator', '_operator', 'keyword', 'heapq', '_heapq', 'itertools', 'reprlib', '_collections', 'functools', '_functools', 'mpl_toolkits', 'sphinxcontrib', 'aircraftstudio', 'aircraftstudio.creator', 'aircraftstudio.creator.base', 'numpy', '__future__', 'numpy._globals', 'numpy.__config__', 'numpy.version', 'numpy._distributor_init', 'numpy.core', 'numpy.core.info', 'numpy.core.multiarray', 'numpy.core.overrides', 'textwrap', 're', 'enum', 'sre_compile', '_sre', 'sre_parse', 'sre_constants', 'copyreg', 'datetime', 'time', 'math', '_datetime', 'numpy.core._multiarray_umath', 'numpy.compat', 'numpy.compat._inspect', 'numpy.compat.py3k', 'pathlib', 'fnmatch', 'ntpath', 'errno', 'urllib', 'urllib.parse', 'pickle', 'struct', '_struct', '_compat_pickle', '_pickle', 'numpy.core.umath', 'numpy.core.numerictypes', 'numbers', 'numpy.core._string_helpers', 'numpy.core._type_aliases', 'numpy.core._dtype', 'numpy.core.numeric', 'numpy.core._exceptions', 'numpy.core._asarray', 'numpy.core._ufunc_config', 'collections.abc', 'numpy.core.fromnumeric', 'numpy.core._methods', 'numpy.core.arrayprint', 'numpy.core.defchararray', 'numpy.core.records', 'numpy.core.memmap', 'numpy.core.function_base', 'numpy.core.machar', 'numpy.core.getlimits', 'numpy.core.shape_base', 'numpy.core.einsumfunc', 'numpy.core._add_newdocs', 'numpy.core._multiarray_tests', 'numpy.core._dtype_ctypes', '_ctypes', 'ctypes', 'ctypes._endian', 'numpy.core._internal', 'platform', 'subprocess', 'signal', '_posixsubprocess', 'select', 'selectors', 'threading', 'traceback', 'linecache', 'tokenize', 'token', '_weakrefset', 'numpy._pytesttester', 'numpy.lib', 'numpy.lib.info', 'numpy.lib.type_check', 'numpy.lib.ufunclike', 'numpy.lib.index_tricks', 'numpy.matrixlib', 'numpy.matrixlib.defmatrix', 'ast', '_ast', 'numpy.linalg', 'numpy.linalg.info', 'numpy.linalg.linalg', 'numpy.lib.twodim_base', 'numpy.linalg.lapack_lite', 'numpy.linalg._umath_linalg', 'numpy.lib.function_base', 'numpy.lib.histograms', 'numpy.lib.stride_tricks', 'numpy.lib.mixins', 'numpy.lib.nanfunctions', 'numpy.lib.shape_base', 'numpy.lib.scimath', 'numpy.lib.polynomial', 'numpy.lib.utils', 'numpy.lib.arraysetops', 'numpy.lib.npyio', 'weakref', 'numpy.lib.format', 'numpy.lib._datasource', 'shutil', 'zlib', 'bz2', '_compression', '_bz2', 'lzma', '_lzma', 'pwd', 'grp', 'numpy.lib._iotools', 'numpy.lib.financial', 'decimal', '_pydecimal', 'contextvars', '_contextvars', 'locale', 'numpy.lib.arrayterator', 'numpy.lib.arraypad', 'numpy.lib._version', 'numpy.fft', 'numpy.fft._pocketfft', 'numpy.fft._pocketfft_internal', 'numpy.fft.helper', 'numpy.polynomial', 'numpy.polynomial.polynomial', 'numpy.polynomial.polyutils', 'numpy.polynomial._polybase', 'numpy.polynomial.chebyshev', 'numpy.polynomial.legendre', 'numpy.polynomial.hermite', 'numpy.polynomial.hermite_e', 'numpy.polynomial.laguerre', 'numpy.random', 'numpy.random._pickle', 'numpy.random.mtrand', 'cython_runtime', 'numpy.random.common', 'numpy.random.bounded_integers', 'numpy.random.mt19937', 'numpy.random.bit_generator', '_cython_0_29_13', 'secrets', 'base64', 'binascii', 'hmac', '_hashlib', 'hashlib', '_blake2', '_sha3', 'random', 'bisect', '_bisect', '_random', 'numpy.random.philox', 'numpy.random.pcg64', 'numpy.random.sfc64', 'numpy.random.generator', 'numpy.ctypeslib', 'numpy.ma', 'numpy.ma.core', 'numpy.ma.extras', 'numpy.testing', 'unittest', 'unittest.result', 'unittest.util', 'unittest.case', 'difflib', 'logging', 'string', '_string', 'atexit', 'pprint', 'unittest.suite', 'unittest.loader', 'unittest.main', 'argparse', 'gettext', 'unittest.runner', 'unittest.signals', 'numpy.testing._private', 'numpy.testing._private.utils', 'gc', 'tempfile', 'numpy.testing._private.decorators', 'numpy.testing._private.nosetester', 'aircraftstudio.creator.fuselage', 'aircraftstudio.creator.propulsion', 'aircraftstudio.creator.wing', 'matplotlib', 'distutils', 'distutils.version', 'inspect', 'dis', 'opcode', '_opcode', 'matplotlib.cbook', 'glob', 'gzip', 'matplotlib.cbook.deprecation', 'matplotlib.rcsetup', 'matplotlib.fontconfig_pattern', 'pyparsing', 'copy', 'matplotlib.colors', 'matplotlib._color_data', 'cycler', 'six', 'six.moves', 'matplotlib._version', 'json', 'json.decoder', 'json.scanner', '_json', 'json.encoder', 'matplotlib.ft2font', 'dateutil', 'dateutil._version', 'kiwisolver', 'socket', '_socket']
22 Added: 2019-10-22 15:47:34,996 - DEBUG - CACHEDIR=/home/blendux/.cache/matplotlib
23 Added: 2019-10-22 15:47:34,997 - DEBUG - Using fontManager instance from /home/blendux/.cache/matplotlib/fontlist-v310.json
24 Added: 2019-10-22 15:47:35,087 - DEBUG - Loaded backend qt5agg version unknown.
25 Added: 2019-10-22 15:47:35,097 - DEBUG - Loaded backend tkagg version unknown.
26 Added: 2019-10-22 15:47:35,098 - DEBUG - Loaded backend TkAgg version unknown.
27 Added: 2019-10-31 19:35:35,989 - DEBUG - $HOME=/home/blendux
28 Added: 2019-10-31 19:35:35,991 - DEBUG - CONFIGDIR=/home/blendux/.config/matplotlib
29 Added: 2019-10-31 19:35:35,992 - DEBUG - matplotlib data path: /usr/lib/python3.7/site-packages/matplotlib/mpl-data
30 Added: 2019-10-31 19:35:36,029 - DEBUG - loaded rc file /usr/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc
31 Added: 2019-10-31 19:35:36,040 - DEBUG - matplotlib version 3.1.1
32 Added: 2019-10-31 19:35:36,041 - DEBUG - interactive is False
33 Added: 2019-10-31 19:35:36,042 - DEBUG - platform is linux
34 Added: 2019-10-31 19:35:36,042 - DEBUG - loaded modules: ['sys', 'builtins', '_frozen_importlib', '_imp', '_thread', '_warnings', '_weakref', 'zipimport', '_frozen_importlib_external', '_io', 'marshal', 'posix', 'encodings', 'codecs', '_codecs', 'encodings.aliases', 'encodings.utf_8', '_signal', '__main__', 'encodings.latin_1', 'io', 'abc', '_abc', 'site', 'os', 'stat', '_stat', 'posixpath', 'genericpath', 'os.path', '_collections_abc', '_sitebuiltins', '_bootlocale', '_locale', 'types', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'warnings', 'importlib.util', 'importlib.abc', 'importlib.machinery', 'contextlib', 'collections', 'operator', '_operator', 'keyword', 'heapq', '_heapq', 'itertools', 'reprlib', '_collections', 'functools', '_functools', 'mpl_toolkits', 'sphinxcontrib', 'aircraftstudio', 'aircraftstudio.creator', 'aircraftstudio.creator.base', 'numpy', '__future__', 'numpy._globals', 'numpy.__config__', 'numpy.version', 'numpy._distributor_init', 'numpy.core', 'numpy.core.info', 'numpy.core.multiarray', 'numpy.core.overrides', 'textwrap', 're', 'enum', 'sre_compile', '_sre', 'sre_parse', 'sre_constants', 'copyreg', 'datetime', 'time', 'math', '_datetime', 'numpy.core._multiarray_umath', 'numpy.compat', 'numpy.compat._inspect', 'numpy.compat.py3k', 'pathlib', 'fnmatch', 'ntpath', 'errno', 'urllib', 'urllib.parse', 'pickle', 'struct', '_struct', '_compat_pickle', '_pickle', 'numpy.core.umath', 'numpy.core.numerictypes', 'numbers', 'numpy.core._string_helpers', 'numpy.core._type_aliases', 'numpy.core._dtype', 'numpy.core.numeric', 'numpy.core._exceptions', 'numpy.core._asarray', 'numpy.core._ufunc_config', 'collections.abc', 'numpy.core.fromnumeric', 'numpy.core._methods', 'numpy.core.arrayprint', 'numpy.core.defchararray', 'numpy.core.records', 'numpy.core.memmap', 'numpy.core.function_base', 'numpy.core.machar', 'numpy.core.getlimits', 'numpy.core.shape_base', 'numpy.core.einsumfunc', 'numpy.core._add_newdocs', 'numpy.core._multiarray_tests', 'numpy.core._dtype_ctypes', '_ctypes', 'ctypes', 'ctypes._endian', 'numpy.core._internal', 'platform', 'subprocess', 'signal', '_posixsubprocess', 'select', 'selectors', 'threading', 'traceback', 'linecache', 'tokenize', 'token', '_weakrefset', 'numpy._pytesttester', 'numpy.lib', 'numpy.lib.info', 'numpy.lib.type_check', 'numpy.lib.ufunclike', 'numpy.lib.index_tricks', 'numpy.matrixlib', 'numpy.matrixlib.defmatrix', 'ast', '_ast', 'numpy.linalg', 'numpy.linalg.info', 'numpy.linalg.linalg', 'numpy.lib.twodim_base', 'numpy.linalg.lapack_lite', 'numpy.linalg._umath_linalg', 'numpy.lib.function_base', 'numpy.lib.histograms', 'numpy.lib.stride_tricks', 'numpy.lib.mixins', 'numpy.lib.nanfunctions', 'numpy.lib.shape_base', 'numpy.lib.scimath', 'numpy.lib.polynomial', 'numpy.lib.utils', 'numpy.lib.arraysetops', 'numpy.lib.npyio', 'weakref', 'numpy.lib.format', 'numpy.lib._datasource', 'shutil', 'zlib', 'bz2', '_compression', '_bz2', 'lzma', '_lzma', 'pwd', 'grp', 'numpy.lib._iotools', 'numpy.lib.financial', 'decimal', '_pydecimal', 'contextvars', '_contextvars', 'locale', 'numpy.lib.arrayterator', 'numpy.lib.arraypad', 'numpy.lib._version', 'numpy.fft', 'numpy.fft._pocketfft', 'numpy.fft._pocketfft_internal', 'numpy.fft.helper', 'numpy.polynomial', 'numpy.polynomial.polynomial', 'numpy.polynomial.polyutils', 'numpy.polynomial._polybase', 'numpy.polynomial.chebyshev', 'numpy.polynomial.legendre', 'numpy.polynomial.hermite', 'numpy.polynomial.hermite_e', 'numpy.polynomial.laguerre', 'numpy.random', 'numpy.random._pickle', 'numpy.random.mtrand', 'cython_runtime', 'numpy.random.common', 'numpy.random.bounded_integers', 'numpy.random.mt19937', 'numpy.random.bit_generator', '_cython_0_29_13', 'secrets', 'base64', 'binascii', 'hmac', '_hashlib', 'hashlib', '_blake2', '_sha3', 'random', 'bisect', '_bisect', '_random', 'numpy.random.philox', 'numpy.random.pcg64', 'numpy.random.sfc64', 'numpy.random.generator', 'numpy.ctypeslib', 'numpy.ma', 'numpy.ma.core', 'numpy.ma.extras', 'numpy.testing', 'unittest', 'unittest.result', 'unittest.util', 'unittest.case', 'difflib', 'logging', 'string', '_string', 'atexit', 'pprint', 'unittest.suite', 'unittest.loader', 'unittest.main', 'argparse', 'gettext', 'unittest.runner', 'unittest.signals', 'numpy.testing._private', 'numpy.testing._private.utils', 'gc', 'tempfile', 'numpy.testing._private.decorators', 'numpy.testing._private.nosetester', 'aircraftstudio.creator.fuselage', 'aircraftstudio.creator.propulsion', 'aircraftstudio.creator.wing', 'matplotlib', 'distutils', 'distutils.version', 'inspect', 'dis', 'opcode', '_opcode', 'matplotlib.cbook', 'glob', 'gzip', 'matplotlib.cbook.deprecation', 'matplotlib.rcsetup', 'matplotlib.fontconfig_pattern', 'pyparsing', 'copy', 'matplotlib.colors', 'matplotlib._color_data', 'cycler', 'six', 'six.moves', 'matplotlib._version', 'json', 'json.decoder', 'json.scanner', '_json', 'json.encoder', 'matplotlib.ft2font', 'dateutil', 'dateutil._version', 'kiwisolver', 'socket', '_socket']
35 Added: 2019-10-31 19:35:36,325 - DEBUG - CACHEDIR=/home/blendux/.cache/matplotlib
36 Added: 2019-10-31 19:35:36,335 - DEBUG - Using fontManager instance from /home/blendux/.cache/matplotlib/fontlist-v310.json
37 Added: 2019-10-31 19:35:37,204 - DEBUG - Loaded backend qt5agg version unknown.
38 Added: 2019-10-31 19:35:37,302 - DEBUG - Loaded backend tkagg version unknown.
39 Added: 2019-10-31 19:35:37,305 - DEBUG - Loaded backend TkAgg version unknown.
40 Added: 2019-10-31 19:36:17,660 - DEBUG - $HOME=/home/blendux
41 Added: 2019-10-31 19:36:17,661 - DEBUG - CONFIGDIR=/home/blendux/.config/matplotlib
42 Added: 2019-10-31 19:36:17,662 - DEBUG - matplotlib data path: /usr/lib/python3.7/site-packages/matplotlib/mpl-data
43 Added: 2019-10-31 19:36:17,697 - DEBUG - loaded rc file /usr/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc
44 Added: 2019-10-31 19:36:17,708 - DEBUG - matplotlib version 3.1.1
45 Added: 2019-10-31 19:36:17,709 - DEBUG - interactive is False
46 Added: 2019-10-31 19:36:17,709 - DEBUG - platform is linux
47 Added: 2019-10-31 19:36:17,709 - DEBUG - loaded modules: ['sys', 'builtins', '_frozen_importlib', '_imp', '_thread', '_warnings', '_weakref', 'zipimport', '_frozen_importlib_external', '_io', 'marshal', 'posix', 'encodings', 'codecs', '_codecs', 'encodings.aliases', 'encodings.utf_8', '_signal', '__main__', 'encodings.latin_1', 'io', 'abc', '_abc', 'site', 'os', 'stat', '_stat', 'posixpath', 'genericpath', 'os.path', '_collections_abc', '_sitebuiltins', '_bootlocale', '_locale', 'types', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'warnings', 'importlib.util', 'importlib.abc', 'importlib.machinery', 'contextlib', 'collections', 'operator', '_operator', 'keyword', 'heapq', '_heapq', 'itertools', 'reprlib', '_collections', 'functools', '_functools', 'mpl_toolkits', 'sphinxcontrib', 'aircraftstudio', 'aircraftstudio.creator', 'aircraftstudio.creator.base', 'numpy', '__future__', 'numpy._globals', 'numpy.__config__', 'numpy.version', 'numpy._distributor_init', 'numpy.core', 'numpy.core.info', 'numpy.core.multiarray', 'numpy.core.overrides', 'textwrap', 're', 'enum', 'sre_compile', '_sre', 'sre_parse', 'sre_constants', 'copyreg', 'datetime', 'time', 'math', '_datetime', 'numpy.core._multiarray_umath', 'numpy.compat', 'numpy.compat._inspect', 'numpy.compat.py3k', 'pathlib', 'fnmatch', 'ntpath', 'errno', 'urllib', 'urllib.parse', 'pickle', 'struct', '_struct', '_compat_pickle', '_pickle', 'numpy.core.umath', 'numpy.core.numerictypes', 'numbers', 'numpy.core._string_helpers', 'numpy.core._type_aliases', 'numpy.core._dtype', 'numpy.core.numeric', 'numpy.core._exceptions', 'numpy.core._asarray', 'numpy.core._ufunc_config', 'collections.abc', 'numpy.core.fromnumeric', 'numpy.core._methods', 'numpy.core.arrayprint', 'numpy.core.defchararray', 'numpy.core.records', 'numpy.core.memmap', 'numpy.core.function_base', 'numpy.core.machar', 'numpy.core.getlimits', 'numpy.core.shape_base', 'numpy.core.einsumfunc', 'numpy.core._add_newdocs', 'numpy.core._multiarray_tests', 'numpy.core._dtype_ctypes', '_ctypes', 'ctypes', 'ctypes._endian', 'numpy.core._internal', 'platform', 'subprocess', 'signal', '_posixsubprocess', 'select', 'selectors', 'threading', 'traceback', 'linecache', 'tokenize', 'token', '_weakrefset', 'numpy._pytesttester', 'numpy.lib', 'numpy.lib.info', 'numpy.lib.type_check', 'numpy.lib.ufunclike', 'numpy.lib.index_tricks', 'numpy.matrixlib', 'numpy.matrixlib.defmatrix', 'ast', '_ast', 'numpy.linalg', 'numpy.linalg.info', 'numpy.linalg.linalg', 'numpy.lib.twodim_base', 'numpy.linalg.lapack_lite', 'numpy.linalg._umath_linalg', 'numpy.lib.function_base', 'numpy.lib.histograms', 'numpy.lib.stride_tricks', 'numpy.lib.mixins', 'numpy.lib.nanfunctions', 'numpy.lib.shape_base', 'numpy.lib.scimath', 'numpy.lib.polynomial', 'numpy.lib.utils', 'numpy.lib.arraysetops', 'numpy.lib.npyio', 'weakref', 'numpy.lib.format', 'numpy.lib._datasource', 'shutil', 'zlib', 'bz2', '_compression', '_bz2', 'lzma', '_lzma', 'pwd', 'grp', 'numpy.lib._iotools', 'numpy.lib.financial', 'decimal', '_pydecimal', 'contextvars', '_contextvars', 'locale', 'numpy.lib.arrayterator', 'numpy.lib.arraypad', 'numpy.lib._version', 'numpy.fft', 'numpy.fft._pocketfft', 'numpy.fft._pocketfft_internal', 'numpy.fft.helper', 'numpy.polynomial', 'numpy.polynomial.polynomial', 'numpy.polynomial.polyutils', 'numpy.polynomial._polybase', 'numpy.polynomial.chebyshev', 'numpy.polynomial.legendre', 'numpy.polynomial.hermite', 'numpy.polynomial.hermite_e', 'numpy.polynomial.laguerre', 'numpy.random', 'numpy.random._pickle', 'numpy.random.mtrand', 'cython_runtime', 'numpy.random.common', 'numpy.random.bounded_integers', 'numpy.random.mt19937', 'numpy.random.bit_generator', '_cython_0_29_13', 'secrets', 'base64', 'binascii', 'hmac', '_hashlib', 'hashlib', '_blake2', '_sha3', 'random', 'bisect', '_bisect', '_random', 'numpy.random.philox', 'numpy.random.pcg64', 'numpy.random.sfc64', 'numpy.random.generator', 'numpy.ctypeslib', 'numpy.ma', 'numpy.ma.core', 'numpy.ma.extras', 'numpy.testing', 'unittest', 'unittest.result', 'unittest.util', 'unittest.case', 'difflib', 'logging', 'string', '_string', 'atexit', 'pprint', 'unittest.suite', 'unittest.loader', 'unittest.main', 'argparse', 'gettext', 'unittest.runner', 'unittest.signals', 'numpy.testing._private', 'numpy.testing._private.utils', 'gc', 'tempfile', 'numpy.testing._private.decorators', 'numpy.testing._private.nosetester', 'aircraftstudio.creator.fuselage', 'aircraftstudio.creator.propulsion', 'aircraftstudio.creator.wing', 'matplotlib', 'distutils', 'distutils.version', 'inspect', 'dis', 'opcode', '_opcode', 'matplotlib.cbook', 'glob', 'gzip', 'matplotlib.cbook.deprecation', 'matplotlib.rcsetup', 'matplotlib.fontconfig_pattern', 'pyparsing', 'copy', 'matplotlib.colors', 'matplotlib._color_data', 'cycler', 'six', 'six.moves', 'matplotlib._version', 'json', 'json.decoder', 'json.scanner', '_json', 'json.encoder', 'matplotlib.ft2font', 'dateutil', 'dateutil._version', 'kiwisolver', 'socket', '_socket']
48 Added: 2019-10-31 19:36:17,956 - DEBUG - CACHEDIR=/home/blendux/.cache/matplotlib
49 Added: 2019-10-31 19:36:17,965 - DEBUG - Using fontManager instance from /home/blendux/.cache/matplotlib/fontlist-v310.json
50 Added: 2019-10-31 19:36:18,655 - DEBUG - Loaded backend qt5agg version unknown.
51 Added: 2019-10-31 19:36:18,728 - DEBUG - Loaded backend tkagg version unknown.
52 Added: 2019-10-31 19:36:18,731 - DEBUG - Loaded backend TkAgg version unknown.
53 Added: 2019-10-31 19:40:15,940 - DEBUG - $HOME=/home/blendux
54 Added: 2019-10-31 19:40:15,942 - DEBUG - CONFIGDIR=/home/blendux/.config/matplotlib
55 Added: 2019-10-31 19:40:15,943 - DEBUG - matplotlib data path: /usr/lib/python3.7/site-packages/matplotlib/mpl-data
56 Added: 2019-10-31 19:40:15,978 - DEBUG - loaded rc file /usr/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc
57 Added: 2019-10-31 19:40:15,990 - DEBUG - matplotlib version 3.1.1
58 Added: 2019-10-31 19:40:15,990 - DEBUG - interactive is False
59 Added: 2019-10-31 19:40:15,991 - DEBUG - platform is linux
60 Added: 2019-10-31 19:40:15,991 - DEBUG - loaded modules: ['sys', 'builtins', '_frozen_importlib', '_imp', '_thread', '_warnings', '_weakref', 'zipimport', '_frozen_importlib_external', '_io', 'marshal', 'posix', 'encodings', 'codecs', '_codecs', 'encodings.aliases', 'encodings.utf_8', '_signal', '__main__', 'encodings.latin_1', 'io', 'abc', '_abc', 'site', 'os', 'stat', '_stat', 'posixpath', 'genericpath', 'os.path', '_collections_abc', '_sitebuiltins', '_bootlocale', '_locale', 'types', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'warnings', 'importlib.util', 'importlib.abc', 'importlib.machinery', 'contextlib', 'collections', 'operator', '_operator', 'keyword', 'heapq', '_heapq', 'itertools', 'reprlib', '_collections', 'functools', '_functools', 'mpl_toolkits', 'sphinxcontrib', 'aircraftstudio', 'aircraftstudio.creator', 'aircraftstudio.creator.base', 'numpy', '__future__', 'numpy._globals', 'numpy.__config__', 'numpy.version', 'numpy._distributor_init', 'numpy.core', 'numpy.core.info', 'numpy.core.multiarray', 'numpy.core.overrides', 'textwrap', 're', 'enum', 'sre_compile', '_sre', 'sre_parse', 'sre_constants', 'copyreg', 'datetime', 'time', 'math', '_datetime', 'numpy.core._multiarray_umath', 'numpy.compat', 'numpy.compat._inspect', 'numpy.compat.py3k', 'pathlib', 'fnmatch', 'ntpath', 'errno', 'urllib', 'urllib.parse', 'pickle', 'struct', '_struct', '_compat_pickle', '_pickle', 'numpy.core.umath', 'numpy.core.numerictypes', 'numbers', 'numpy.core._string_helpers', 'numpy.core._type_aliases', 'numpy.core._dtype', 'numpy.core.numeric', 'numpy.core._exceptions', 'numpy.core._asarray', 'numpy.core._ufunc_config', 'collections.abc', 'numpy.core.fromnumeric', 'numpy.core._methods', 'numpy.core.arrayprint', 'numpy.core.defchararray', 'numpy.core.records', 'numpy.core.memmap', 'numpy.core.function_base', 'numpy.core.machar', 'numpy.core.getlimits', 'numpy.core.shape_base', 'numpy.core.einsumfunc', 'numpy.core._add_newdocs', 'numpy.core._multiarray_tests', 'numpy.core._dtype_ctypes', '_ctypes', 'ctypes', 'ctypes._endian', 'numpy.core._internal', 'platform', 'subprocess', 'signal', '_posixsubprocess', 'select', 'selectors', 'threading', 'traceback', 'linecache', 'tokenize', 'token', '_weakrefset', 'numpy._pytesttester', 'numpy.lib', 'numpy.lib.info', 'numpy.lib.type_check', 'numpy.lib.ufunclike', 'numpy.lib.index_tricks', 'numpy.matrixlib', 'numpy.matrixlib.defmatrix', 'ast', '_ast', 'numpy.linalg', 'numpy.linalg.info', 'numpy.linalg.linalg', 'numpy.lib.twodim_base', 'numpy.linalg.lapack_lite', 'numpy.linalg._umath_linalg', 'numpy.lib.function_base', 'numpy.lib.histograms', 'numpy.lib.stride_tricks', 'numpy.lib.mixins', 'numpy.lib.nanfunctions', 'numpy.lib.shape_base', 'numpy.lib.scimath', 'numpy.lib.polynomial', 'numpy.lib.utils', 'numpy.lib.arraysetops', 'numpy.lib.npyio', 'weakref', 'numpy.lib.format', 'numpy.lib._datasource', 'shutil', 'zlib', 'bz2', '_compression', '_bz2', 'lzma', '_lzma', 'pwd', 'grp', 'numpy.lib._iotools', 'numpy.lib.financial', 'decimal', '_pydecimal', 'contextvars', '_contextvars', 'locale', 'numpy.lib.arrayterator', 'numpy.lib.arraypad', 'numpy.lib._version', 'numpy.fft', 'numpy.fft._pocketfft', 'numpy.fft._pocketfft_internal', 'numpy.fft.helper', 'numpy.polynomial', 'numpy.polynomial.polynomial', 'numpy.polynomial.polyutils', 'numpy.polynomial._polybase', 'numpy.polynomial.chebyshev', 'numpy.polynomial.legendre', 'numpy.polynomial.hermite', 'numpy.polynomial.hermite_e', 'numpy.polynomial.laguerre', 'numpy.random', 'numpy.random._pickle', 'numpy.random.mtrand', 'cython_runtime', 'numpy.random.common', 'numpy.random.bounded_integers', 'numpy.random.mt19937', 'numpy.random.bit_generator', '_cython_0_29_13', 'secrets', 'base64', 'binascii', 'hmac', '_hashlib', 'hashlib', '_blake2', '_sha3', 'random', 'bisect', '_bisect', '_random', 'numpy.random.philox', 'numpy.random.pcg64', 'numpy.random.sfc64', 'numpy.random.generator', 'numpy.ctypeslib', 'numpy.ma', 'numpy.ma.core', 'numpy.ma.extras', 'numpy.testing', 'unittest', 'unittest.result', 'unittest.util', 'unittest.case', 'difflib', 'logging', 'string', '_string', 'atexit', 'pprint', 'unittest.suite', 'unittest.loader', 'unittest.main', 'argparse', 'gettext', 'unittest.runner', 'unittest.signals', 'numpy.testing._private', 'numpy.testing._private.utils', 'gc', 'tempfile', 'numpy.testing._private.decorators', 'numpy.testing._private.nosetester', 'aircraftstudio.creator.fuselage', 'aircraftstudio.creator.propulsion', 'aircraftstudio.creator.wing', 'matplotlib', 'distutils', 'distutils.version', 'inspect', 'dis', 'opcode', '_opcode', 'matplotlib.cbook', 'glob', 'gzip', 'matplotlib.cbook.deprecation', 'matplotlib.rcsetup', 'matplotlib.fontconfig_pattern', 'pyparsing', 'copy', 'matplotlib.colors', 'matplotlib._color_data', 'cycler', 'six', 'six.moves', 'matplotlib._version', 'json', 'json.decoder', 'json.scanner', '_json', 'json.encoder', 'matplotlib.ft2font', 'dateutil', 'dateutil._version', 'kiwisolver', 'socket', '_socket']
61 Added: 2019-10-31 19:40:16,242 - DEBUG - CACHEDIR=/home/blendux/.cache/matplotlib
62 Added: 2019-10-31 19:40:16,250 - DEBUG - Using fontManager instance from /home/blendux/.cache/matplotlib/fontlist-v310.json
63 Added: 2019-10-31 19:40:16,967 - DEBUG - Loaded backend qt5agg version unknown.
64 Added: 2019-10-31 19:40:17,040 - DEBUG - Loaded backend tkagg version unknown.
65 Added: 2019-10-31 19:40:17,042 - DEBUG - Loaded backend TkAgg version unknown.
66 Added: 2019-11-01 17:48:41,736 - DEBUG - $HOME=/home/blendux
67 Added: 2019-11-01 17:48:41,736 - DEBUG - CONFIGDIR=/home/blendux/.config/matplotlib
68 Added: 2019-11-01 17:48:41,737 - DEBUG - matplotlib data path: /usr/lib/python3.7/site-packages/matplotlib/mpl-data
69 Added: 2019-11-01 17:48:41,742 - DEBUG - loaded rc file /usr/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc
70 Added: 2019-11-01 17:48:41,744 - DEBUG - matplotlib version 3.1.1
71 Added: 2019-11-01 17:48:41,744 - DEBUG - interactive is False
72 Added: 2019-11-01 17:48:41,744 - DEBUG - platform is linux
73 Added: 2019-11-01 17:48:41,744 - DEBUG - loaded modules: ['sys', 'builtins', '_frozen_importlib', '_imp', '_thread', '_warnings', '_weakref', 'zipimport', '_frozen_importlib_external', '_io', 'marshal', 'posix', 'encodings', 'codecs', '_codecs', 'encodings.aliases', 'encodings.utf_8', '_signal', '__main__', 'encodings.latin_1', 'io', 'abc', '_abc', 'site', 'os', 'stat', '_stat', 'posixpath', 'genericpath', 'os.path', '_collections_abc', '_sitebuiltins', '_bootlocale', '_locale', 'types', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'warnings', 'importlib.util', 'importlib.abc', 'importlib.machinery', 'contextlib', 'collections', 'operator', '_operator', 'keyword', 'heapq', '_heapq', 'itertools', 'reprlib', '_collections', 'functools', '_functools', 'mpl_toolkits', 'sphinxcontrib', 'aircraftstudio', 'aircraftstudio.creator', 'aircraftstudio.creator.base', 'numpy', '__future__', 'numpy._globals', 'numpy.__config__', 'numpy.version', 'numpy._distributor_init', 'numpy.core', 'numpy.core.info', 'numpy.core.multiarray', 'numpy.core.overrides', 'textwrap', 're', 'enum', 'sre_compile', '_sre', 'sre_parse', 'sre_constants', 'copyreg', 'datetime', 'time', 'math', '_datetime', 'numpy.core._multiarray_umath', 'numpy.compat', 'numpy.compat._inspect', 'numpy.compat.py3k', 'pathlib', 'fnmatch', 'ntpath', 'errno', 'urllib', 'urllib.parse', 'pickle', 'struct', '_struct', '_compat_pickle', '_pickle', 'numpy.core.umath', 'numpy.core.numerictypes', 'numbers', 'numpy.core._string_helpers', 'numpy.core._type_aliases', 'numpy.core._dtype', 'numpy.core.numeric', 'numpy.core._exceptions', 'numpy.core._asarray', 'numpy.core._ufunc_config', 'collections.abc', 'numpy.core.fromnumeric', 'numpy.core._methods', 'numpy.core.arrayprint', 'numpy.core.defchararray', 'numpy.core.records', 'numpy.core.memmap', 'numpy.core.function_base', 'numpy.core.machar', 'numpy.core.getlimits', 'numpy.core.shape_base', 'numpy.core.einsumfunc', 'numpy.core._add_newdocs', 'numpy.core._multiarray_tests', 'numpy.core._dtype_ctypes', '_ctypes', 'ctypes', 'ctypes._endian', 'numpy.core._internal', 'platform', 'subprocess', 'signal', '_posixsubprocess', 'select', 'selectors', 'threading', 'traceback', 'linecache', 'tokenize', 'token', '_weakrefset', 'numpy._pytesttester', 'numpy.lib', 'numpy.lib.info', 'numpy.lib.type_check', 'numpy.lib.ufunclike', 'numpy.lib.index_tricks', 'numpy.matrixlib', 'numpy.matrixlib.defmatrix', 'ast', '_ast', 'numpy.linalg', 'numpy.linalg.info', 'numpy.linalg.linalg', 'numpy.lib.twodim_base', 'numpy.linalg.lapack_lite', 'numpy.linalg._umath_linalg', 'numpy.lib.function_base', 'numpy.lib.histograms', 'numpy.lib.stride_tricks', 'numpy.lib.mixins', 'numpy.lib.nanfunctions', 'numpy.lib.shape_base', 'numpy.lib.scimath', 'numpy.lib.polynomial', 'numpy.lib.utils', 'numpy.lib.arraysetops', 'numpy.lib.npyio', 'weakref', 'numpy.lib.format', 'numpy.lib._datasource', 'shutil', 'zlib', 'bz2', '_compression', '_bz2', 'lzma', '_lzma', 'pwd', 'grp', 'numpy.lib._iotools', 'numpy.lib.financial', 'decimal', '_pydecimal', 'contextvars', '_contextvars', 'locale', 'numpy.lib.arrayterator', 'numpy.lib.arraypad', 'numpy.lib._version', 'numpy.fft', 'numpy.fft._pocketfft', 'numpy.fft._pocketfft_internal', 'numpy.fft.helper', 'numpy.polynomial', 'numpy.polynomial.polynomial', 'numpy.polynomial.polyutils', 'numpy.polynomial._polybase', 'numpy.polynomial.chebyshev', 'numpy.polynomial.legendre', 'numpy.polynomial.hermite', 'numpy.polynomial.hermite_e', 'numpy.polynomial.laguerre', 'numpy.random', 'numpy.random._pickle', 'numpy.random.mtrand', 'cython_runtime', 'numpy.random.common', 'numpy.random.bounded_integers', 'numpy.random.mt19937', 'numpy.random.bit_generator', '_cython_0_29_13', 'secrets', 'base64', 'binascii', 'hmac', '_hashlib', 'hashlib', '_blake2', '_sha3', 'random', 'bisect', '_bisect', '_random', 'numpy.random.philox', 'numpy.random.pcg64', 'numpy.random.sfc64', 'numpy.random.generator', 'numpy.ctypeslib', 'numpy.ma', 'numpy.ma.core', 'numpy.ma.extras', 'numpy.testing', 'unittest', 'unittest.result', 'unittest.util', 'unittest.case', 'difflib', 'logging', 'string', '_string', 'atexit', 'pprint', 'unittest.suite', 'unittest.loader', 'unittest.main', 'argparse', 'gettext', 'unittest.runner', 'unittest.signals', 'numpy.testing._private', 'numpy.testing._private.utils', 'gc', 'tempfile', 'numpy.testing._private.decorators', 'numpy.testing._private.nosetester', 'aircraftstudio.creator.fuselage', 'aircraftstudio.creator.propulsion', 'aircraftstudio.creator.wing', 'matplotlib', 'distutils', 'distutils.version', 'inspect', 'dis', 'opcode', '_opcode', 'matplotlib.cbook', 'glob', 'gzip', 'matplotlib.cbook.deprecation', 'matplotlib.rcsetup', 'matplotlib.fontconfig_pattern', 'pyparsing', 'copy', 'matplotlib.colors', 'matplotlib._color_data', 'cycler', 'six', 'six.moves', 'matplotlib._version', 'json', 'json.decoder', 'json.scanner', '_json', 'json.encoder', 'matplotlib.ft2font', 'dateutil', 'dateutil._version', 'kiwisolver', 'socket', '_socket']
74 Added: 2019-11-01 17:48:41,792 - DEBUG - CACHEDIR=/home/blendux/.cache/matplotlib
75 Added: 2019-11-01 17:48:41,794 - DEBUG - Using fontManager instance from /home/blendux/.cache/matplotlib/fontlist-v310.json
76 Added: 2019-11-01 17:48:41,967 - DEBUG - Loaded backend qt5agg version unknown.
77 Added: 2019-11-01 17:48:41,992 - DEBUG - Loaded backend tkagg version unknown.
78 Added: 2019-11-01 17:48:41,992 - DEBUG - Loaded backend TkAgg version unknown.
79 Added: 2019-11-01 17:52:55,611 - DEBUG - $HOME=/home/blendux
80 Added: 2019-11-01 17:52:55,611 - DEBUG - CONFIGDIR=/home/blendux/.config/matplotlib
81 Added: 2019-11-01 17:52:55,611 - DEBUG - matplotlib data path: /usr/lib/python3.7/site-packages/matplotlib/mpl-data
82 Added: 2019-11-01 17:52:55,616 - DEBUG - loaded rc file /usr/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc
83 Added: 2019-11-01 17:52:55,618 - DEBUG - matplotlib version 3.1.1
84 Added: 2019-11-01 17:52:55,618 - DEBUG - interactive is False
85 Added: 2019-11-01 17:52:55,618 - DEBUG - platform is linux
86 Added: 2019-11-01 17:52:55,618 - DEBUG - loaded modules: ['sys', 'builtins', '_frozen_importlib', '_imp', '_thread', '_warnings', '_weakref', 'zipimport', '_frozen_importlib_external', '_io', 'marshal', 'posix', 'encodings', 'codecs', '_codecs', 'encodings.aliases', 'encodings.utf_8', '_signal', '__main__', 'encodings.latin_1', 'io', 'abc', '_abc', 'site', 'os', 'stat', '_stat', 'posixpath', 'genericpath', 'os.path', '_collections_abc', '_sitebuiltins', '_bootlocale', '_locale', 'types', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'warnings', 'importlib.util', 'importlib.abc', 'importlib.machinery', 'contextlib', 'collections', 'operator', '_operator', 'keyword', 'heapq', '_heapq', 'itertools', 'reprlib', '_collections', 'functools', '_functools', 'mpl_toolkits', 'sphinxcontrib', 'aircraftstudio', 'aircraftstudio.creator', 'aircraftstudio.creator.base', 'numpy', '__future__', 'numpy._globals', 'numpy.__config__', 'numpy.version', 'numpy._distributor_init', 'numpy.core', 'numpy.core.info', 'numpy.core.multiarray', 'numpy.core.overrides', 'textwrap', 're', 'enum', 'sre_compile', '_sre', 'sre_parse', 'sre_constants', 'copyreg', 'datetime', 'time', 'math', '_datetime', 'numpy.core._multiarray_umath', 'numpy.compat', 'numpy.compat._inspect', 'numpy.compat.py3k', 'pathlib', 'fnmatch', 'ntpath', 'errno', 'urllib', 'urllib.parse', 'pickle', 'struct', '_struct', '_compat_pickle', '_pickle', 'numpy.core.umath', 'numpy.core.numerictypes', 'numbers', 'numpy.core._string_helpers', 'numpy.core._type_aliases', 'numpy.core._dtype', 'numpy.core.numeric', 'numpy.core._exceptions', 'numpy.core._asarray', 'numpy.core._ufunc_config', 'collections.abc', 'numpy.core.fromnumeric', 'numpy.core._methods', 'numpy.core.arrayprint', 'numpy.core.defchararray', 'numpy.core.records', 'numpy.core.memmap', 'numpy.core.function_base', 'numpy.core.machar', 'numpy.core.getlimits', 'numpy.core.shape_base', 'numpy.core.einsumfunc', 'numpy.core._add_newdocs', 'numpy.core._multiarray_tests', 'numpy.core._dtype_ctypes', '_ctypes', 'ctypes', 'ctypes._endian', 'numpy.core._internal', 'platform', 'subprocess', 'signal', '_posixsubprocess', 'select', 'selectors', 'threading', 'traceback', 'linecache', 'tokenize', 'token', '_weakrefset', 'numpy._pytesttester', 'numpy.lib', 'numpy.lib.info', 'numpy.lib.type_check', 'numpy.lib.ufunclike', 'numpy.lib.index_tricks', 'numpy.matrixlib', 'numpy.matrixlib.defmatrix', 'ast', '_ast', 'numpy.linalg', 'numpy.linalg.info', 'numpy.linalg.linalg', 'numpy.lib.twodim_base', 'numpy.linalg.lapack_lite', 'numpy.linalg._umath_linalg', 'numpy.lib.function_base', 'numpy.lib.histograms', 'numpy.lib.stride_tricks', 'numpy.lib.mixins', 'numpy.lib.nanfunctions', 'numpy.lib.shape_base', 'numpy.lib.scimath', 'numpy.lib.polynomial', 'numpy.lib.utils', 'numpy.lib.arraysetops', 'numpy.lib.npyio', 'weakref', 'numpy.lib.format', 'numpy.lib._datasource', 'shutil', 'zlib', 'bz2', '_compression', '_bz2', 'lzma', '_lzma', 'pwd', 'grp', 'numpy.lib._iotools', 'numpy.lib.financial', 'decimal', '_pydecimal', 'contextvars', '_contextvars', 'locale', 'numpy.lib.arrayterator', 'numpy.lib.arraypad', 'numpy.lib._version', 'numpy.fft', 'numpy.fft._pocketfft', 'numpy.fft._pocketfft_internal', 'numpy.fft.helper', 'numpy.polynomial', 'numpy.polynomial.polynomial', 'numpy.polynomial.polyutils', 'numpy.polynomial._polybase', 'numpy.polynomial.chebyshev', 'numpy.polynomial.legendre', 'numpy.polynomial.hermite', 'numpy.polynomial.hermite_e', 'numpy.polynomial.laguerre', 'numpy.random', 'numpy.random._pickle', 'numpy.random.mtrand', 'cython_runtime', 'numpy.random.common', 'numpy.random.bounded_integers', 'numpy.random.mt19937', 'numpy.random.bit_generator', '_cython_0_29_13', 'secrets', 'base64', 'binascii', 'hmac', '_hashlib', 'hashlib', '_blake2', '_sha3', 'random', 'bisect', '_bisect', '_random', 'numpy.random.philox', 'numpy.random.pcg64', 'numpy.random.sfc64', 'numpy.random.generator', 'numpy.ctypeslib', 'numpy.ma', 'numpy.ma.core', 'numpy.ma.extras', 'numpy.testing', 'unittest', 'unittest.result', 'unittest.util', 'unittest.case', 'difflib', 'logging', 'string', '_string', 'atexit', 'pprint', 'unittest.suite', 'unittest.loader', 'unittest.main', 'argparse', 'gettext', 'unittest.runner', 'unittest.signals', 'numpy.testing._private', 'numpy.testing._private.utils', 'gc', 'tempfile', 'numpy.testing._private.decorators', 'numpy.testing._private.nosetester', 'aircraftstudio.creator.fuselage', 'aircraftstudio.creator.propulsion', 'aircraftstudio.creator.wing', 'matplotlib', 'distutils', 'distutils.version', 'inspect', 'dis', 'opcode', '_opcode', 'matplotlib.cbook', 'glob', 'gzip', 'matplotlib.cbook.deprecation', 'matplotlib.rcsetup', 'matplotlib.fontconfig_pattern', 'pyparsing', 'copy', 'matplotlib.colors', 'matplotlib._color_data', 'cycler', 'six', 'six.moves', 'matplotlib._version', 'json', 'json.decoder', 'json.scanner', '_json', 'json.encoder', 'matplotlib.ft2font', 'dateutil', 'dateutil._version', 'kiwisolver', 'socket', '_socket']
87 Added: 2019-11-01 17:52:55,651 - DEBUG - CACHEDIR=/home/blendux/.cache/matplotlib
88 Added: 2019-11-01 17:52:55,652 - DEBUG - Using fontManager instance from /home/blendux/.cache/matplotlib/fontlist-v310.json
89 Added: 2019-11-01 17:52:55,740 - DEBUG - Loaded backend qt5agg version unknown.
90 Added: 2019-11-01 17:52:55,750 - DEBUG - Loaded backend tkagg version unknown.
91 Added: 2019-11-01 17:52:55,750 - DEBUG - Loaded backend TkAgg version unknown.
92 Added: 2019-11-01 17:54:04,018 - DEBUG - $HOME=/home/blendux
93 Added: 2019-11-01 17:54:04,018 - DEBUG - CONFIGDIR=/home/blendux/.config/matplotlib
94 Added: 2019-11-01 17:54:04,018 - DEBUG - matplotlib data path: /usr/lib/python3.7/site-packages/matplotlib/mpl-data
95 Added: 2019-11-01 17:54:04,023 - DEBUG - loaded rc file /usr/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc
96 Added: 2019-11-01 17:54:04,025 - DEBUG - matplotlib version 3.1.1
97 Added: 2019-11-01 17:54:04,025 - DEBUG - interactive is False
98 Added: 2019-11-01 17:54:04,025 - DEBUG - platform is linux
99 Added: 2019-11-01 17:54:04,025 - DEBUG - loaded modules: ['sys', 'builtins', '_frozen_importlib', '_imp', '_thread', '_warnings', '_weakref', 'zipimport', '_frozen_importlib_external', '_io', 'marshal', 'posix', 'encodings', 'codecs', '_codecs', 'encodings.aliases', 'encodings.utf_8', '_signal', '__main__', 'encodings.latin_1', 'io', 'abc', '_abc', 'site', 'os', 'stat', '_stat', 'posixpath', 'genericpath', 'os.path', '_collections_abc', '_sitebuiltins', '_bootlocale', '_locale', 'types', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'warnings', 'importlib.util', 'importlib.abc', 'importlib.machinery', 'contextlib', 'collections', 'operator', '_operator', 'keyword', 'heapq', '_heapq', 'itertools', 'reprlib', '_collections', 'functools', '_functools', 'mpl_toolkits', 'sphinxcontrib', 'aircraftstudio', 'aircraftstudio.creator', 'aircraftstudio.creator.base', 'numpy', '__future__', 'numpy._globals', 'numpy.__config__', 'numpy.version', 'numpy._distributor_init', 'numpy.core', 'numpy.core.info', 'numpy.core.multiarray', 'numpy.core.overrides', 'textwrap', 're', 'enum', 'sre_compile', '_sre', 'sre_parse', 'sre_constants', 'copyreg', 'datetime', 'time', 'math', '_datetime', 'numpy.core._multiarray_umath', 'numpy.compat', 'numpy.compat._inspect', 'numpy.compat.py3k', 'pathlib', 'fnmatch', 'ntpath', 'errno', 'urllib', 'urllib.parse', 'pickle', 'struct', '_struct', '_compat_pickle', '_pickle', 'numpy.core.umath', 'numpy.core.numerictypes', 'numbers', 'numpy.core._string_helpers', 'numpy.core._type_aliases', 'numpy.core._dtype', 'numpy.core.numeric', 'numpy.core._exceptions', 'numpy.core._asarray', 'numpy.core._ufunc_config', 'collections.abc', 'numpy.core.fromnumeric', 'numpy.core._methods', 'numpy.core.arrayprint', 'numpy.core.defchararray', 'numpy.core.records', 'numpy.core.memmap', 'numpy.core.function_base', 'numpy.core.machar', 'numpy.core.getlimits', 'numpy.core.shape_base', 'numpy.core.einsumfunc', 'numpy.core._add_newdocs', 'numpy.core._multiarray_tests', 'numpy.core._dtype_ctypes', '_ctypes', 'ctypes', 'ctypes._endian', 'numpy.core._internal', 'platform', 'subprocess', 'signal', '_posixsubprocess', 'select', 'selectors', 'threading', 'traceback', 'linecache', 'tokenize', 'token', '_weakrefset', 'numpy._pytesttester', 'numpy.lib', 'numpy.lib.info', 'numpy.lib.type_check', 'numpy.lib.ufunclike', 'numpy.lib.index_tricks', 'numpy.matrixlib', 'numpy.matrixlib.defmatrix', 'ast', '_ast', 'numpy.linalg', 'numpy.linalg.info', 'numpy.linalg.linalg', 'numpy.lib.twodim_base', 'numpy.linalg.lapack_lite', 'numpy.linalg._umath_linalg', 'numpy.lib.function_base', 'numpy.lib.histograms', 'numpy.lib.stride_tricks', 'numpy.lib.mixins', 'numpy.lib.nanfunctions', 'numpy.lib.shape_base', 'numpy.lib.scimath', 'numpy.lib.polynomial', 'numpy.lib.utils', 'numpy.lib.arraysetops', 'numpy.lib.npyio', 'weakref', 'numpy.lib.format', 'numpy.lib._datasource', 'shutil', 'zlib', 'bz2', '_compression', '_bz2', 'lzma', '_lzma', 'pwd', 'grp', 'numpy.lib._iotools', 'numpy.lib.financial', 'decimal', '_pydecimal', 'contextvars', '_contextvars', 'locale', 'numpy.lib.arrayterator', 'numpy.lib.arraypad', 'numpy.lib._version', 'numpy.fft', 'numpy.fft._pocketfft', 'numpy.fft._pocketfft_internal', 'numpy.fft.helper', 'numpy.polynomial', 'numpy.polynomial.polynomial', 'numpy.polynomial.polyutils', 'numpy.polynomial._polybase', 'numpy.polynomial.chebyshev', 'numpy.polynomial.legendre', 'numpy.polynomial.hermite', 'numpy.polynomial.hermite_e', 'numpy.polynomial.laguerre', 'numpy.random', 'numpy.random._pickle', 'numpy.random.mtrand', 'cython_runtime', 'numpy.random.common', 'numpy.random.bounded_integers', 'numpy.random.mt19937', 'numpy.random.bit_generator', '_cython_0_29_13', 'secrets', 'base64', 'binascii', 'hmac', '_hashlib', 'hashlib', '_blake2', '_sha3', 'random', 'bisect', '_bisect', '_random', 'numpy.random.philox', 'numpy.random.pcg64', 'numpy.random.sfc64', 'numpy.random.generator', 'numpy.ctypeslib', 'numpy.ma', 'numpy.ma.core', 'numpy.ma.extras', 'numpy.testing', 'unittest', 'unittest.result', 'unittest.util', 'unittest.case', 'difflib', 'logging', 'string', '_string', 'atexit', 'pprint', 'unittest.suite', 'unittest.loader', 'unittest.main', 'argparse', 'gettext', 'unittest.runner', 'unittest.signals', 'numpy.testing._private', 'numpy.testing._private.utils', 'gc', 'tempfile', 'numpy.testing._private.decorators', 'numpy.testing._private.nosetester', 'aircraftstudio.creator.fuselage', 'aircraftstudio.creator.propulsion', 'aircraftstudio.creator.wing', 'matplotlib', 'distutils', 'distutils.version', 'inspect', 'dis', 'opcode', '_opcode', 'matplotlib.cbook', 'glob', 'gzip', 'matplotlib.cbook.deprecation', 'matplotlib.rcsetup', 'matplotlib.fontconfig_pattern', 'pyparsing', 'copy', 'matplotlib.colors', 'matplotlib._color_data', 'cycler', 'six', 'six.moves', 'matplotlib._version', 'json', 'json.decoder', 'json.scanner', '_json', 'json.encoder', 'matplotlib.ft2font', 'dateutil', 'dateutil._version', 'kiwisolver', 'socket', '_socket']
100 Added: 2019-11-01 17:54:04,057 - DEBUG - CACHEDIR=/home/blendux/.cache/matplotlib
101 Added: 2019-11-01 17:54:04,058 - DEBUG - Using fontManager instance from /home/blendux/.cache/matplotlib/fontlist-v310.json
102 Added: 2019-11-01 17:54:04,147 - DEBUG - Loaded backend qt5agg version unknown.
103 Added: 2019-11-01 17:54:04,157 - DEBUG - Loaded backend tkagg version unknown.
104 Added: 2019-11-01 17:54:04,158 - DEBUG - Loaded backend TkAgg version unknown.
105 Added: 2019-11-01 17:54:16,377 - DEBUG - $HOME=/home/blendux
106 Added: 2019-11-01 17:54:16,377 - DEBUG - CONFIGDIR=/home/blendux/.config/matplotlib
107 Added: 2019-11-01 17:54:16,378 - DEBUG - matplotlib data path: /usr/lib/python3.7/site-packages/matplotlib/mpl-data
108 Added: 2019-11-01 17:54:16,382 - DEBUG - loaded rc file /usr/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc
109 Added: 2019-11-01 17:54:16,384 - DEBUG - matplotlib version 3.1.1
110 Added: 2019-11-01 17:54:16,384 - DEBUG - interactive is False
111 Added: 2019-11-01 17:54:16,384 - DEBUG - platform is linux
112 Added: 2019-11-01 17:54:16,384 - DEBUG - loaded modules: ['sys', 'builtins', '_frozen_importlib', '_imp', '_thread', '_warnings', '_weakref', 'zipimport', '_frozen_importlib_external', '_io', 'marshal', 'posix', 'encodings', 'codecs', '_codecs', 'encodings.aliases', 'encodings.utf_8', '_signal', '__main__', 'encodings.latin_1', 'io', 'abc', '_abc', 'site', 'os', 'stat', '_stat', 'posixpath', 'genericpath', 'os.path', '_collections_abc', '_sitebuiltins', '_bootlocale', '_locale', 'types', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'warnings', 'importlib.util', 'importlib.abc', 'importlib.machinery', 'contextlib', 'collections', 'operator', '_operator', 'keyword', 'heapq', '_heapq', 'itertools', 'reprlib', '_collections', 'functools', '_functools', 'mpl_toolkits', 'sphinxcontrib', 'aircraftstudio', 'aircraftstudio.creator', 'aircraftstudio.creator.base', 'numpy', '__future__', 'numpy._globals', 'numpy.__config__', 'numpy.version', 'numpy._distributor_init', 'numpy.core', 'numpy.core.info', 'numpy.core.multiarray', 'numpy.core.overrides', 'textwrap', 're', 'enum', 'sre_compile', '_sre', 'sre_parse', 'sre_constants', 'copyreg', 'datetime', 'time', 'math', '_datetime', 'numpy.core._multiarray_umath', 'numpy.compat', 'numpy.compat._inspect', 'numpy.compat.py3k', 'pathlib', 'fnmatch', 'ntpath', 'errno', 'urllib', 'urllib.parse', 'pickle', 'struct', '_struct', '_compat_pickle', '_pickle', 'numpy.core.umath', 'numpy.core.numerictypes', 'numbers', 'numpy.core._string_helpers', 'numpy.core._type_aliases', 'numpy.core._dtype', 'numpy.core.numeric', 'numpy.core._exceptions', 'numpy.core._asarray', 'numpy.core._ufunc_config', 'collections.abc', 'numpy.core.fromnumeric', 'numpy.core._methods', 'numpy.core.arrayprint', 'numpy.core.defchararray', 'numpy.core.records', 'numpy.core.memmap', 'numpy.core.function_base', 'numpy.core.machar', 'numpy.core.getlimits', 'numpy.core.shape_base', 'numpy.core.einsumfunc', 'numpy.core._add_newdocs', 'numpy.core._multiarray_tests', 'numpy.core._dtype_ctypes', '_ctypes', 'ctypes', 'ctypes._endian', 'numpy.core._internal', 'platform', 'subprocess', 'signal', '_posixsubprocess', 'select', 'selectors', 'threading', 'traceback', 'linecache', 'tokenize', 'token', '_weakrefset', 'numpy._pytesttester', 'numpy.lib', 'numpy.lib.info', 'numpy.lib.type_check', 'numpy.lib.ufunclike', 'numpy.lib.index_tricks', 'numpy.matrixlib', 'numpy.matrixlib.defmatrix', 'ast', '_ast', 'numpy.linalg', 'numpy.linalg.info', 'numpy.linalg.linalg', 'numpy.lib.twodim_base', 'numpy.linalg.lapack_lite', 'numpy.linalg._umath_linalg', 'numpy.lib.function_base', 'numpy.lib.histograms', 'numpy.lib.stride_tricks', 'numpy.lib.mixins', 'numpy.lib.nanfunctions', 'numpy.lib.shape_base', 'numpy.lib.scimath', 'numpy.lib.polynomial', 'numpy.lib.utils', 'numpy.lib.arraysetops', 'numpy.lib.npyio', 'weakref', 'numpy.lib.format', 'numpy.lib._datasource', 'shutil', 'zlib', 'bz2', '_compression', '_bz2', 'lzma', '_lzma', 'pwd', 'grp', 'numpy.lib._iotools', 'numpy.lib.financial', 'decimal', '_pydecimal', 'contextvars', '_contextvars', 'locale', 'numpy.lib.arrayterator', 'numpy.lib.arraypad', 'numpy.lib._version', 'numpy.fft', 'numpy.fft._pocketfft', 'numpy.fft._pocketfft_internal', 'numpy.fft.helper', 'numpy.polynomial', 'numpy.polynomial.polynomial', 'numpy.polynomial.polyutils', 'numpy.polynomial._polybase', 'numpy.polynomial.chebyshev', 'numpy.polynomial.legendre', 'numpy.polynomial.hermite', 'numpy.polynomial.hermite_e', 'numpy.polynomial.laguerre', 'numpy.random', 'numpy.random._pickle', 'numpy.random.mtrand', 'cython_runtime', 'numpy.random.common', 'numpy.random.bounded_integers', 'numpy.random.mt19937', 'numpy.random.bit_generator', '_cython_0_29_13', 'secrets', 'base64', 'binascii', 'hmac', '_hashlib', 'hashlib', '_blake2', '_sha3', 'random', 'bisect', '_bisect', '_random', 'numpy.random.philox', 'numpy.random.pcg64', 'numpy.random.sfc64', 'numpy.random.generator', 'numpy.ctypeslib', 'numpy.ma', 'numpy.ma.core', 'numpy.ma.extras', 'numpy.testing', 'unittest', 'unittest.result', 'unittest.util', 'unittest.case', 'difflib', 'logging', 'string', '_string', 'atexit', 'pprint', 'unittest.suite', 'unittest.loader', 'unittest.main', 'argparse', 'gettext', 'unittest.runner', 'unittest.signals', 'numpy.testing._private', 'numpy.testing._private.utils', 'gc', 'tempfile', 'numpy.testing._private.decorators', 'numpy.testing._private.nosetester', 'aircraftstudio.creator.fuselage', 'aircraftstudio.creator.propulsion', 'aircraftstudio.creator.wing', 'matplotlib', 'distutils', 'distutils.version', 'inspect', 'dis', 'opcode', '_opcode', 'matplotlib.cbook', 'glob', 'gzip', 'matplotlib.cbook.deprecation', 'matplotlib.rcsetup', 'matplotlib.fontconfig_pattern', 'pyparsing', 'copy', 'matplotlib.colors', 'matplotlib._color_data', 'cycler', 'six', 'six.moves', 'matplotlib._version', 'json', 'json.decoder', 'json.scanner', '_json', 'json.encoder', 'matplotlib.ft2font', 'dateutil', 'dateutil._version', 'kiwisolver', 'socket', '_socket']
113 Added: 2019-11-01 17:54:16,416 - DEBUG - CACHEDIR=/home/blendux/.cache/matplotlib
114 Added: 2019-11-01 17:54:16,417 - DEBUG - Using fontManager instance from /home/blendux/.cache/matplotlib/fontlist-v310.json
115 Added: 2019-11-01 17:54:16,507 - DEBUG - Loaded backend qt5agg version unknown.
116 Added: 2019-11-01 17:54:16,517 - DEBUG - Loaded backend tkagg version unknown.
117 Added: 2019-11-01 17:54:16,518 - DEBUG - Loaded backend TkAgg version unknown.
118 Added: 2019-11-01 17:55:44,684 - DEBUG - $HOME=/home/blendux
119 Added: 2019-11-01 17:55:44,684 - DEBUG - CONFIGDIR=/home/blendux/.config/matplotlib
120 Added: 2019-11-01 17:55:44,684 - DEBUG - matplotlib data path: /usr/lib/python3.7/site-packages/matplotlib/mpl-data
121 Added: 2019-11-01 17:55:44,689 - DEBUG - loaded rc file /usr/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc
122 Added: 2019-11-01 17:55:44,691 - DEBUG - matplotlib version 3.1.1
123 Added: 2019-11-01 17:55:44,691 - DEBUG - interactive is False
124 Added: 2019-11-01 17:55:44,691 - DEBUG - platform is linux
125 Added: 2019-11-01 17:55:44,691 - DEBUG - loaded modules: ['sys', 'builtins', '_frozen_importlib', '_imp', '_thread', '_warnings', '_weakref', 'zipimport', '_frozen_importlib_external', '_io', 'marshal', 'posix', 'encodings', 'codecs', '_codecs', 'encodings.aliases', 'encodings.utf_8', '_signal', '__main__', 'encodings.latin_1', 'io', 'abc', '_abc', 'site', 'os', 'stat', '_stat', 'posixpath', 'genericpath', 'os.path', '_collections_abc', '_sitebuiltins', '_bootlocale', '_locale', 'types', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'warnings', 'importlib.util', 'importlib.abc', 'importlib.machinery', 'contextlib', 'collections', 'operator', '_operator', 'keyword', 'heapq', '_heapq', 'itertools', 'reprlib', '_collections', 'functools', '_functools', 'mpl_toolkits', 'sphinxcontrib', 'aircraftstudio', 'aircraftstudio.creator', 'aircraftstudio.creator.base', 'numpy', '__future__', 'numpy._globals', 'numpy.__config__', 'numpy.version', 'numpy._distributor_init', 'numpy.core', 'numpy.core.info', 'numpy.core.multiarray', 'numpy.core.overrides', 'textwrap', 're', 'enum', 'sre_compile', '_sre', 'sre_parse', 'sre_constants', 'copyreg', 'datetime', 'time', 'math', '_datetime', 'numpy.core._multiarray_umath', 'numpy.compat', 'numpy.compat._inspect', 'numpy.compat.py3k', 'pathlib', 'fnmatch', 'ntpath', 'errno', 'urllib', 'urllib.parse', 'pickle', 'struct', '_struct', '_compat_pickle', '_pickle', 'numpy.core.umath', 'numpy.core.numerictypes', 'numbers', 'numpy.core._string_helpers', 'numpy.core._type_aliases', 'numpy.core._dtype', 'numpy.core.numeric', 'numpy.core._exceptions', 'numpy.core._asarray', 'numpy.core._ufunc_config', 'collections.abc', 'numpy.core.fromnumeric', 'numpy.core._methods', 'numpy.core.arrayprint', 'numpy.core.defchararray', 'numpy.core.records', 'numpy.core.memmap', 'numpy.core.function_base', 'numpy.core.machar', 'numpy.core.getlimits', 'numpy.core.shape_base', 'numpy.core.einsumfunc', 'numpy.core._add_newdocs', 'numpy.core._multiarray_tests', 'numpy.core._dtype_ctypes', '_ctypes', 'ctypes', 'ctypes._endian', 'numpy.core._internal', 'platform', 'subprocess', 'signal', '_posixsubprocess', 'select', 'selectors', 'threading', 'traceback', 'linecache', 'tokenize', 'token', '_weakrefset', 'numpy._pytesttester', 'numpy.lib', 'numpy.lib.info', 'numpy.lib.type_check', 'numpy.lib.ufunclike', 'numpy.lib.index_tricks', 'numpy.matrixlib', 'numpy.matrixlib.defmatrix', 'ast', '_ast', 'numpy.linalg', 'numpy.linalg.info', 'numpy.linalg.linalg', 'numpy.lib.twodim_base', 'numpy.linalg.lapack_lite', 'numpy.linalg._umath_linalg', 'numpy.lib.function_base', 'numpy.lib.histograms', 'numpy.lib.stride_tricks', 'numpy.lib.mixins', 'numpy.lib.nanfunctions', 'numpy.lib.shape_base', 'numpy.lib.scimath', 'numpy.lib.polynomial', 'numpy.lib.utils', 'numpy.lib.arraysetops', 'numpy.lib.npyio', 'weakref', 'numpy.lib.format', 'numpy.lib._datasource', 'shutil', 'zlib', 'bz2', '_compression', '_bz2', 'lzma', '_lzma', 'pwd', 'grp', 'numpy.lib._iotools', 'numpy.lib.financial', 'decimal', '_pydecimal', 'contextvars', '_contextvars', 'locale', 'numpy.lib.arrayterator', 'numpy.lib.arraypad', 'numpy.lib._version', 'numpy.fft', 'numpy.fft._pocketfft', 'numpy.fft._pocketfft_internal', 'numpy.fft.helper', 'numpy.polynomial', 'numpy.polynomial.polynomial', 'numpy.polynomial.polyutils', 'numpy.polynomial._polybase', 'numpy.polynomial.chebyshev', 'numpy.polynomial.legendre', 'numpy.polynomial.hermite', 'numpy.polynomial.hermite_e', 'numpy.polynomial.laguerre', 'numpy.random', 'numpy.random._pickle', 'numpy.random.mtrand', 'cython_runtime', 'numpy.random.common', 'numpy.random.bounded_integers', 'numpy.random.mt19937', 'numpy.random.bit_generator', '_cython_0_29_13', 'secrets', 'base64', 'binascii', 'hmac', '_hashlib', 'hashlib', '_blake2', '_sha3', 'random', 'bisect', '_bisect', '_random', 'numpy.random.philox', 'numpy.random.pcg64', 'numpy.random.sfc64', 'numpy.random.generator', 'numpy.ctypeslib', 'numpy.ma', 'numpy.ma.core', 'numpy.ma.extras', 'numpy.testing', 'unittest', 'unittest.result', 'unittest.util', 'unittest.case', 'difflib', 'logging', 'string', '_string', 'atexit', 'pprint', 'unittest.suite', 'unittest.loader', 'unittest.main', 'argparse', 'gettext', 'unittest.runner', 'unittest.signals', 'numpy.testing._private', 'numpy.testing._private.utils', 'gc', 'tempfile', 'numpy.testing._private.decorators', 'numpy.testing._private.nosetester', 'aircraftstudio.creator.fuselage', 'aircraftstudio.creator.propulsion', 'aircraftstudio.creator.wing', 'matplotlib', 'distutils', 'distutils.version', 'inspect', 'dis', 'opcode', '_opcode', 'matplotlib.cbook', 'glob', 'gzip', 'matplotlib.cbook.deprecation', 'matplotlib.rcsetup', 'matplotlib.fontconfig_pattern', 'pyparsing', 'copy', 'matplotlib.colors', 'matplotlib._color_data', 'cycler', 'six', 'six.moves', 'matplotlib._version', 'json', 'json.decoder', 'json.scanner', '_json', 'json.encoder', 'matplotlib.ft2font', 'dateutil', 'dateutil._version', 'kiwisolver', 'socket', '_socket']
126 Added: 2019-11-01 17:55:44,723 - DEBUG - CACHEDIR=/home/blendux/.cache/matplotlib
127 Added: 2019-11-01 17:55:44,724 - DEBUG - Using fontManager instance from /home/blendux/.cache/matplotlib/fontlist-v310.json
128 Added: 2019-11-01 17:55:44,812 - DEBUG - Loaded backend qt5agg version unknown.
129 Added: 2019-11-01 17:55:44,822 - DEBUG - Loaded backend tkagg version unknown.
130 Added: 2019-11-01 17:55:44,822 - DEBUG - Loaded backend TkAgg version unknown.
131 Added: 2019-11-01 17:57:52,401 - DEBUG - $HOME=/home/blendux
132 Added: 2019-11-01 17:57:52,401 - DEBUG - CONFIGDIR=/home/blendux/.config/matplotlib
133 Added: 2019-11-01 17:57:52,401 - DEBUG - matplotlib data path: /usr/lib/python3.7/site-packages/matplotlib/mpl-data
134 Added: 2019-11-01 17:57:52,406 - DEBUG - loaded rc file /usr/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc
135 Added: 2019-11-01 17:57:52,408 - DEBUG - matplotlib version 3.1.1
136 Added: 2019-11-01 17:57:52,408 - DEBUG - interactive is False
137 Added: 2019-11-01 17:57:52,408 - DEBUG - platform is linux
138 Added: 2019-11-01 17:57:52,408 - DEBUG - loaded modules: ['sys', 'builtins', '_frozen_importlib', '_imp', '_thread', '_warnings', '_weakref', 'zipimport', '_frozen_importlib_external', '_io', 'marshal', 'posix', 'encodings', 'codecs', '_codecs', 'encodings.aliases', 'encodings.utf_8', '_signal', '__main__', 'encodings.latin_1', 'io', 'abc', '_abc', 'site', 'os', 'stat', '_stat', 'posixpath', 'genericpath', 'os.path', '_collections_abc', '_sitebuiltins', '_bootlocale', '_locale', 'types', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'warnings', 'importlib.util', 'importlib.abc', 'importlib.machinery', 'contextlib', 'collections', 'operator', '_operator', 'keyword', 'heapq', '_heapq', 'itertools', 'reprlib', '_collections', 'functools', '_functools', 'mpl_toolkits', 'sphinxcontrib', 'aircraftstudio', 'aircraftstudio.creator', 'aircraftstudio.creator.base', 'numpy', '__future__', 'numpy._globals', 'numpy.__config__', 'numpy.version', 'numpy._distributor_init', 'numpy.core', 'numpy.core.info', 'numpy.core.multiarray', 'numpy.core.overrides', 'textwrap', 're', 'enum', 'sre_compile', '_sre', 'sre_parse', 'sre_constants', 'copyreg', 'datetime', 'time', 'math', '_datetime', 'numpy.core._multiarray_umath', 'numpy.compat', 'numpy.compat._inspect', 'numpy.compat.py3k', 'pathlib', 'fnmatch', 'ntpath', 'errno', 'urllib', 'urllib.parse', 'pickle', 'struct', '_struct', '_compat_pickle', '_pickle', 'numpy.core.umath', 'numpy.core.numerictypes', 'numbers', 'numpy.core._string_helpers', 'numpy.core._type_aliases', 'numpy.core._dtype', 'numpy.core.numeric', 'numpy.core._exceptions', 'numpy.core._asarray', 'numpy.core._ufunc_config', 'collections.abc', 'numpy.core.fromnumeric', 'numpy.core._methods', 'numpy.core.arrayprint', 'numpy.core.defchararray', 'numpy.core.records', 'numpy.core.memmap', 'numpy.core.function_base', 'numpy.core.machar', 'numpy.core.getlimits', 'numpy.core.shape_base', 'numpy.core.einsumfunc', 'numpy.core._add_newdocs', 'numpy.core._multiarray_tests', 'numpy.core._dtype_ctypes', '_ctypes', 'ctypes', 'ctypes._endian', 'numpy.core._internal', 'platform', 'subprocess', 'signal', '_posixsubprocess', 'select', 'selectors', 'threading', 'traceback', 'linecache', 'tokenize', 'token', '_weakrefset', 'numpy._pytesttester', 'numpy.lib', 'numpy.lib.info', 'numpy.lib.type_check', 'numpy.lib.ufunclike', 'numpy.lib.index_tricks', 'numpy.matrixlib', 'numpy.matrixlib.defmatrix', 'ast', '_ast', 'numpy.linalg', 'numpy.linalg.info', 'numpy.linalg.linalg', 'numpy.lib.twodim_base', 'numpy.linalg.lapack_lite', 'numpy.linalg._umath_linalg', 'numpy.lib.function_base', 'numpy.lib.histograms', 'numpy.lib.stride_tricks', 'numpy.lib.mixins', 'numpy.lib.nanfunctions', 'numpy.lib.shape_base', 'numpy.lib.scimath', 'numpy.lib.polynomial', 'numpy.lib.utils', 'numpy.lib.arraysetops', 'numpy.lib.npyio', 'weakref', 'numpy.lib.format', 'numpy.lib._datasource', 'shutil', 'zlib', 'bz2', '_compression', '_bz2', 'lzma', '_lzma', 'pwd', 'grp', 'numpy.lib._iotools', 'numpy.lib.financial', 'decimal', '_pydecimal', 'contextvars', '_contextvars', 'locale', 'numpy.lib.arrayterator', 'numpy.lib.arraypad', 'numpy.lib._version', 'numpy.fft', 'numpy.fft._pocketfft', 'numpy.fft._pocketfft_internal', 'numpy.fft.helper', 'numpy.polynomial', 'numpy.polynomial.polynomial', 'numpy.polynomial.polyutils', 'numpy.polynomial._polybase', 'numpy.polynomial.chebyshev', 'numpy.polynomial.legendre', 'numpy.polynomial.hermite', 'numpy.polynomial.hermite_e', 'numpy.polynomial.laguerre', 'numpy.random', 'numpy.random._pickle', 'numpy.random.mtrand', 'cython_runtime', 'numpy.random.common', 'numpy.random.bounded_integers', 'numpy.random.mt19937', 'numpy.random.bit_generator', '_cython_0_29_13', 'secrets', 'base64', 'binascii', 'hmac', '_hashlib', 'hashlib', '_blake2', '_sha3', 'random', 'bisect', '_bisect', '_random', 'numpy.random.philox', 'numpy.random.pcg64', 'numpy.random.sfc64', 'numpy.random.generator', 'numpy.ctypeslib', 'numpy.ma', 'numpy.ma.core', 'numpy.ma.extras', 'numpy.testing', 'unittest', 'unittest.result', 'unittest.util', 'unittest.case', 'difflib', 'logging', 'string', '_string', 'atexit', 'pprint', 'unittest.suite', 'unittest.loader', 'unittest.main', 'argparse', 'gettext', 'unittest.runner', 'unittest.signals', 'numpy.testing._private', 'numpy.testing._private.utils', 'gc', 'tempfile', 'numpy.testing._private.decorators', 'numpy.testing._private.nosetester', 'aircraftstudio.creator.fuselage', 'aircraftstudio.creator.propulsion', 'aircraftstudio.creator.wing', 'matplotlib', 'distutils', 'distutils.version', 'inspect', 'dis', 'opcode', '_opcode', 'matplotlib.cbook', 'glob', 'gzip', 'matplotlib.cbook.deprecation', 'matplotlib.rcsetup', 'matplotlib.fontconfig_pattern', 'pyparsing', 'copy', 'matplotlib.colors', 'matplotlib._color_data', 'cycler', 'six', 'six.moves', 'matplotlib._version', 'json', 'json.decoder', 'json.scanner', '_json', 'json.encoder', 'matplotlib.ft2font', 'dateutil', 'dateutil._version', 'kiwisolver', 'socket', '_socket']
139 Added: 2019-11-01 17:57:52,441 - DEBUG - CACHEDIR=/home/blendux/.cache/matplotlib
140 Added: 2019-11-01 17:57:52,442 - DEBUG - Using fontManager instance from /home/blendux/.cache/matplotlib/fontlist-v310.json
141 Added: 2019-11-01 17:57:52,532 - DEBUG - Loaded backend qt5agg version unknown.
142 Added: 2019-11-01 17:57:52,542 - DEBUG - Loaded backend tkagg version unknown.
143 Added: 2019-11-01 17:57:52,542 - DEBUG - Loaded backend TkAgg version unknown.
144 Added: 2019-11-01 18:00:17,743 - DEBUG - $HOME=/home/blendux
145 Added: 2019-11-01 18:00:17,744 - DEBUG - CONFIGDIR=/home/blendux/.config/matplotlib
146 Added: 2019-11-01 18:00:17,744 - DEBUG - matplotlib data path: /usr/lib/python3.7/site-packages/matplotlib/mpl-data
147 Added: 2019-11-01 18:00:17,749 - DEBUG - loaded rc file /usr/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc
148 Added: 2019-11-01 18:00:17,750 - DEBUG - matplotlib version 3.1.1
149 Added: 2019-11-01 18:00:17,750 - DEBUG - interactive is False
150 Added: 2019-11-01 18:00:17,750 - DEBUG - platform is linux
151 Added: 2019-11-01 18:00:17,751 - DEBUG - loaded modules: ['sys', 'builtins', '_frozen_importlib', '_imp', '_thread', '_warnings', '_weakref', 'zipimport', '_frozen_importlib_external', '_io', 'marshal', 'posix', 'encodings', 'codecs', '_codecs', 'encodings.aliases', 'encodings.utf_8', '_signal', '__main__', 'encodings.latin_1', 'io', 'abc', '_abc', 'site', 'os', 'stat', '_stat', 'posixpath', 'genericpath', 'os.path', '_collections_abc', '_sitebuiltins', '_bootlocale', '_locale', 'types', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'warnings', 'importlib.util', 'importlib.abc', 'importlib.machinery', 'contextlib', 'collections', 'operator', '_operator', 'keyword', 'heapq', '_heapq', 'itertools', 'reprlib', '_collections', 'functools', '_functools', 'mpl_toolkits', 'sphinxcontrib', 'aircraftstudio', 'aircraftstudio.creator', 'aircraftstudio.creator.base', 'numpy', '__future__', 'numpy._globals', 'numpy.__config__', 'numpy.version', 'numpy._distributor_init', 'numpy.core', 'numpy.core.info', 'numpy.core.multiarray', 'numpy.core.overrides', 'textwrap', 're', 'enum', 'sre_compile', '_sre', 'sre_parse', 'sre_constants', 'copyreg', 'datetime', 'time', 'math', '_datetime', 'numpy.core._multiarray_umath', 'numpy.compat', 'numpy.compat._inspect', 'numpy.compat.py3k', 'pathlib', 'fnmatch', 'ntpath', 'errno', 'urllib', 'urllib.parse', 'pickle', 'struct', '_struct', '_compat_pickle', '_pickle', 'numpy.core.umath', 'numpy.core.numerictypes', 'numbers', 'numpy.core._string_helpers', 'numpy.core._type_aliases', 'numpy.core._dtype', 'numpy.core.numeric', 'numpy.core._exceptions', 'numpy.core._asarray', 'numpy.core._ufunc_config', 'collections.abc', 'numpy.core.fromnumeric', 'numpy.core._methods', 'numpy.core.arrayprint', 'numpy.core.defchararray', 'numpy.core.records', 'numpy.core.memmap', 'numpy.core.function_base', 'numpy.core.machar', 'numpy.core.getlimits', 'numpy.core.shape_base', 'numpy.core.einsumfunc', 'numpy.core._add_newdocs', 'numpy.core._multiarray_tests', 'numpy.core._dtype_ctypes', '_ctypes', 'ctypes', 'ctypes._endian', 'numpy.core._internal', 'platform', 'subprocess', 'signal', '_posixsubprocess', 'select', 'selectors', 'threading', 'traceback', 'linecache', 'tokenize', 'token', '_weakrefset', 'numpy._pytesttester', 'numpy.lib', 'numpy.lib.info', 'numpy.lib.type_check', 'numpy.lib.ufunclike', 'numpy.lib.index_tricks', 'numpy.matrixlib', 'numpy.matrixlib.defmatrix', 'ast', '_ast', 'numpy.linalg', 'numpy.linalg.info', 'numpy.linalg.linalg', 'numpy.lib.twodim_base', 'numpy.linalg.lapack_lite', 'numpy.linalg._umath_linalg', 'numpy.lib.function_base', 'numpy.lib.histograms', 'numpy.lib.stride_tricks', 'numpy.lib.mixins', 'numpy.lib.nanfunctions', 'numpy.lib.shape_base', 'numpy.lib.scimath', 'numpy.lib.polynomial', 'numpy.lib.utils', 'numpy.lib.arraysetops', 'numpy.lib.npyio', 'weakref', 'numpy.lib.format', 'numpy.lib._datasource', 'shutil', 'zlib', 'bz2', '_compression', '_bz2', 'lzma', '_lzma', 'pwd', 'grp', 'numpy.lib._iotools', 'numpy.lib.financial', 'decimal', '_pydecimal', 'contextvars', '_contextvars', 'locale', 'numpy.lib.arrayterator', 'numpy.lib.arraypad', 'numpy.lib._version', 'numpy.fft', 'numpy.fft._pocketfft', 'numpy.fft._pocketfft_internal', 'numpy.fft.helper', 'numpy.polynomial', 'numpy.polynomial.polynomial', 'numpy.polynomial.polyutils', 'numpy.polynomial._polybase', 'numpy.polynomial.chebyshev', 'numpy.polynomial.legendre', 'numpy.polynomial.hermite', 'numpy.polynomial.hermite_e', 'numpy.polynomial.laguerre', 'numpy.random', 'numpy.random._pickle', 'numpy.random.mtrand', 'cython_runtime', 'numpy.random.common', 'numpy.random.bounded_integers', 'numpy.random.mt19937', 'numpy.random.bit_generator', '_cython_0_29_13', 'secrets', 'base64', 'binascii', 'hmac', '_hashlib', 'hashlib', '_blake2', '_sha3', 'random', 'bisect', '_bisect', '_random', 'numpy.random.philox', 'numpy.random.pcg64', 'numpy.random.sfc64', 'numpy.random.generator', 'numpy.ctypeslib', 'numpy.ma', 'numpy.ma.core', 'numpy.ma.extras', 'numpy.testing', 'unittest', 'unittest.result', 'unittest.util', 'unittest.case', 'difflib', 'logging', 'string', '_string', 'atexit', 'pprint', 'unittest.suite', 'unittest.loader', 'unittest.main', 'argparse', 'gettext', 'unittest.runner', 'unittest.signals', 'numpy.testing._private', 'numpy.testing._private.utils', 'gc', 'tempfile', 'numpy.testing._private.decorators', 'numpy.testing._private.nosetester', 'aircraftstudio.creator.fuselage', 'aircraftstudio.creator.propulsion', 'aircraftstudio.creator.wing', 'matplotlib', 'distutils', 'distutils.version', 'inspect', 'dis', 'opcode', '_opcode', 'matplotlib.cbook', 'glob', 'gzip', 'matplotlib.cbook.deprecation', 'matplotlib.rcsetup', 'matplotlib.fontconfig_pattern', 'pyparsing', 'copy', 'matplotlib.colors', 'matplotlib._color_data', 'cycler', 'six', 'six.moves', 'matplotlib._version', 'json', 'json.decoder', 'json.scanner', '_json', 'json.encoder', 'matplotlib.ft2font', 'dateutil', 'dateutil._version', 'kiwisolver', 'socket', '_socket']
152 Added: 2019-11-01 18:00:17,782 - DEBUG - CACHEDIR=/home/blendux/.cache/matplotlib
153 Added: 2019-11-01 18:00:17,783 - DEBUG - Using fontManager instance from /home/blendux/.cache/matplotlib/fontlist-v310.json
154 Added: 2019-11-01 18:00:17,872 - DEBUG - Loaded backend qt5agg version unknown.
155 Added: 2019-11-01 18:00:17,881 - DEBUG - Loaded backend tkagg version unknown.
156 Added: 2019-11-01 18:00:17,882 - DEBUG - Loaded backend TkAgg version unknown.
157 Added: 2019-11-01 18:00:38,980 - DEBUG - $HOME=/home/blendux
158 Added: 2019-11-01 18:00:38,981 - DEBUG - CONFIGDIR=/home/blendux/.config/matplotlib
159 Added: 2019-11-01 18:00:38,981 - DEBUG - matplotlib data path: /usr/lib/python3.7/site-packages/matplotlib/mpl-data
160 Added: 2019-11-01 18:00:38,986 - DEBUG - loaded rc file /usr/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc
161 Added: 2019-11-01 18:00:38,987 - DEBUG - matplotlib version 3.1.1
162 Added: 2019-11-01 18:00:38,988 - DEBUG - interactive is False
163 Added: 2019-11-01 18:00:38,988 - DEBUG - platform is linux
164 Added: 2019-11-01 18:00:38,988 - DEBUG - loaded modules: ['sys', 'builtins', '_frozen_importlib', '_imp', '_thread', '_warnings', '_weakref', 'zipimport', '_frozen_importlib_external', '_io', 'marshal', 'posix', 'encodings', 'codecs', '_codecs', 'encodings.aliases', 'encodings.utf_8', '_signal', '__main__', 'encodings.latin_1', 'io', 'abc', '_abc', 'site', 'os', 'stat', '_stat', 'posixpath', 'genericpath', 'os.path', '_collections_abc', '_sitebuiltins', '_bootlocale', '_locale', 'types', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'warnings', 'importlib.util', 'importlib.abc', 'importlib.machinery', 'contextlib', 'collections', 'operator', '_operator', 'keyword', 'heapq', '_heapq', 'itertools', 'reprlib', '_collections', 'functools', '_functools', 'mpl_toolkits', 'sphinxcontrib', 'aircraftstudio', 'aircraftstudio.creator', 'aircraftstudio.creator.base', 'numpy', '__future__', 'numpy._globals', 'numpy.__config__', 'numpy.version', 'numpy._distributor_init', 'numpy.core', 'numpy.core.info', 'numpy.core.multiarray', 'numpy.core.overrides', 'textwrap', 're', 'enum', 'sre_compile', '_sre', 'sre_parse', 'sre_constants', 'copyreg', 'datetime', 'time', 'math', '_datetime', 'numpy.core._multiarray_umath', 'numpy.compat', 'numpy.compat._inspect', 'numpy.compat.py3k', 'pathlib', 'fnmatch', 'ntpath', 'errno', 'urllib', 'urllib.parse', 'pickle', 'struct', '_struct', '_compat_pickle', '_pickle', 'numpy.core.umath', 'numpy.core.numerictypes', 'numbers', 'numpy.core._string_helpers', 'numpy.core._type_aliases', 'numpy.core._dtype', 'numpy.core.numeric', 'numpy.core._exceptions', 'numpy.core._asarray', 'numpy.core._ufunc_config', 'collections.abc', 'numpy.core.fromnumeric', 'numpy.core._methods', 'numpy.core.arrayprint', 'numpy.core.defchararray', 'numpy.core.records', 'numpy.core.memmap', 'numpy.core.function_base', 'numpy.core.machar', 'numpy.core.getlimits', 'numpy.core.shape_base', 'numpy.core.einsumfunc', 'numpy.core._add_newdocs', 'numpy.core._multiarray_tests', 'numpy.core._dtype_ctypes', '_ctypes', 'ctypes', 'ctypes._endian', 'numpy.core._internal', 'platform', 'subprocess', 'signal', '_posixsubprocess', 'select', 'selectors', 'threading', 'traceback', 'linecache', 'tokenize', 'token', '_weakrefset', 'numpy._pytesttester', 'numpy.lib', 'numpy.lib.info', 'numpy.lib.type_check', 'numpy.lib.ufunclike', 'numpy.lib.index_tricks', 'numpy.matrixlib', 'numpy.matrixlib.defmatrix', 'ast', '_ast', 'numpy.linalg', 'numpy.linalg.info', 'numpy.linalg.linalg', 'numpy.lib.twodim_base', 'numpy.linalg.lapack_lite', 'numpy.linalg._umath_linalg', 'numpy.lib.function_base', 'numpy.lib.histograms', 'numpy.lib.stride_tricks', 'numpy.lib.mixins', 'numpy.lib.nanfunctions', 'numpy.lib.shape_base', 'numpy.lib.scimath', 'numpy.lib.polynomial', 'numpy.lib.utils', 'numpy.lib.arraysetops', 'numpy.lib.npyio', 'weakref', 'numpy.lib.format', 'numpy.lib._datasource', 'shutil', 'zlib', 'bz2', '_compression', '_bz2', 'lzma', '_lzma', 'pwd', 'grp', 'numpy.lib._iotools', 'numpy.lib.financial', 'decimal', '_pydecimal', 'contextvars', '_contextvars', 'locale', 'numpy.lib.arrayterator', 'numpy.lib.arraypad', 'numpy.lib._version', 'numpy.fft', 'numpy.fft._pocketfft', 'numpy.fft._pocketfft_internal', 'numpy.fft.helper', 'numpy.polynomial', 'numpy.polynomial.polynomial', 'numpy.polynomial.polyutils', 'numpy.polynomial._polybase', 'numpy.polynomial.chebyshev', 'numpy.polynomial.legendre', 'numpy.polynomial.hermite', 'numpy.polynomial.hermite_e', 'numpy.polynomial.laguerre', 'numpy.random', 'numpy.random._pickle', 'numpy.random.mtrand', 'cython_runtime', 'numpy.random.common', 'numpy.random.bounded_integers', 'numpy.random.mt19937', 'numpy.random.bit_generator', '_cython_0_29_13', 'secrets', 'base64', 'binascii', 'hmac', '_hashlib', 'hashlib', '_blake2', '_sha3', 'random', 'bisect', '_bisect', '_random', 'numpy.random.philox', 'numpy.random.pcg64', 'numpy.random.sfc64', 'numpy.random.generator', 'numpy.ctypeslib', 'numpy.ma', 'numpy.ma.core', 'numpy.ma.extras', 'numpy.testing', 'unittest', 'unittest.result', 'unittest.util', 'unittest.case', 'difflib', 'logging', 'string', '_string', 'atexit', 'pprint', 'unittest.suite', 'unittest.loader', 'unittest.main', 'argparse', 'gettext', 'unittest.runner', 'unittest.signals', 'numpy.testing._private', 'numpy.testing._private.utils', 'gc', 'tempfile', 'numpy.testing._private.decorators', 'numpy.testing._private.nosetester', 'aircraftstudio.creator.fuselage', 'aircraftstudio.creator.propulsion', 'aircraftstudio.creator.wing', 'matplotlib', 'distutils', 'distutils.version', 'inspect', 'dis', 'opcode', '_opcode', 'matplotlib.cbook', 'glob', 'gzip', 'matplotlib.cbook.deprecation', 'matplotlib.rcsetup', 'matplotlib.fontconfig_pattern', 'pyparsing', 'copy', 'matplotlib.colors', 'matplotlib._color_data', 'cycler', 'six', 'six.moves', 'matplotlib._version', 'json', 'json.decoder', 'json.scanner', '_json', 'json.encoder', 'matplotlib.ft2font', 'dateutil', 'dateutil._version', 'kiwisolver', 'socket', '_socket']
165 Added: 2019-11-01 18:00:39,019 - DEBUG - CACHEDIR=/home/blendux/.cache/matplotlib
166 Added: 2019-11-01 18:00:39,020 - DEBUG - Using fontManager instance from /home/blendux/.cache/matplotlib/fontlist-v310.json
167 Added: 2019-11-01 18:00:39,108 - DEBUG - Loaded backend qt5agg version unknown.
168 Added: 2019-11-01 18:00:39,117 - DEBUG - Loaded backend tkagg version unknown.
169 Added: 2019-11-01 18:00:39,118 - DEBUG - Loaded backend TkAgg version unknown.
170 Added: 2019-11-01 18:00:44,523 - DEBUG - $HOME=/home/blendux
171 Added: 2019-11-01 18:00:44,523 - DEBUG - CONFIGDIR=/home/blendux/.config/matplotlib
172 Added: 2019-11-01 18:00:44,523 - DEBUG - matplotlib data path: /usr/lib/python3.7/site-packages/matplotlib/mpl-data
173 Added: 2019-11-01 18:00:44,528 - DEBUG - loaded rc file /usr/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc
174 Added: 2019-11-01 18:00:44,530 - DEBUG - matplotlib version 3.1.1
175 Added: 2019-11-01 18:00:44,530 - DEBUG - interactive is False
176 Added: 2019-11-01 18:00:44,530 - DEBUG - platform is linux
177 Added: 2019-11-01 18:00:44,530 - DEBUG - loaded modules: ['sys', 'builtins', '_frozen_importlib', '_imp', '_thread', '_warnings', '_weakref', 'zipimport', '_frozen_importlib_external', '_io', 'marshal', 'posix', 'encodings', 'codecs', '_codecs', 'encodings.aliases', 'encodings.utf_8', '_signal', '__main__', 'encodings.latin_1', 'io', 'abc', '_abc', 'site', 'os', 'stat', '_stat', 'posixpath', 'genericpath', 'os.path', '_collections_abc', '_sitebuiltins', '_bootlocale', '_locale', 'types', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'warnings', 'importlib.util', 'importlib.abc', 'importlib.machinery', 'contextlib', 'collections', 'operator', '_operator', 'keyword', 'heapq', '_heapq', 'itertools', 'reprlib', '_collections', 'functools', '_functools', 'mpl_toolkits', 'sphinxcontrib', 'aircraftstudio', 'aircraftstudio.creator', 'aircraftstudio.creator.base', 'numpy', '__future__', 'numpy._globals', 'numpy.__config__', 'numpy.version', 'numpy._distributor_init', 'numpy.core', 'numpy.core.info', 'numpy.core.multiarray', 'numpy.core.overrides', 'textwrap', 're', 'enum', 'sre_compile', '_sre', 'sre_parse', 'sre_constants', 'copyreg', 'datetime', 'time', 'math', '_datetime', 'numpy.core._multiarray_umath', 'numpy.compat', 'numpy.compat._inspect', 'numpy.compat.py3k', 'pathlib', 'fnmatch', 'ntpath', 'errno', 'urllib', 'urllib.parse', 'pickle', 'struct', '_struct', '_compat_pickle', '_pickle', 'numpy.core.umath', 'numpy.core.numerictypes', 'numbers', 'numpy.core._string_helpers', 'numpy.core._type_aliases', 'numpy.core._dtype', 'numpy.core.numeric', 'numpy.core._exceptions', 'numpy.core._asarray', 'numpy.core._ufunc_config', 'collections.abc', 'numpy.core.fromnumeric', 'numpy.core._methods', 'numpy.core.arrayprint', 'numpy.core.defchararray', 'numpy.core.records', 'numpy.core.memmap', 'numpy.core.function_base', 'numpy.core.machar', 'numpy.core.getlimits', 'numpy.core.shape_base', 'numpy.core.einsumfunc', 'numpy.core._add_newdocs', 'numpy.core._multiarray_tests', 'numpy.core._dtype_ctypes', '_ctypes', 'ctypes', 'ctypes._endian', 'numpy.core._internal', 'platform', 'subprocess', 'signal', '_posixsubprocess', 'select', 'selectors', 'threading', 'traceback', 'linecache', 'tokenize', 'token', '_weakrefset', 'numpy._pytesttester', 'numpy.lib', 'numpy.lib.info', 'numpy.lib.type_check', 'numpy.lib.ufunclike', 'numpy.lib.index_tricks', 'numpy.matrixlib', 'numpy.matrixlib.defmatrix', 'ast', '_ast', 'numpy.linalg', 'numpy.linalg.info', 'numpy.linalg.linalg', 'numpy.lib.twodim_base', 'numpy.linalg.lapack_lite', 'numpy.linalg._umath_linalg', 'numpy.lib.function_base', 'numpy.lib.histograms', 'numpy.lib.stride_tricks', 'numpy.lib.mixins', 'numpy.lib.nanfunctions', 'numpy.lib.shape_base', 'numpy.lib.scimath', 'numpy.lib.polynomial', 'numpy.lib.utils', 'numpy.lib.arraysetops', 'numpy.lib.npyio', 'weakref', 'numpy.lib.format', 'numpy.lib._datasource', 'shutil', 'zlib', 'bz2', '_compression', '_bz2', 'lzma', '_lzma', 'pwd', 'grp', 'numpy.lib._iotools', 'numpy.lib.financial', 'decimal', '_pydecimal', 'contextvars', '_contextvars', 'locale', 'numpy.lib.arrayterator', 'numpy.lib.arraypad', 'numpy.lib._version', 'numpy.fft', 'numpy.fft._pocketfft', 'numpy.fft._pocketfft_internal', 'numpy.fft.helper', 'numpy.polynomial', 'numpy.polynomial.polynomial', 'numpy.polynomial.polyutils', 'numpy.polynomial._polybase', 'numpy.polynomial.chebyshev', 'numpy.polynomial.legendre', 'numpy.polynomial.hermite', 'numpy.polynomial.hermite_e', 'numpy.polynomial.laguerre', 'numpy.random', 'numpy.random._pickle', 'numpy.random.mtrand', 'cython_runtime', 'numpy.random.common', 'numpy.random.bounded_integers', 'numpy.random.mt19937', 'numpy.random.bit_generator', '_cython_0_29_13', 'secrets', 'base64', 'binascii', 'hmac', '_hashlib', 'hashlib', '_blake2', '_sha3', 'random', 'bisect', '_bisect', '_random', 'numpy.random.philox', 'numpy.random.pcg64', 'numpy.random.sfc64', 'numpy.random.generator', 'numpy.ctypeslib', 'numpy.ma', 'numpy.ma.core', 'numpy.ma.extras', 'numpy.testing', 'unittest', 'unittest.result', 'unittest.util', 'unittest.case', 'difflib', 'logging', 'string', '_string', 'atexit', 'pprint', 'unittest.suite', 'unittest.loader', 'unittest.main', 'argparse', 'gettext', 'unittest.runner', 'unittest.signals', 'numpy.testing._private', 'numpy.testing._private.utils', 'gc', 'tempfile', 'numpy.testing._private.decorators', 'numpy.testing._private.nosetester', 'aircraftstudio.creator.fuselage', 'aircraftstudio.creator.propulsion', 'aircraftstudio.creator.wing', 'matplotlib', 'distutils', 'distutils.version', 'inspect', 'dis', 'opcode', '_opcode', 'matplotlib.cbook', 'glob', 'gzip', 'matplotlib.cbook.deprecation', 'matplotlib.rcsetup', 'matplotlib.fontconfig_pattern', 'pyparsing', 'copy', 'matplotlib.colors', 'matplotlib._color_data', 'cycler', 'six', 'six.moves', 'matplotlib._version', 'json', 'json.decoder', 'json.scanner', '_json', 'json.encoder', 'matplotlib.ft2font', 'dateutil', 'dateutil._version', 'kiwisolver', 'socket', '_socket']
178 Added: 2019-11-01 18:00:44,561 - DEBUG - CACHEDIR=/home/blendux/.cache/matplotlib
179 Added: 2019-11-01 18:00:44,562 - DEBUG - Using fontManager instance from /home/blendux/.cache/matplotlib/fontlist-v310.json
180 Added: 2019-11-01 18:00:44,652 - DEBUG - Loaded backend qt5agg version unknown.
181 Added: 2019-11-01 18:00:44,662 - DEBUG - Loaded backend tkagg version unknown.
182 Added: 2019-11-01 18:00:44,662 - DEBUG - Loaded backend TkAgg version unknown.
183 Added: 2019-11-01 18:00:56,851 - DEBUG - $HOME=/home/blendux
184 Added: 2019-11-01 18:00:56,851 - DEBUG - CONFIGDIR=/home/blendux/.config/matplotlib
185 Added: 2019-11-01 18:00:56,851 - DEBUG - matplotlib data path: /usr/lib/python3.7/site-packages/matplotlib/mpl-data
186 Added: 2019-11-01 18:00:56,856 - DEBUG - loaded rc file /usr/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc
187 Added: 2019-11-01 18:00:56,858 - DEBUG - matplotlib version 3.1.1
188 Added: 2019-11-01 18:00:56,858 - DEBUG - interactive is False
189 Added: 2019-11-01 18:00:56,858 - DEBUG - platform is linux
190 Added: 2019-11-01 18:00:56,858 - DEBUG - loaded modules: ['sys', 'builtins', '_frozen_importlib', '_imp', '_thread', '_warnings', '_weakref', 'zipimport', '_frozen_importlib_external', '_io', 'marshal', 'posix', 'encodings', 'codecs', '_codecs', 'encodings.aliases', 'encodings.utf_8', '_signal', '__main__', 'encodings.latin_1', 'io', 'abc', '_abc', 'site', 'os', 'stat', '_stat', 'posixpath', 'genericpath', 'os.path', '_collections_abc', '_sitebuiltins', '_bootlocale', '_locale', 'types', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'warnings', 'importlib.util', 'importlib.abc', 'importlib.machinery', 'contextlib', 'collections', 'operator', '_operator', 'keyword', 'heapq', '_heapq', 'itertools', 'reprlib', '_collections', 'functools', '_functools', 'mpl_toolkits', 'sphinxcontrib', 'aircraftstudio', 'aircraftstudio.creator', 'aircraftstudio.creator.base', 'numpy', '__future__', 'numpy._globals', 'numpy.__config__', 'numpy.version', 'numpy._distributor_init', 'numpy.core', 'numpy.core.info', 'numpy.core.multiarray', 'numpy.core.overrides', 'textwrap', 're', 'enum', 'sre_compile', '_sre', 'sre_parse', 'sre_constants', 'copyreg', 'datetime', 'time', 'math', '_datetime', 'numpy.core._multiarray_umath', 'numpy.compat', 'numpy.compat._inspect', 'numpy.compat.py3k', 'pathlib', 'fnmatch', 'ntpath', 'errno', 'urllib', 'urllib.parse', 'pickle', 'struct', '_struct', '_compat_pickle', '_pickle', 'numpy.core.umath', 'numpy.core.numerictypes', 'numbers', 'numpy.core._string_helpers', 'numpy.core._type_aliases', 'numpy.core._dtype', 'numpy.core.numeric', 'numpy.core._exceptions', 'numpy.core._asarray', 'numpy.core._ufunc_config', 'collections.abc', 'numpy.core.fromnumeric', 'numpy.core._methods', 'numpy.core.arrayprint', 'numpy.core.defchararray', 'numpy.core.records', 'numpy.core.memmap', 'numpy.core.function_base', 'numpy.core.machar', 'numpy.core.getlimits', 'numpy.core.shape_base', 'numpy.core.einsumfunc', 'numpy.core._add_newdocs', 'numpy.core._multiarray_tests', 'numpy.core._dtype_ctypes', '_ctypes', 'ctypes', 'ctypes._endian', 'numpy.core._internal', 'platform', 'subprocess', 'signal', '_posixsubprocess', 'select', 'selectors', 'threading', 'traceback', 'linecache', 'tokenize', 'token', '_weakrefset', 'numpy._pytesttester', 'numpy.lib', 'numpy.lib.info', 'numpy.lib.type_check', 'numpy.lib.ufunclike', 'numpy.lib.index_tricks', 'numpy.matrixlib', 'numpy.matrixlib.defmatrix', 'ast', '_ast', 'numpy.linalg', 'numpy.linalg.info', 'numpy.linalg.linalg', 'numpy.lib.twodim_base', 'numpy.linalg.lapack_lite', 'numpy.linalg._umath_linalg', 'numpy.lib.function_base', 'numpy.lib.histograms', 'numpy.lib.stride_tricks', 'numpy.lib.mixins', 'numpy.lib.nanfunctions', 'numpy.lib.shape_base', 'numpy.lib.scimath', 'numpy.lib.polynomial', 'numpy.lib.utils', 'numpy.lib.arraysetops', 'numpy.lib.npyio', 'weakref', 'numpy.lib.format', 'numpy.lib._datasource', 'shutil', 'zlib', 'bz2', '_compression', '_bz2', 'lzma', '_lzma', 'pwd', 'grp', 'numpy.lib._iotools', 'numpy.lib.financial', 'decimal', '_pydecimal', 'contextvars', '_contextvars', 'locale', 'numpy.lib.arrayterator', 'numpy.lib.arraypad', 'numpy.lib._version', 'numpy.fft', 'numpy.fft._pocketfft', 'numpy.fft._pocketfft_internal', 'numpy.fft.helper', 'numpy.polynomial', 'numpy.polynomial.polynomial', 'numpy.polynomial.polyutils', 'numpy.polynomial._polybase', 'numpy.polynomial.chebyshev', 'numpy.polynomial.legendre', 'numpy.polynomial.hermite', 'numpy.polynomial.hermite_e', 'numpy.polynomial.laguerre', 'numpy.random', 'numpy.random._pickle', 'numpy.random.mtrand', 'cython_runtime', 'numpy.random.common', 'numpy.random.bounded_integers', 'numpy.random.mt19937', 'numpy.random.bit_generator', '_cython_0_29_13', 'secrets', 'base64', 'binascii', 'hmac', '_hashlib', 'hashlib', '_blake2', '_sha3', 'random', 'bisect', '_bisect', '_random', 'numpy.random.philox', 'numpy.random.pcg64', 'numpy.random.sfc64', 'numpy.random.generator', 'numpy.ctypeslib', 'numpy.ma', 'numpy.ma.core', 'numpy.ma.extras', 'numpy.testing', 'unittest', 'unittest.result', 'unittest.util', 'unittest.case', 'difflib', 'logging', 'string', '_string', 'atexit', 'pprint', 'unittest.suite', 'unittest.loader', 'unittest.main', 'argparse', 'gettext', 'unittest.runner', 'unittest.signals', 'numpy.testing._private', 'numpy.testing._private.utils', 'gc', 'tempfile', 'numpy.testing._private.decorators', 'numpy.testing._private.nosetester', 'aircraftstudio.creator.fuselage', 'aircraftstudio.creator.propulsion', 'aircraftstudio.creator.wing', 'matplotlib', 'distutils', 'distutils.version', 'inspect', 'dis', 'opcode', '_opcode', 'matplotlib.cbook', 'glob', 'gzip', 'matplotlib.cbook.deprecation', 'matplotlib.rcsetup', 'matplotlib.fontconfig_pattern', 'pyparsing', 'copy', 'matplotlib.colors', 'matplotlib._color_data', 'cycler', 'six', 'six.moves', 'matplotlib._version', 'json', 'json.decoder', 'json.scanner', '_json', 'json.encoder', 'matplotlib.ft2font', 'dateutil', 'dateutil._version', 'kiwisolver', 'socket', '_socket']
191 Added: 2019-11-01 18:00:56,889 - DEBUG - CACHEDIR=/home/blendux/.cache/matplotlib
192 Added: 2019-11-01 18:00:56,891 - DEBUG - Using fontManager instance from /home/blendux/.cache/matplotlib/fontlist-v310.json
193 Added: 2019-11-01 18:00:56,979 - DEBUG - Loaded backend qt5agg version unknown.
194 Added: 2019-11-01 18:00:56,989 - DEBUG - Loaded backend tkagg version unknown.
195 Added: 2019-11-01 18:00:56,989 - DEBUG - Loaded backend TkAgg version unknown.
196 Added: 2019-11-01 18:08:24,846 - DEBUG - $HOME=/home/blendux
197 Added: 2019-11-01 18:08:24,846 - DEBUG - CONFIGDIR=/home/blendux/.config/matplotlib
198 Added: 2019-11-01 18:08:24,846 - DEBUG - matplotlib data path: /usr/lib/python3.7/site-packages/matplotlib/mpl-data
199 Added: 2019-11-01 18:08:24,851 - DEBUG - loaded rc file /usr/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc
200 Added: 2019-11-01 18:08:24,853 - DEBUG - matplotlib version 3.1.1
201 Added: 2019-11-01 18:08:24,853 - DEBUG - interactive is False
202 Added: 2019-11-01 18:08:24,853 - DEBUG - platform is linux
203 Added: 2019-11-01 18:08:24,853 - DEBUG - loaded modules: ['sys', 'builtins', '_frozen_importlib', '_imp', '_thread', '_warnings', '_weakref', 'zipimport', '_frozen_importlib_external', '_io', 'marshal', 'posix', 'encodings', 'codecs', '_codecs', 'encodings.aliases', 'encodings.utf_8', '_signal', '__main__', 'encodings.latin_1', 'io', 'abc', '_abc', 'site', 'os', 'stat', '_stat', 'posixpath', 'genericpath', 'os.path', '_collections_abc', '_sitebuiltins', '_bootlocale', '_locale', 'types', 'importlib', 'importlib._bootstrap', 'importlib._bootstrap_external', 'warnings', 'importlib.util', 'importlib.abc', 'importlib.machinery', 'contextlib', 'collections', 'operator', '_operator', 'keyword', 'heapq', '_heapq', 'itertools', 'reprlib', '_collections', 'functools', '_functools', 'mpl_toolkits', 'sphinxcontrib', 'aircraftstudio', 'aircraftstudio.creator', 'aircraftstudio.creator.base', 'numpy', '__future__', 'numpy._globals', 'numpy.__config__', 'numpy.version', 'numpy._distributor_init', 'numpy.core', 'numpy.core.info', 'numpy.core.multiarray', 'numpy.core.overrides', 'textwrap', 're', 'enum', 'sre_compile', '_sre', 'sre_parse', 'sre_constants', 'copyreg', 'datetime', 'time', 'math', '_datetime', 'numpy.core._multiarray_umath', 'numpy.compat', 'numpy.compat._inspect', 'numpy.compat.py3k', 'pathlib', 'fnmatch', 'ntpath', 'errno', 'urllib', 'urllib.parse', 'pickle', 'struct', '_struct', '_compat_pickle', '_pickle', 'numpy.core.umath', 'numpy.core.numerictypes', 'numbers', 'numpy.core._string_helpers', 'numpy.core._type_aliases', 'numpy.core._dtype', 'numpy.core.numeric', 'numpy.core._exceptions', 'numpy.core._asarray', 'numpy.core._ufunc_config', 'collections.abc', 'numpy.core.fromnumeric', 'numpy.core._methods', 'numpy.core.arrayprint', 'numpy.core.defchararray', 'numpy.core.records', 'numpy.core.memmap', 'numpy.core.function_base', 'numpy.core.machar', 'numpy.core.getlimits', 'numpy.core.shape_base', 'numpy.core.einsumfunc', 'numpy.core._add_newdocs', 'numpy.core._multiarray_tests', 'numpy.core._dtype_ctypes', '_ctypes', 'ctypes', 'ctypes._endian', 'numpy.core._internal', 'platform', 'subprocess', 'signal', '_posixsubprocess', 'select', 'selectors', 'threading', 'traceback', 'linecache', 'tokenize', 'token', '_weakrefset', 'numpy._pytesttester', 'numpy.lib', 'numpy.lib.info', 'numpy.lib.type_check', 'numpy.lib.ufunclike', 'numpy.lib.index_tricks', 'numpy.matrixlib', 'numpy.matrixlib.defmatrix', 'ast', '_ast', 'numpy.linalg', 'numpy.linalg.info', 'numpy.linalg.linalg', 'numpy.lib.twodim_base', 'numpy.linalg.lapack_lite', 'numpy.linalg._umath_linalg', 'numpy.lib.function_base', 'numpy.lib.histograms', 'numpy.lib.stride_tricks', 'numpy.lib.mixins', 'numpy.lib.nanfunctions', 'numpy.lib.shape_base', 'numpy.lib.scimath', 'numpy.lib.polynomial', 'numpy.lib.utils', 'numpy.lib.arraysetops', 'numpy.lib.npyio', 'weakref', 'numpy.lib.format', 'numpy.lib._datasource', 'shutil', 'zlib', 'bz2', '_compression', '_bz2', 'lzma', '_lzma', 'pwd', 'grp', 'numpy.lib._iotools', 'numpy.lib.financial', 'decimal', '_pydecimal', 'contextvars', '_contextvars', 'locale', 'numpy.lib.arrayterator', 'numpy.lib.arraypad', 'numpy.lib._version', 'numpy.fft', 'numpy.fft._pocketfft', 'numpy.fft._pocketfft_internal', 'numpy.fft.helper', 'numpy.polynomial', 'numpy.polynomial.polynomial', 'numpy.polynomial.polyutils', 'numpy.polynomial._polybase', 'numpy.polynomial.chebyshev', 'numpy.polynomial.legendre', 'numpy.polynomial.hermite', 'numpy.polynomial.hermite_e', 'numpy.polynomial.laguerre', 'numpy.random', 'numpy.random._pickle', 'numpy.random.mtrand', 'cython_runtime', 'numpy.random.common', 'numpy.random.bounded_integers', 'numpy.random.mt19937', 'numpy.random.bit_generator', '_cython_0_29_13', 'secrets', 'base64', 'binascii', 'hmac', '_hashlib', 'hashlib', '_blake2', '_sha3', 'random', 'bisect', '_bisect', '_random', 'numpy.random.philox', 'numpy.random.pcg64', 'numpy.random.sfc64', 'numpy.random.generator', 'numpy.ctypeslib', 'numpy.ma', 'numpy.ma.core', 'numpy.ma.extras', 'numpy.testing', 'unittest', 'unittest.result', 'unittest.util', 'unittest.case', 'difflib', 'logging', 'string', '_string', 'atexit', 'pprint', 'unittest.suite', 'unittest.loader', 'unittest.main', 'argparse', 'gettext', 'unittest.runner', 'unittest.signals', 'numpy.testing._private', 'numpy.testing._private.utils', 'gc', 'tempfile', 'numpy.testing._private.decorators', 'numpy.testing._private.nosetester', 'aircraftstudio.creator.fuselage', 'aircraftstudio.creator.propulsion', 'aircraftstudio.creator.wing', 'matplotlib', 'distutils', 'distutils.version', 'inspect', 'dis', 'opcode', '_opcode', 'matplotlib.cbook', 'glob', 'gzip', 'matplotlib.cbook.deprecation', 'matplotlib.rcsetup', 'matplotlib.fontconfig_pattern', 'pyparsing', 'copy', 'matplotlib.colors', 'matplotlib._color_data', 'cycler', 'six', 'six.moves', 'matplotlib._version', 'json', 'json.decoder', 'json.scanner', '_json', 'json.encoder', 'matplotlib.ft2font', 'dateutil', 'dateutil._version', 'kiwisolver', 'socket', '_socket']
204 Added: 2019-11-01 18:08:24,886 - DEBUG - CACHEDIR=/home/blendux/.cache/matplotlib
205 Added: 2019-11-01 18:08:24,887 - DEBUG - Using fontManager instance from /home/blendux/.cache/matplotlib/fontlist-v310.json
206 Added: 2019-11-01 18:08:24,977 - DEBUG - Loaded backend qt5agg version unknown.
207 Added: 2019-11-01 18:08:24,986 - DEBUG - Loaded backend tkagg version unknown.
208 Added: 2019-11-01 18:08:24,987 - DEBUG - Loaded backend TkAgg version unknown.
setup.py
index 00000000..db01414f 000000..100644
@@ -0,0 +1,4 @@
1 Added: from distutils.core import setup
2 Added: from Cython.Build import cythonize
3 Added:
4 Added: setup(ext_modules=cythonize('example.py'))
test/creator_test.py
index 00000000..303ac66e 000000..100644
@@ -0,0 +1,7 @@
1 Added: import unittest
2 Added: from aircraftstudio import creator
3 Added:
4 Added:
5 Added: class TestDefaults(unittest.TestCase):
6 Added: def test_default_aircraft(self):
7 Added: self.assertEqual(creator.base.Aircraft.from_defaults().naca_num, 2412)