From 8b6f11119790c8c930734894a37d2a4aaa42462d Mon Sep 17 00:00:00 2001 From: blendoit Date: Fri, 1 Nov 2019 18:12:34 -0700 Subject: Start work on optimized multiprocessing random a/c gen. & eval. --- Pipfile | 4 +- Pipfile.lock | 110 +----------- aircraftstudio/__init__.py | 1 + aircraftstudio/creator/__init__.py | 4 + aircraftstudio/creator/base.py | 112 ++++++++++++ aircraftstudio/creator/fuselage.py | 0 aircraftstudio/creator/propulsion.py | 0 aircraftstudio/creator/wing.py | 312 ++++++++++++++++++++++++++++++++++ aircraftstudio/evaluator/__init__.py | 1 + aircraftstudio/evaluator/dP.py | 18 ++ aircraftstudio/evaluator/drag.py | 18 ++ aircraftstudio/evaluator/evaluator.py | 195 +++++++++++++++++++++ aircraftstudio/evaluator/inertia.py | 66 +++++++ aircraftstudio/evaluator/lift.py | 30 ++++ aircraftstudio/evaluator/mass.py | 8 + aircraftstudio/generator/__init__.py | 1 + aircraftstudio/generator/generator.py | 43 +++++ creator/__init__.py | 4 - creator/__init__.pyc | Bin 311 -> 0 bytes creator/base.py | 93 ---------- creator/fuselage.py | 0 creator/log_base.txt | 0 creator/propulsion.py | 0 creator/wing.py | 312 ---------------------------------- evaluator/__init__.py | 1 - evaluator/dP.py | 18 -- evaluator/drag.py | 18 -- evaluator/evaluator.py | 195 --------------------- evaluator/inertia.py | 66 ------- evaluator/lift.py | 30 ---- evaluator/mass.py | 8 - example.py | 26 ++- generator/__init__.py | 1 - generator/generator.py | 43 ----- log_base.txt | 208 +++++++++++++++++++++++ setup.py | 4 + test/creator_test.py | 7 + 37 files changed, 1042 insertions(+), 915 deletions(-) create mode 100644 aircraftstudio/__init__.py create mode 100644 aircraftstudio/creator/__init__.py create mode 100644 aircraftstudio/creator/base.py create mode 100644 aircraftstudio/creator/fuselage.py create mode 100644 aircraftstudio/creator/propulsion.py create mode 100644 aircraftstudio/creator/wing.py create mode 100644 aircraftstudio/evaluator/__init__.py create mode 100644 aircraftstudio/evaluator/dP.py create mode 100644 aircraftstudio/evaluator/drag.py create mode 100644 aircraftstudio/evaluator/evaluator.py create mode 100644 aircraftstudio/evaluator/inertia.py create mode 100644 aircraftstudio/evaluator/lift.py create mode 100644 aircraftstudio/evaluator/mass.py create mode 100644 aircraftstudio/generator/__init__.py create mode 100644 aircraftstudio/generator/generator.py delete mode 100644 creator/__init__.py delete mode 100644 creator/__init__.pyc delete mode 100644 creator/base.py delete mode 100644 creator/fuselage.py delete mode 100644 creator/log_base.txt delete mode 100644 creator/propulsion.py delete mode 100644 creator/wing.py delete mode 100644 evaluator/__init__.py delete mode 100644 evaluator/dP.py delete mode 100644 evaluator/drag.py delete mode 100644 evaluator/evaluator.py delete mode 100644 evaluator/inertia.py delete mode 100644 evaluator/lift.py delete mode 100644 evaluator/mass.py delete mode 100644 generator/__init__.py delete mode 100644 generator/generator.py create mode 100644 setup.py create mode 100644 test/creator_test.py diff --git a/Pipfile b/Pipfile index 309b2b0..9534830 100644 --- a/Pipfile +++ b/Pipfile @@ -6,8 +6,6 @@ verify_ssl = true [dev-packages] [packages] -numpy = "*" -matplotlib = "*" [requires] -python_version = "3.7" +python_version = "3.6" diff --git a/Pipfile.lock b/Pipfile.lock index 7ee8515..419c7ab 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,11 +1,11 @@ { "_meta": { "hash": { - "sha256": "a67dca5f16ddc46fb13b6e907c6a3a310410154c905c1fbffcc496db0d7ccd87" + "sha256": "415dfdcb118dd9bdfef17671cb7dcd78dbd69b6ae7d4f39e8b44e71d60ca72e7" }, "pipfile-spec": 6, "requires": { - "python_version": "3.7" + "python_version": "3.6" }, "sources": [ { @@ -15,110 +15,6 @@ } ] }, - "default": { - "cycler": { - "hashes": [ - "sha256:1d8a5ae1ff6c5cf9b93e8811e581232ad8920aeec647c37316ceac982b08cb2d", - "sha256:cd7b2d1018258d7247a71425e9f26463dfb444d411c39569972f4ce586b0c9d8" - ], - "version": "==0.10.0" - }, - "kiwisolver": { - "hashes": [ - "sha256:05b5b061e09f60f56244adc885c4a7867da25ca387376b02c1efc29cc16bcd0f", - "sha256:26f4fbd6f5e1dabff70a9ba0d2c4bd30761086454aa30dddc5b52764ee4852b7", - "sha256:3b2378ad387f49cbb328205bda569b9f87288d6bc1bf4cd683c34523a2341efe", - "sha256:400599c0fe58d21522cae0e8b22318e09d9729451b17ee61ba8e1e7c0346565c", - "sha256:47b8cb81a7d18dbaf4fed6a61c3cecdb5adec7b4ac292bddb0d016d57e8507d5", - "sha256:53eaed412477c836e1b9522c19858a8557d6e595077830146182225613b11a75", - "sha256:58e626e1f7dfbb620d08d457325a4cdac65d1809680009f46bf41eaf74ad0187", - "sha256:5a52e1b006bfa5be04fe4debbcdd2688432a9af4b207a3f429c74ad625022641", - "sha256:5c7ca4e449ac9f99b3b9d4693debb1d6d237d1542dd6a56b3305fe8a9620f883", - "sha256:682e54f0ce8f45981878756d7203fd01e188cc6c8b2c5e2cf03675390b4534d5", - "sha256:79bfb2f0bd7cbf9ea256612c9523367e5ec51d7cd616ae20ca2c90f575d839a2", - "sha256:7f4dd50874177d2bb060d74769210f3bce1af87a8c7cf5b37d032ebf94f0aca3", - "sha256:8944a16020c07b682df861207b7e0efcd2f46c7488619cb55f65882279119389", - "sha256:8aa7009437640beb2768bfd06da049bad0df85f47ff18426261acecd1cf00897", - "sha256:939f36f21a8c571686eb491acfffa9c7f1ac345087281b412d63ea39ca14ec4a", - "sha256:9733b7f64bd9f807832d673355f79703f81f0b3e52bfce420fc00d8cb28c6a6c", - "sha256:a02f6c3e229d0b7220bd74600e9351e18bc0c361b05f29adae0d10599ae0e326", - "sha256:a0c0a9f06872330d0dd31b45607197caab3c22777600e88031bfe66799e70bb0", - "sha256:acc4df99308111585121db217681f1ce0eecb48d3a828a2f9bbf9773f4937e9e", - "sha256:b64916959e4ae0ac78af7c3e8cef4becee0c0e9694ad477b4c6b3a536de6a544", - "sha256:d3fcf0819dc3fea58be1fd1ca390851bdb719a549850e708ed858503ff25d995", - "sha256:d52e3b1868a4e8fd18b5cb15055c76820df514e26aa84cc02f593d99fef6707f", - "sha256:db1a5d3cc4ae943d674718d6c47d2d82488ddd94b93b9e12d24aabdbfe48caee", - "sha256:e3a21a720791712ed721c7b95d433e036134de6f18c77dbe96119eaf7aa08004", - "sha256:e8bf074363ce2babeb4764d94f8e65efd22e6a7c74860a4f05a6947afc020ff2", - "sha256:f16814a4a96dc04bf1da7d53ee8d5b1d6decfc1a92a63349bb15d37b6a263dd9", - "sha256:f2b22153870ca5cf2ab9c940d7bc38e8e9089fa0f7e5856ea195e1cf4ff43d5a", - "sha256:f790f8b3dff3d53453de6a7b7ddd173d2e020fb160baff578d578065b108a05f" - ], - "version": "==1.1.0" - }, - "matplotlib": { - "hashes": [ - "sha256:1febd22afe1489b13c6749ea059d392c03261b2950d1d45c17e3aed812080c93", - "sha256:31a30d03f39528c79f3a592857be62a08595dec4ac034978ecd0f814fa0eec2d", - "sha256:4442ce720907f67a79d45de9ada47be81ce17e6c2f448b3c64765af93f6829c9", - "sha256:796edbd1182cbffa7e1e7a97f1e141f875a8501ba8dd834269ae3cd45a8c976f", - "sha256:934e6243df7165aad097572abf5b6003c77c9b6c480c3c4de6f2ef1b5fdd4ec0", - "sha256:bab9d848dbf1517bc58d1f486772e99919b19efef5dd8596d4b26f9f5ee08b6b", - "sha256:c1fe1e6cdaa53f11f088b7470c2056c0df7d80ee4858dadf6cbe433fcba4323b", - "sha256:e5b8aeca9276a3a988caebe9f08366ed519fff98f77c6df5b64d7603d0e42e36", - "sha256:ec6bd0a6a58df3628ff269978f4a4b924a0d371ad8ce1f8e2b635b99e482877a" - ], - "index": "pypi", - "version": "==3.1.1" - }, - "numpy": { - "hashes": [ - "sha256:0b0dd8f47fb177d00fa6ef2d58783c4f41ad3126b139c91dd2f7c4b3fdf5e9a5", - "sha256:25ffe71f96878e1da7e014467e19e7db90ae7d4e12affbc73101bcf61785214e", - "sha256:26efd7f7d755e6ca966a5c0ac5a930a87dbbaab1c51716ac26a38f42ecc9bc4b", - "sha256:28b1180c758abf34a5c3fea76fcee66a87def1656724c42bb14a6f9717a5bdf7", - "sha256:2e418f0a59473dac424f888dd57e85f77502a593b207809211c76e5396ae4f5c", - "sha256:30c84e3a62cfcb9e3066f25226e131451312a044f1fe2040e69ce792cb7de418", - "sha256:4650d94bb9c947151737ee022b934b7d9a845a7c76e476f3e460f09a0c8c6f39", - "sha256:4dd830a11e8724c9c9379feed1d1be43113f8bcce55f47ea7186d3946769ce26", - "sha256:4f2a2b279efde194877aff1f76cf61c68e840db242a5c7169f1ff0fd59a2b1e2", - "sha256:62d22566b3e3428dfc9ec972014c38ed9a4db4f8969c78f5414012ccd80a149e", - "sha256:669795516d62f38845c7033679c648903200980d68935baaa17ac5c7ae03ae0c", - "sha256:75fcd60d682db3e1f8fbe2b8b0c6761937ad56d01c1dc73edf4ef2748d5b6bc4", - "sha256:9395b0a41e8b7e9a284e3be7060db9d14ad80273841c952c83a5afc241d2bd98", - "sha256:9e37c35fc4e9410093b04a77d11a34c64bf658565e30df7cbe882056088a91c1", - "sha256:a0678793096205a4d784bd99f32803ba8100f639cf3b932dc63b21621390ea7e", - "sha256:b46554ad4dafb2927f88de5a1d207398c5385edbb5c84d30b3ef187c4a3894d8", - "sha256:c867eeccd934920a800f65c6068acdd6b87e80d45cd8c8beefff783b23cdc462", - "sha256:dd0667f5be56fb1b570154c2c0516a528e02d50da121bbbb2cbb0b6f87f59bc2", - "sha256:de2b1c20494bdf47f0160bd88ed05f5e48ae5dc336b8de7cfade71abcc95c0b9", - "sha256:f1df7b2b7740dd777571c732f98adb5aad5450aee32772f1b39249c8a50386f6", - "sha256:ffca69e29079f7880c5392bf675eb8b4146479d976ae1924d01cd92b04cccbcc" - ], - "index": "pypi", - "version": "==1.17.3" - }, - "pyparsing": { - "hashes": [ - "sha256:6f98a7b9397e206d78cc01df10131398f1c8b8510a2f4d97d9abd82e1aacdd80", - "sha256:d9338df12903bbf5d65a0e4e87c2161968b10d2e489652bb47001d82a9b028b4" - ], - "version": "==2.4.2" - }, - "python-dateutil": { - "hashes": [ - "sha256:7e6584c74aeed623791615e26efd690f29817a27c73085b78e4bad02493df2fb", - "sha256:c89805f6f4d64db21ed966fda138f8a5ed7a4fdbc1a8ee329ce1b74e3c74da9e" - ], - "version": "==2.8.0" - }, - "six": { - "hashes": [ - "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c", - "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73" - ], - "version": "==1.12.0" - } - }, + "default": {}, "develop": {} } diff --git a/aircraftstudio/__init__.py b/aircraftstudio/__init__.py new file mode 100644 index 0000000..dda0cea --- /dev/null +++ b/aircraftstudio/__init__.py @@ -0,0 +1 @@ +from . import creator, evaluator, generator diff --git a/aircraftstudio/creator/__init__.py b/aircraftstudio/creator/__init__.py new file mode 100644 index 0000000..818c7b2 --- /dev/null +++ b/aircraftstudio/creator/__init__.py @@ -0,0 +1,4 @@ +from . import base +from . import fuselage +from . import propulsion +from . import wing diff --git a/aircraftstudio/creator/base.py b/aircraftstudio/creator/base.py new file mode 100644 index 0000000..92fe421 --- /dev/null +++ b/aircraftstudio/creator/base.py @@ -0,0 +1,112 @@ +"""The base.py module contains parent classes for components.""" + +import numpy as np +import os.path +import random +import logging + +from aircraftstudio import creator + +logging.basicConfig(filename='log_base.txt', + level=logging.DEBUG, + format='%(asctime)s - %(levelname)s - %(message)s') + + +class Aircraft: + """This class tracks all sub-components and is fed to the evaluator.""" + name = None + fuselage = None + propulsion = None + wing = None + properties = {} + + naca = [2412, 3412, 2420] + + def __init__(self): + self.results = {} + + def __str__(self): + return self.name + + @classmethod + def from_default(cls): + aircraft = Aircraft() + aircraft.name = 'default_aircraft_' + str(random.randrange(1000, 9999)) + airfoil = creator.wing.Airfoil(aircraft, 'default_airfoil') + airfoil.add_naca(2412) + soar1 = creator.wing.Spar(airfoil, 'default_spar_1', 0.30) + soar2 = creator.wing.Spar(airfoil, 'default_spar_2', 0.60) + stringer = creator.wing.Stringer(airfoil, 'default_stringer') + return aircraft + + @classmethod + def from_random(cls): + aircraft = Aircraft() + aircraft.name = 'random_aircraft_' + str(random.randrange(1000, 9999)) + airfoil = creator.wing.Airfoil(aircraft, 'random_airfoil') + airfoil.add_naca(random.choice(cls.naca)) + soar1 = creator.wing.Spar(airfoil, 'random_spar_1', + random.randrange(20, 80) / 100) + soar2 = creator.wing.Spar(airfoil, 'random_spar_2', + random.randrange(20, 80) / 100) + stringer = creator.wing.Stringer(airfoil, 'random_stringer', + random.randint(1, 10), + random.randint(1, 10), + random.randint(1, 10), + random.randint(1, 10)) + return aircraft + + +class Component: + """Basic component providing coordinates, tools and a component tree.""" + def __init__(self, parent, name): + self.parent = parent + self.name = name + self.x = np.array([]) + self.z = np.array([]) + self.y = np.array([]) + self.material = None + self.mass = float() + self.properties = {} + + def __str__(self): + return self.name + + def info_print(self, round): + """Print all the component's coordinates to the terminal.""" + name = f' CREATOR DATA FOR {str(self).upper()} ' + num_of_dashes = len(name) + print(num_of_dashes * '-') + print(name) + for k, v in self.__dict__.items(): + if type(v) is not np.ndarray: + print(f'{k}:\n', v) + print(num_of_dashes * '-') + for k, v in self.__dict__.items(): + if type(v) is np.ndarray: + print(f'{k}:\n', np.around(v, round)) + return None + + def info_save(self, + save_path='/home/blendux/Projects/Aircraft_Studio/save'): + """Save all the object's coordinates (must be full path).""" + file_name = f'{self.name}_info.txt' + full_path = os.path.join(save_path, file_name) + try: + with open(full_path, 'w') as f: + for k, v in self.__dict__.items(): + if type(v) is not np.ndarray: + f.write(f'{k}=\n') + f.write(str(v)) + f.write("\n") + # print(num_of_dashes * '-') + for k, v in self.__dict__.items(): + if type(v) is np.ndarray: + f.write(f'{k}=\n') + f.write(str(v)) + f.write("\n") + logging.debug(f'Successfully wrote to file {full_path}') + except IOError: + print(f'Unable to write {file_name} to specified directory.\n', + 'Was the full path passed to the function?') + return None diff --git a/aircraftstudio/creator/fuselage.py b/aircraftstudio/creator/fuselage.py new file mode 100644 index 0000000..e69de29 diff --git a/aircraftstudio/creator/propulsion.py b/aircraftstudio/creator/propulsion.py new file mode 100644 index 0000000..e69de29 diff --git a/aircraftstudio/creator/wing.py b/aircraftstudio/creator/wing.py new file mode 100644 index 0000000..afe52fe --- /dev/null +++ b/aircraftstudio/creator/wing.py @@ -0,0 +1,312 @@ +""" +The wing.py module contains class definitions for and various components +we add to an airfoil (spars, stringers, and ribs). + +Classes: + Airfoil: instantiated with class method to provide coordinates to heirs. + Spar: inherits from Airfoil. + Stringer: also inherits from Airfoil. + +Functions: + plot_geom(airfoil): generates a 2D plot of the airfoil & any components. +""" + +import logging +import numpy as np +from math import sin, cos, atan +import bisect as bi +import matplotlib.pyplot as plt + +from aircraftstudio.creator import base +import resources.materials as mt + + +class Airfoil(base.Component): + """This class represents a single NACA airfoil. + + The coordinates are saved as two np.arrays + for the x- and z-coordinates. The coordinates start at + the leading edge, travel over the airfoil's upper edge, + then loop back to the leading edge via the lower edge. + + This method was chosen for easier future exports + to 3D CAD packages like SolidWorks, which can import such + geometry as coordinates written in a CSV file. + """ + def __init__(self, + parent, + name, + chord=68, + semi_span=150, + material=mt.aluminium): + super().__init__(parent, name) + parent.wing = self + if chord > 20: + self.chord = chord + else: + self.chord = 20 + logging.debug('Chord too small, using minimum value of 20.') + parent + self.semi_span = semi_span + self.material = material + self.spars = [] + self.stringers = [] + + def add_naca(self, naca_num=2412): + """Generate surface geometry for a NACA airfoil. + + The nested functions perform the required steps to generate geometry, + and can be called to solve the geometry y-coordinate for any 'x' input. + Equation coefficients were retrieved from Wikipedia.org. + + Parameters: + naca_num: 4-digit NACA wing + + Return: + None + """ + self.naca_num = naca_num + # Variables extracted from naca_num argument passed to the function + m = int(str(naca_num)[0]) / 100 + p = int(str(naca_num)[1]) / 10 + t = int(str(naca_num)[2:]) / 100 + # x-coordinate of maximum camber + p_c = p * self.chord + + def get_camber(x): + """ + Returns camber z-coordinate from 1 'x' along the airfoil chord. + """ + z_c = float() + if 0 <= x < p_c: + z_c = (m / (p**2)) * (2 * p * (x / self.chord) - + (x / self.chord)**2) + elif p_c <= x <= self.chord: + z_c = (m / + ((1 - p)**2)) * ((1 - 2 * p) + 2 * p * + (x / self.chord) - (x / self.chord)**2) + return (z_c * self.chord) + + def get_thickness(x): + """Return thickness from 1 'x' along the airfoil chord.""" + x = 0 if x < 0 else x + z_t = 5 * t * self.chord * (+0.2969 * + (x / self.chord)**0.5 - 0.1260 * + (x / self.chord)**1 - 0.3516 * + (x / self.chord)**2 + 0.2843 * + (x / self.chord)**3 - 0.1015 * + (x / self.chord)**4) + return z_t + + def get_theta(x): + dz_c = float() + if 0 <= x < p_c: + dz_c = ((2 * m) / p**2) * (p - x / self.chord) + elif p_c <= x <= self.chord: + dz_c = (2 * m) / ((1 - p)**2) * (p - x / self.chord) + + theta = atan(dz_c) + return theta + + def get_coord_u(x): + x = x - get_thickness(x) * sin(get_theta(x)) + z = get_camber(x) + get_thickness(x) * cos(get_theta(x)) + return (x, z) + + def get_coord_l(x): + x = x + get_thickness(x) * sin(get_theta(x)) + z = get_camber(x) - get_thickness(x) * cos(get_theta(x)) + return (x, z) + + # Densify x-coordinates 10 times for first 1/4 chord length + x_chord_25_percent = round(self.chord / 4) + x_chord = [i / 10 for i in range(x_chord_25_percent * 10)] + x_chord.extend(i for i in range(x_chord_25_percent, self.chord + 1)) + # Generate our airfoil skin geometry from previous sub-functions + self.x_c = np.array([]) + self.z_c = np.array([]) + # Upper surface and camber line + for x in x_chord: + self.x_c = np.append(self.x_c, x) + self.z_c = np.append(self.z_c, get_camber(x)) + self.x = np.append(self.x, get_coord_u(x)[0]) + self.z = np.append(self.z, get_coord_u(x)[1]) + # Lower surface + for x in x_chord[::-1]: + self.x = np.append(self.x, get_coord_l(x)[0]) + self.z = np.append(self.z, get_coord_l(x)[1]) + return None + + +class Spar(base.Component): + """Contains a single spar's data.""" + def __init__(self, parent, name, loc_percent=0.30, material=mt.aluminium): + """Set spar location as percent of chord length.""" + super().__init__(parent, name) + parent.spars.append(self) + self.material = material + self.cap_area = float() + # bi.bisect_left: returns index of first value in parent.x > loc + # This ensures that spar geom intersects with airfoil geom. + loc = loc_percent * parent.chord + # Spar upper coordinates + spar_u = bi.bisect_left(parent.x, loc) - 1 + self.x = np.append(self.x, parent.x[spar_u]) + self.z = np.append(self.z, parent.z[spar_u]) + # Spar lower coordinates + spar_l = bi.bisect_left(parent.x[::-1], loc) + self.x = np.append(self.x, parent.x[-spar_l]) + self.z = np.append(self.z, parent.z[-spar_l]) + return None + + def set_cap_area(self, cap_area): + self.cap_area = cap_area + return None + + def set_mass(self, mass): + self.mass = mass + return None + + +class Stringer(base.Component): + """Contains the coordinates of all stringers.""" + def __init__(self, + parent, + name, + den_u_1=4, + den_u_2=4, + den_l_1=4, + den_l_2=4): + """Add equally distributed stringers to four airfoil locations + (upper nose, lower nose, upper surface, lower surface). + + den_u_1: upper nose number of stringers + den_u_2: upper surface number of stringers + den_l_1: lower nose number of stringers + den_l_2: lower surface number of stringers + """ + super().__init__(parent, name) + parent.stringers = self + self.x_start = [] + self.x_end = [] + self.z_start = [] + self.z_end = [] + self.diameter = float() + self.area = float() + + # Find distance between leading edge and first upper stringer + # interval = self.parent.spars[0].x[0] / (den_u_1 + 1) + interval = 2 + # initialise first self.stringer_x at first interval + x = interval + # Add upper stringers from leading edge until first spar. + for _ in range(0, den_u_1): + # Index of the first value of airfoil.x > x + i = bi.bisect_left(self.parent.x, x) + self.x = np.append(self.x, self.parent.x[i]) + self.z = np.append(self.z, self.parent.z[i]) + x += interval + # Add upper stringers from first spar until last spar + interval = (self.parent.spars[-1].x[0] - + self.parent.spars[0].x[0]) / (den_u_2 + 1) + x = interval + self.parent.spars[0].x[0] + for _ in range(0, den_u_2): + i = bi.bisect_left(self.parent.x, x) + self.x = np.append(self.x, self.parent.x[i]) + self.z = np.append(self.z, self.parent.z[i]) + x += interval + + # Find distance between leading edge and first lower stringer + interval = self.parent.spars[0].x[1] / (den_l_1 + 1) + x = interval + # Add lower stringers from leading edge until first spar. + for _ in range(0, den_l_1): + i = bi.bisect_left(self.parent.x[::-1], x) + self.x = np.append(self.x, self.parent.x[-i]) + self.z = np.append(self.z, self.parent.z[-i]) + x += interval + # Add lower stringers from first spar until last spar + interval = (self.parent.spars[-1].x[1] - + self.parent.spars[0].x[1]) / (den_l_2 + 1) + x = interval + self.parent.spars[0].x[1] + for _ in range(0, den_l_2): + i = bi.bisect_left(self.parent.x[::-1], x) + self.x = np.append(self.x, self.parent.x[-i]) + self.z = np.append(self.z, self.parent.z[-i]) + x += interval + return None + + def add_area(self, area): + self.area = area + return None + + def add_mass(self, mass): + self.mass = len(self.x) * mass + len(self.x) * mass + return None + + def add_webs(self, thickness): + """Add webs to stringers.""" + for _ in range(len(self.x) // 2): + self.x_start.append(self.x[_]) + self.x_end.append(self.x[_ + 1]) + self.z_start.append(self.z[_]) + self.z_end.append(self.z[_ + 1]) + self.thickness = thickness + return None + + def info_print(self, round=2): + super().info_print(round) + print('Stringer Area:\n', np.around(self.area, round)) + return None + + +def plot_geom(airfoil): + """This function plots the airfoil's + sub-components' geometry.""" + fig, ax = plt.subplots() + + # Plot chord + x = [0, airfoil.chord] + y = [0, 0] + ax.plot(x, y, linewidth='1') + # Plot quarter chord + ax.plot(airfoil.chord / 4, + 0, + '.', + color='g', + markersize=24, + label='Quarter-chord') + # Plot mean camber line + ax.plot(airfoil.x_c, + airfoil.z_c, + '-.', + color='r', + linewidth='2', + label='Mean camber line') + # Plot airfoil surfaces + ax.plot(airfoil.x, airfoil.z, color='b', linewidth='1') + + try: # Plot spars + for spar in airfoil.spars: + x = (spar.x) + y = (spar.z) + ax.plot(x, y, '-', color='y', linewidth='4') + except AttributeError: + print('No spars to plot.') + try: # Plot stringers + for i in range(len(airfoil.stringers.x)): + x = airfoil.stringers.x[i] + y = airfoil.stringers.z[i] + ax.plot(x, y, '.', color='y', markersize=12) + except AttributeError: + print('No stringers to plot.') + + ax.set(title='NACA ' + str(airfoil.naca_num) + ' airfoil', + xlabel='X axis', + ylabel='Z axis') + + plt.grid(axis='both', linestyle=':', linewidth=1) + plt.gca().set_aspect('equal', adjustable='box') + plt.gca().legend(bbox_to_anchor=(1, 1), + bbox_transform=plt.gcf().transFigure) + plt.show() + return fig, ax diff --git a/aircraftstudio/evaluator/__init__.py b/aircraftstudio/evaluator/__init__.py new file mode 100644 index 0000000..a58168b --- /dev/null +++ b/aircraftstudio/evaluator/__init__.py @@ -0,0 +1 @@ +from .evaluator import * diff --git a/aircraftstudio/evaluator/dP.py b/aircraftstudio/evaluator/dP.py new file mode 100644 index 0000000..b6aaa3b --- /dev/null +++ b/aircraftstudio/evaluator/dP.py @@ -0,0 +1,18 @@ +def get_dx(self, component): + return [x - self.centroid[0] for x in component.x_start] + + +def get_dz(self, component): + return [x - self.centroid[1] for x in component.x_start] + + +def get_dP(self, xDist, zDist, V_x, V_z, area): + I_x = self.I_['x'] + I_z = self.I_['z'] + I_xz = self.I_['xz'] + denom = float(I_x * I_z - I_xz**2) + z = float() + for _ in range(len(xDist)): + z += float(-area * xDist[_] * (I_x * V_x - I_xz * V_z) / denom - + area * zDist[_] * (I_z * V_z - I_xz * V_x) / denom) + return z diff --git a/aircraftstudio/evaluator/drag.py b/aircraftstudio/evaluator/drag.py new file mode 100644 index 0000000..73a26fc --- /dev/null +++ b/aircraftstudio/evaluator/drag.py @@ -0,0 +1,18 @@ +import random + +def get_drag(aircraft, drag): + # Transform semi-span integer into list + semi_span = [x for x in range(0, aircraft.wing.semi_span)] + + # Drag increases after 80% of the semi_span + cutoff = round(0.8 * aircraft.wing.span) + + # Drag increases by 25% after 80% of the semi_span + F_x = [drag for x in semi_span[0:cutoff]] + F_x.extend([1.25 * drag for x in semi_span[cutoff:]]) + return F_x + + +def get_drag_total(aircraft): + """Get total drag force acting on the aircraft.""" + return random.random() * 100 diff --git a/aircraftstudio/evaluator/evaluator.py b/aircraftstudio/evaluator/evaluator.py new file mode 100644 index 0000000..18bb692 --- /dev/null +++ b/aircraftstudio/evaluator/evaluator.py @@ -0,0 +1,195 @@ +""" +The evaluator.py module contains functions +that return calculated data for an aircraft. +Plotting aircraft components is also possible. +""" + +import os.path +import concurrent.futures +import matplotlib.pyplot as plt + +from . import drag, inertia, lift, mass + + +def analyze(aircraft): + """Analyze a single aircraft.""" + results = { + 'Lift': lift.get_lift_total(aircraft), + 'Drag': drag.get_drag_total(aircraft), + 'Mass': mass.get_mass_total(aircraft), + 'Centroid': inertia.get_centroid(aircraft) + } + aircraft.results = results + return aircraft.name, results + + +def analyze_all(population): + """Analyze all aircraft in a given population.""" + # for aircraft in population.aircrafts: + # print(analyze(aircraft)) + with concurrent.futures.ProcessPoolExecutor() as executor: + results = executor.map(analyze, population.aircrafts) + for result in results: + print(result) + return None + + # def analysis(self, V_x, V_z): + # """Perform all analysis calculations and store in class instance.""" + + # self.drag = self.get_drag(10) + # self.lift_rectangular = self.get_lift_rectangular(13.7) + # self.lift_elliptical = self.get_lift_elliptical(15) + # self.lift_total = self.get_lift_total() + # self.mass_dist = self.get_mass_distribution(self.mass_total) + # self.centroid = self.get_centroid() + # self.I_['x'] = self.get_inertia_terms()[0] + # self.I_['z'] = self.get_inertia_terms()[1] + # self.I_['xz'] = self.get_inertia_terms()[2] + # spar_dx = self.get_dx(self.spar) + # spar_dz = self.get_dz(self.spar) + # self.spar.dP_x = self.get_dP(spar_dx, spar_dz, V_x, 0, + # self.spar.cap_area) + # self.spar.dP_z = self.get_dP(spar_dx, spar_dz, 0, V_z, + # self.spar.cap_area) + # print("yayyyyy") + # return None + + # print(f"Analysis results for {aircraft.name}:\n", results) + # self.results = self.get_lift_total(aircraft) + + # self.drag = self.get_drag(10) + # self.lift_rectangular = self.get_lift_rectangular(13.7) + # self.lift_elliptical = self.get_lift_elliptical(15) + # self.lift_total = self.get_lift_total() + # self.mass_dist = self.get_mass_distribution(self.mass_total) + # self.centroid = self.get_centroid() + # self.I_['x'] = self.get_inertia_terms()[0] + # self.I_['z'] = self.get_inertia_terms()[1] + # self.I_['xz'] = self.get_inertia_terms()[2] + # spar_dx = self.get_dx(self.spar) + # spar_dz = self.get_dz(self.spar) + # self.spar.dP_x = self.get_dP(spar_dx, spar_dz, V_x, 0, + # self.spar.cap_area) + # self.spar.dP_z = self.get_dP(spar_dx, spar_dz, 0, V_z, + # self.spar.cap_area) + # return None + + def tree_print(self, population): + """Print the list of subcomponents.""" + name = f" TREE FOR {[i.name for i in population.aircraft]} IN {self.name} " + num_of_dashes = len(name) + print(num_of_dashes * '-') + print(name) + for aircraft in population: + print(".") + print(f"`-- {aircraft}") + print(f" |--{aircraft.wing}") + print(f" | |-- {aircraft.wing.stringers}") + for spar in aircraft.wing.spars[:-1]: + print(f" | |-- {spar}") + print(f" | `-- {aircraft.wing.spars[-1]}") + print(f" |-- {aircraft.fuselage}") + print(f" `-- {aircraft.propulsion}") + print(num_of_dashes * '-') + return None + + def tree_save(self, + population, + save_path='/home/blendux/Projects/Aircraft_Studio/save'): + """Save the evaluator's tree to a file.""" + for aircraft in population.aircraft: + file_name = f"{aircraft.name}_tree.txt" + full_path = os.path.join(save_path, file_name) + with open(full_path, 'w') as f: + try: + f.write(".\n") + f.write(f"`-- {aircraft}\n") + f.write(f" |--{aircraft.wing}\n") + for spar in aircraft.wing.spars[:-1]: + f.write(f" | |-- {spar}\n") + f.write(f" | `-- {aircraft.wing.spars[-1]}\n") + f.write(f" |-- {aircraft.fuselage}\n") + f.write(f" `-- {aircraft.propulsion}\n") + logging.debug(f'Successfully wrote to file {full_path}') + + except IOError: + print( + f'Unable to write {file_name} to specified directory.', + 'Was the full path passed to the function?') + return None + + +def plot_geom(evaluator): + """This function plots analysis results over the airfoil's geometry.""" + # Plot chord + x_chord = [0, evaluator.chord] + y_chord = [0, 0] + plt.plot(x_chord, y_chord, linewidth='1') + # Plot quarter chord + plt.plot(evaluator.chord / 4, + 0, + '.', + color='g', + markersize=24, + label='Quarter-chord') + # Plot airfoil surfaces + x = [0.98 * x for x in evaluator.airfoil.x] + y = [0.98 * z for z in evaluator.airfoil.z] + plt.fill(x, y, color='w', linewidth='1', fill=False) + x = [1.02 * x for x in evaluator.airfoil.x] + y = [1.02 * z for z in evaluator.airfoil.z] + plt.fill(x, y, color='b', linewidth='1', fill=False) + + # Plot spars + try: + for _ in range(len(evaluator.spar.x)): + x = (evaluator.spar.x[_]) + y = (evaluator.spar.z[_]) + plt.plot(x, y, '-', color='b') + except AttributeError: + print('No spars to plot.') + # Plot stringers + try: + for _ in range(0, len(evaluator.stringer.x)): + x = evaluator.stringer.x[_] + y = evaluator.stringer.z[_] + plt.plot(x, y, '.', color='y', markersize=12) + except AttributeError: + print('No stringers to plot.') + + # Plot centroid + x = evaluator.centroid[0] + y = evaluator.centroid[1] + plt.plot(x, y, '.', color='r', markersize=24, label='centroid') + + # Graph formatting + plt.xlabel('X axis') + plt.ylabel('Z axis') + + plot_bound = max(evaluator.airfoil.x) + plt.xlim(-0.10 * plot_bound, 1.10 * plot_bound) + plt.ylim(-(1.10 * plot_bound / 2), (1.10 * plot_bound / 2)) + plt.gca().set_aspect('equal', adjustable='box') + plt.gca().legend() + plt.grid(axis='both', linestyle=':', linewidth=1) + plt.show() + return None + + +def plot_lift(evaluator): + x = range(evaluator.semi_span) + y_1 = evaluator.lift_rectangular + y_2 = evaluator.lift_elliptical + y_3 = evaluator.lift_total + plt.plot(x, y_1, '.', color='b', markersize=4, label='Rectangular lift') + plt.plot(x, y_2, '.', color='g', markersize=4, label='Elliptical lift') + plt.plot(x, y_3, '.', color='r', markersize=4, label='Total lift') + + # Graph formatting + plt.xlabel('Semi-span location') + plt.ylabel('Lift') + + plt.gca().legend() + plt.grid(axis='both', linestyle=':', linewidth=1) + plt.show() + return None diff --git a/aircraftstudio/evaluator/inertia.py b/aircraftstudio/evaluator/inertia.py new file mode 100644 index 0000000..f047766 --- /dev/null +++ b/aircraftstudio/evaluator/inertia.py @@ -0,0 +1,66 @@ +def get_centroid(aircraft): + """Return the coordinates of the centroid.""" + # stringer_area = aircraft.wing.stringers.area + # cap_area = aircraft.wing.spars.cap_area + + # TODO: Fix this + # caps_x = [value for spar in aircraft.wing.spars.x for value in spar] + # caps_z = [value for spar in aircraft.wing.spars.z for value in spar] + # stringers_x = aircraft.wing.stringers.x + # stringers_z = aircraft.wing.stringers.z + + # denominator = float( + # len(caps_x) * cap_area + len(stringers_x) * stringer_area) + + # centroid_x = float( + # sum([x * cap_area + # for x in caps_x]) + sum([x * stringer_area for x in stringers_x])) + # centroid_x = centroid_x / denominator + + # centroid_z = float( + # sum([z * cap_area + # for z in caps_z]) + sum([z * stringer_area for z in stringers_z])) + # centroid_z = centroid_z / denominator + + # return (centroid_x, centroid_z) + return (200, 420) + + +def get_inertia_terms(self): + """Obtain all inertia terms.""" + stringer_area = self.stringer.area + cap_area = self.spar.cap_area + + # Adds upper and lower components' coordinates to list + x_stringers = self.stringer.x + z_stringers = self.stringer.z + x_spars = self.spar.x[:][0] + self.spar.x[:][1] + z_spars = self.spar.z[:][0] + self.spar.z[:][1] + stringer_count = range(len(x_stringers)) + spar_count = range(len(self.spar.x)) + + # I_x is the sum of the contributions of the spar caps and stringers + # TODO: replace list indices with dictionary value + I_x = sum( + [cap_area * (z_spars[i] - self.centroid[1])**2 for i in spar_count]) + I_x += sum([ + stringer_area * (z_stringers[i] - self.centroid[1])**2 + for i in stringer_count + ]) + + I_z = sum( + [cap_area * (x_spars[i] - self.centroid[0])**2 for i in spar_count]) + I_z += sum([ + stringer_area * (x_stringers[i] - self.centroid[0])**2 + for i in stringer_count + ]) + + I_xz = sum([ + cap_area * (x_spars[i] - self.centroid[0]) * + (z_spars[i] - self.centroid[1]) for i in spar_count + ]) + I_xz += sum([ + stringer_area * (x_stringers[i] - self.centroid[0]) * + (z_stringers[i] - self.centroid[1]) for i in stringer_count + ]) + return (I_x, I_z, I_xz) diff --git a/aircraftstudio/evaluator/lift.py b/aircraftstudio/evaluator/lift.py new file mode 100644 index 0000000..516d649 --- /dev/null +++ b/aircraftstudio/evaluator/lift.py @@ -0,0 +1,30 @@ +import numpy as np +from math import sqrt + + +def _get_lift_rectangular(aircraft, lift=50): + L_prime = np.array([ + lift / (aircraft.wing.semi_span * 2) + for _ in range(aircraft.wing.semi_span) + ]) + return L_prime + + +def _get_lift_elliptical(aircraft, L_0=3.2): + L_prime = np.array([ + 0.5 * L_0 / (aircraft.wing.semi_span * 2) * + sqrt(1 - (y / aircraft.wing.semi_span)**2) + for y in range(aircraft.wing.semi_span) + ]) + return L_prime + + +def get_lift_total(aircraft): + """Combination of rectangular and elliptical lift.""" + # F_z = self._get_lift_rectangular(aircraft) + self._get_lift_elliptical( + # aircraft) + # F_z = self._get_lift_rectangular( + # aircraft) + self._get_lift_elliptical(aircraft) / 2 + # F_z = [i + j for i, j in self._get_lift_rectangular] + # return F_z + return 400 diff --git a/aircraftstudio/evaluator/mass.py b/aircraftstudio/evaluator/mass.py new file mode 100644 index 0000000..7edb926 --- /dev/null +++ b/aircraftstudio/evaluator/mass.py @@ -0,0 +1,8 @@ +def get_mass_distribution(self, total_mass): + F_z = [total_mass / self.semi_span for x in range(0, self.semi_span)] + return F_z + + +def get_mass_total(aircraft): + """Get the total aircraft mass.""" + return 2000 diff --git a/aircraftstudio/generator/__init__.py b/aircraftstudio/generator/__init__.py new file mode 100644 index 0000000..4f233cb --- /dev/null +++ b/aircraftstudio/generator/__init__.py @@ -0,0 +1 @@ +from .generator import * diff --git a/aircraftstudio/generator/generator.py b/aircraftstudio/generator/generator.py new file mode 100644 index 0000000..898683a --- /dev/null +++ b/aircraftstudio/generator/generator.py @@ -0,0 +1,43 @@ +""" +The generator.py module contains classes describing genetic populations +and methods to generate default aircraft. +""" + +from aircraftstudio import creator + + +def default_fuselage(): + pass + + +def default_propulsion(): + pass + + +class Population(): + """Represents a collection of aircraft.""" + def __init__(self, size): + self.aircrafts = [] + for _ in range(size): + self.aircrafts.append(creator.base.Aircraft.from_random()) + self.size = size + self.results = None + self.gen_number = 0 # incremented for every generation + + #TODO class methods for default and random population + # def from_default(self, size): + # for i in range(size): + # self.aircrafts.append(creator.base.Aircraft.from_default()) + + # def from_random(self, size): + # for i in range(size): + # self.aircrafts.append(creator.base.Aircraft.from_random()) + + def mutate(self, prob_mt): + """Randomly mutate the genes of prob_mt % of the population.""" + def crossover(self, prob_cx): + """Combine the genes of prob_cx % of the population.""" + def reproduce(self, prob_rp): + """Pass on the genes of the fittest prob_rp % of the population.""" + def fitness(): + """Rate the fitness of an individual on a relative scale (0-100)""" diff --git a/creator/__init__.py b/creator/__init__.py deleted file mode 100644 index 818c7b2..0000000 --- a/creator/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -from . import base -from . import fuselage -from . import propulsion -from . import wing diff --git a/creator/__init__.pyc b/creator/__init__.pyc deleted file mode 100644 index 022f493..0000000 Binary files a/creator/__init__.pyc and /dev/null differ diff --git a/creator/base.py b/creator/base.py deleted file mode 100644 index 130add3..0000000 --- a/creator/base.py +++ /dev/null @@ -1,93 +0,0 @@ -"""The base.py module contains parent classes for components.""" - -import numpy as np -import os.path -import random -import logging - -import creator - -logging.basicConfig(filename='log_base.txt', - level=logging.DEBUG, - format='%(asctime)s - %(levelname)s - %(message)s') - - -class Aircraft: - """This class tracks all sub-components and is fed to the evaluator.""" - name = None - fuselage = None - propulsion = None - wing = None - properties = {} - - def __init__(self): - self.results = {} - - def __str__(self): - return self.name - - @classmethod - def from_default(cls): - aircraft = creator.base.Aircraft() - aircraft.name = 'default_aircraft_' + str(random.randrange(1000, 9999)) - airfoil = creator.wing.Airfoil(aircraft, 'default_airfoil') - airfoil.add_naca(2412) - soar1 = creator.wing.Spar(airfoil, 'default_spar_1', 0.30) - soar2 = creator.wing.Spar(airfoil, 'default_spar_2', 0.60) - stringer = creator.wing.Stringer(airfoil, 'default_stringer') - return aircraft - - -class Component: - """Basic component providing coordinates, tools and a component tree.""" - def __init__(self, parent, name): - self.parent = parent - self.name = name - self.x = np.array([]) - self.z = np.array([]) - self.y = np.array([]) - self.material = None - self.mass = float() - self.properties = {} - - def __str__(self): - return self.name - - def info_print(self, round): - """Print all the component's coordinates to the terminal.""" - name = f' CREATOR DATA FOR {str(self).upper()} ' - num_of_dashes = len(name) - print(num_of_dashes * '-') - print(name) - for k, v in self.__dict__.items(): - if type(v) is not np.ndarray: - print(f'{k}:\n', v) - print(num_of_dashes * '-') - for k, v in self.__dict__.items(): - if type(v) is np.ndarray: - print(f'{k}:\n', np.around(v, round)) - return None - - def info_save(self, - save_path='/home/blendux/Projects/Aircraft_Studio/save'): - """Save all the object's coordinates (must be full path).""" - file_name = f'{self.name}_info.txt' - full_path = os.path.join(save_path, file_name) - try: - with open(full_path, 'w') as f: - for k, v in self.__dict__.items(): - if type(v) is not np.ndarray: - f.write(f'{k}=\n') - f.write(str(v)) - f.write("\n") - # print(num_of_dashes * '-') - for k, v in self.__dict__.items(): - if type(v) is np.ndarray: - f.write(f'{k}=\n') - f.write(str(v)) - f.write("\n") - logging.debug(f'Successfully wrote to file {full_path}') - except IOError: - print(f'Unable to write {file_name} to specified directory.\n', - 'Was the full path passed to the function?') - return None diff --git a/creator/fuselage.py b/creator/fuselage.py deleted file mode 100644 index e69de29..0000000 diff --git a/creator/log_base.txt b/creator/log_base.txt deleted file mode 100644 index e69de29..0000000 diff --git a/creator/propulsion.py b/creator/propulsion.py deleted file mode 100644 index e69de29..0000000 diff --git a/creator/wing.py b/creator/wing.py deleted file mode 100644 index 01aa6ff..0000000 --- a/creator/wing.py +++ /dev/null @@ -1,312 +0,0 @@ -""" -The wing.py module contains class definitions for and various components -we add to an airfoil (spars, stringers, and ribs). - -Classes: - Airfoil: instantiated with class method to provide coordinates to heirs. - Spar: inherits from Airfoil. - Stringer: also inherits from Airfoil. - -Functions: - plot_geom(airfoil): generates a 2D plot of the airfoil & any components. -""" - -import logging -import numpy as np -from math import sin, cos, atan -import bisect as bi -import matplotlib.pyplot as plt - -import creator.base as base -import resources.materials as mt - - -class Airfoil(base.Component): - """This class represents a single NACA airfoil. - - The coordinates are saved as two np.arrays - for the x- and z-coordinates. The coordinates start at - the leading edge, travel over the airfoil's upper edge, - then loop back to the leading edge via the lower edge. - - This method was chosen for easier future exports - to 3D CAD packages like SolidWorks, which can import such - geometry as coordinates written in a CSV file. - """ - def __init__(self, - parent, - name, - chord=68, - semi_span=150, - material=mt.aluminium): - super().__init__(parent, name) - parent.wing = self - if chord > 20: - self.chord = chord - else: - self.chord = 20 - logging.debug('Chord too small, using minimum value of 20.') - parent - self.semi_span = semi_span - self.material = material - self.spars = [] - self.stringers = [] - - def add_naca(self, naca_num=2412): - """Generate surface geometry for a NACA airfoil. - - The nested functions perform the required steps to generate geometry, - and can be called to solve the geometry y-coordinate for any 'x' input. - Equation coefficients were retrieved from Wikipedia.org. - - Parameters: - naca_num: 4-digit NACA wing - - Return: - None - """ - self.naca_num = naca_num - # Variables extracted from naca_num argument passed to the function - m = int(str(naca_num)[0]) / 100 - p = int(str(naca_num)[1]) / 10 - t = int(str(naca_num)[2:]) / 100 - # x-coordinate of maximum camber - p_c = p * self.chord - - def get_camber(x): - """ - Returns camber z-coordinate from 1 'x' along the airfoil chord. - """ - z_c = float() - if 0 <= x < p_c: - z_c = (m / (p**2)) * (2 * p * (x / self.chord) - - (x / self.chord)**2) - elif p_c <= x <= self.chord: - z_c = (m / - ((1 - p)**2)) * ((1 - 2 * p) + 2 * p * - (x / self.chord) - (x / self.chord)**2) - return (z_c * self.chord) - - def get_thickness(x): - """Return thickness from 1 'x' along the airfoil chord.""" - x = 0 if x < 0 else x - z_t = 5 * t * self.chord * (+0.2969 * - (x / self.chord)**0.5 - 0.1260 * - (x / self.chord)**1 - 0.3516 * - (x / self.chord)**2 + 0.2843 * - (x / self.chord)**3 - 0.1015 * - (x / self.chord)**4) - return z_t - - def get_theta(x): - dz_c = float() - if 0 <= x < p_c: - dz_c = ((2 * m) / p**2) * (p - x / self.chord) - elif p_c <= x <= self.chord: - dz_c = (2 * m) / ((1 - p)**2) * (p - x / self.chord) - - theta = atan(dz_c) - return theta - - def get_coord_u(x): - x = x - get_thickness(x) * sin(get_theta(x)) - z = get_camber(x) + get_thickness(x) * cos(get_theta(x)) - return (x, z) - - def get_coord_l(x): - x = x + get_thickness(x) * sin(get_theta(x)) - z = get_camber(x) - get_thickness(x) * cos(get_theta(x)) - return (x, z) - - # Densify x-coordinates 10 times for first 1/4 chord length - x_chord_25_percent = round(self.chord / 4) - x_chord = [i / 10 for i in range(x_chord_25_percent * 10)] - x_chord.extend(i for i in range(x_chord_25_percent, self.chord + 1)) - # Generate our airfoil skin geometry from previous sub-functions - self.x_c = np.array([]) - self.z_c = np.array([]) - # Upper surface and camber line - for x in x_chord: - self.x_c = np.append(self.x_c, x) - self.z_c = np.append(self.z_c, get_camber(x)) - self.x = np.append(self.x, get_coord_u(x)[0]) - self.z = np.append(self.z, get_coord_u(x)[1]) - # Lower surface - for x in x_chord[::-1]: - self.x = np.append(self.x, get_coord_l(x)[0]) - self.z = np.append(self.z, get_coord_l(x)[1]) - return None - - -class Spar(base.Component): - """Contains a single spar's data.""" - def __init__(self, parent, name, loc_percent=0.30, material=mt.aluminium): - """Set spar location as percent of chord length.""" - super().__init__(parent, name) - parent.spars.append(self) - self.material = material - self.cap_area = float() - # bi.bisect_left: returns index of first value in parent.x > loc - # This ensures that spar geom intersects with airfoil geom. - loc = loc_percent * parent.chord - # Spar upper coordinates - spar_u = bi.bisect_left(parent.x, loc) - 1 - self.x = np.append(self.x, parent.x[spar_u]) - self.z = np.append(self.z, parent.z[spar_u]) - # Spar lower coordinates - spar_l = bi.bisect_left(parent.x[::-1], loc) - self.x = np.append(self.x, parent.x[-spar_l]) - self.z = np.append(self.z, parent.z[-spar_l]) - return None - - def set_cap_area(self, cap_area): - self.cap_area = cap_area - return None - - def set_mass(self, mass): - self.mass = mass - return None - - -class Stringer(base.Component): - """Contains the coordinates of all stringers.""" - def __init__(self, - parent, - name, - den_u_1=4, - den_u_2=4, - den_l_1=4, - den_l_2=4): - """Add equally distributed stringers to four airfoil locations - (upper nose, lower nose, upper surface, lower surface). - - den_u_1: upper nose number of stringers - den_u_2: upper surface number of stringers - den_l_1: lower nose number of stringers - den_l_2: lower surface number of stringers - """ - super().__init__(parent, name) - parent.stringers = self - self.x_start = [] - self.x_end = [] - self.z_start = [] - self.z_end = [] - self.diameter = float() - self.area = float() - - # Find distance between leading edge and first upper stringer - # interval = self.parent.spars[0].x[0] / (den_u_1 + 1) - interval = 2 - # initialise first self.stringer_x at first interval - x = interval - # Add upper stringers from leading edge until first spar. - for _ in range(0, den_u_1): - # Index of the first value of airfoil.x > x - i = bi.bisect_left(self.parent.x, x) - self.x = np.append(self.x, self.parent.x[i]) - self.z = np.append(self.z, self.parent.z[i]) - x += interval - # Add upper stringers from first spar until last spar - interval = (self.parent.spars[-1].x[0] - - self.parent.spars[0].x[0]) / (den_u_2 + 1) - x = interval + self.parent.spars[0].x[0] - for _ in range(0, den_u_2): - i = bi.bisect_left(self.parent.x, x) - self.x = np.append(self.x, self.parent.x[i]) - self.z = np.append(self.z, self.parent.z[i]) - x += interval - - # Find distance between leading edge and first lower stringer - interval = self.parent.spars[0].x[1] / (den_l_1 + 1) - x = interval - # Add lower stringers from leading edge until first spar. - for _ in range(0, den_l_1): - i = bi.bisect_left(self.parent.x[::-1], x) - self.x = np.append(self.x, self.parent.x[-i]) - self.z = np.append(self.z, self.parent.z[-i]) - x += interval - # Add lower stringers from first spar until last spar - interval = (self.parent.spars[-1].x[1] - - self.parent.spars[0].x[1]) / (den_l_2 + 1) - x = interval + self.parent.spars[0].x[1] - for _ in range(0, den_l_2): - i = bi.bisect_left(self.parent.x[::-1], x) - self.x = np.append(self.x, self.parent.x[-i]) - self.z = np.append(self.z, self.parent.z[-i]) - x += interval - return None - - def add_area(self, area): - self.area = area - return None - - def add_mass(self, mass): - self.mass = len(self.x) * mass + len(self.x) * mass - return None - - def add_webs(self, thickness): - """Add webs to stringers.""" - for _ in range(len(self.x) // 2): - self.x_start.append(self.x[_]) - self.x_end.append(self.x[_ + 1]) - self.z_start.append(self.z[_]) - self.z_end.append(self.z[_ + 1]) - self.thickness = thickness - return None - - def info_print(self, round=2): - super().info_print(round) - print('Stringer Area:\n', np.around(self.area, round)) - return None - - -def plot_geom(airfoil): - """This function plots the airfoil's + sub-components' geometry.""" - fig, ax = plt.subplots() - - # Plot chord - x = [0, airfoil.chord] - y = [0, 0] - ax.plot(x, y, linewidth='1') - # Plot quarter chord - ax.plot(airfoil.chord / 4, - 0, - '.', - color='g', - markersize=24, - label='Quarter-chord') - # Plot mean camber line - ax.plot(airfoil.x_c, - airfoil.z_c, - '-.', - color='r', - linewidth='2', - label='Mean camber line') - # Plot airfoil surfaces - ax.plot(airfoil.x, airfoil.z, color='b', linewidth='1') - - try: # Plot spars - for spar in airfoil.spars: - x = (spar.x) - y = (spar.z) - ax.plot(x, y, '-', color='y', linewidth='4') - except AttributeError: - print('No spars to plot.') - try: # Plot stringers - for i in range(len(airfoil.stringers.x)): - x = airfoil.stringers.x[i] - y = airfoil.stringers.z[i] - ax.plot(x, y, '.', color='y', markersize=12) - except AttributeError: - print('No stringers to plot.') - - ax.set(title='NACA ' + str(airfoil.naca_num) + ' airfoil', - xlabel='X axis', - ylabel='Z axis') - - plt.grid(axis='both', linestyle=':', linewidth=1) - plt.gca().set_aspect('equal', adjustable='box') - plt.gca().legend(bbox_to_anchor=(1, 1), - bbox_transform=plt.gcf().transFigure) - plt.show() - return fig, ax diff --git a/evaluator/__init__.py b/evaluator/__init__.py deleted file mode 100644 index a58168b..0000000 --- a/evaluator/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .evaluator import * diff --git a/evaluator/dP.py b/evaluator/dP.py deleted file mode 100644 index b6aaa3b..0000000 --- a/evaluator/dP.py +++ /dev/null @@ -1,18 +0,0 @@ -def get_dx(self, component): - return [x - self.centroid[0] for x in component.x_start] - - -def get_dz(self, component): - return [x - self.centroid[1] for x in component.x_start] - - -def get_dP(self, xDist, zDist, V_x, V_z, area): - I_x = self.I_['x'] - I_z = self.I_['z'] - I_xz = self.I_['xz'] - denom = float(I_x * I_z - I_xz**2) - z = float() - for _ in range(len(xDist)): - z += float(-area * xDist[_] * (I_x * V_x - I_xz * V_z) / denom - - area * zDist[_] * (I_z * V_z - I_xz * V_x) / denom) - return z diff --git a/evaluator/drag.py b/evaluator/drag.py deleted file mode 100644 index 73a26fc..0000000 --- a/evaluator/drag.py +++ /dev/null @@ -1,18 +0,0 @@ -import random - -def get_drag(aircraft, drag): - # Transform semi-span integer into list - semi_span = [x for x in range(0, aircraft.wing.semi_span)] - - # Drag increases after 80% of the semi_span - cutoff = round(0.8 * aircraft.wing.span) - - # Drag increases by 25% after 80% of the semi_span - F_x = [drag for x in semi_span[0:cutoff]] - F_x.extend([1.25 * drag for x in semi_span[cutoff:]]) - return F_x - - -def get_drag_total(aircraft): - """Get total drag force acting on the aircraft.""" - return random.random() * 100 diff --git a/evaluator/evaluator.py b/evaluator/evaluator.py deleted file mode 100644 index 18bb692..0000000 --- a/evaluator/evaluator.py +++ /dev/null @@ -1,195 +0,0 @@ -""" -The evaluator.py module contains functions -that return calculated data for an aircraft. -Plotting aircraft components is also possible. -""" - -import os.path -import concurrent.futures -import matplotlib.pyplot as plt - -from . import drag, inertia, lift, mass - - -def analyze(aircraft): - """Analyze a single aircraft.""" - results = { - 'Lift': lift.get_lift_total(aircraft), - 'Drag': drag.get_drag_total(aircraft), - 'Mass': mass.get_mass_total(aircraft), - 'Centroid': inertia.get_centroid(aircraft) - } - aircraft.results = results - return aircraft.name, results - - -def analyze_all(population): - """Analyze all aircraft in a given population.""" - # for aircraft in population.aircrafts: - # print(analyze(aircraft)) - with concurrent.futures.ProcessPoolExecutor() as executor: - results = executor.map(analyze, population.aircrafts) - for result in results: - print(result) - return None - - # def analysis(self, V_x, V_z): - # """Perform all analysis calculations and store in class instance.""" - - # self.drag = self.get_drag(10) - # self.lift_rectangular = self.get_lift_rectangular(13.7) - # self.lift_elliptical = self.get_lift_elliptical(15) - # self.lift_total = self.get_lift_total() - # self.mass_dist = self.get_mass_distribution(self.mass_total) - # self.centroid = self.get_centroid() - # self.I_['x'] = self.get_inertia_terms()[0] - # self.I_['z'] = self.get_inertia_terms()[1] - # self.I_['xz'] = self.get_inertia_terms()[2] - # spar_dx = self.get_dx(self.spar) - # spar_dz = self.get_dz(self.spar) - # self.spar.dP_x = self.get_dP(spar_dx, spar_dz, V_x, 0, - # self.spar.cap_area) - # self.spar.dP_z = self.get_dP(spar_dx, spar_dz, 0, V_z, - # self.spar.cap_area) - # print("yayyyyy") - # return None - - # print(f"Analysis results for {aircraft.name}:\n", results) - # self.results = self.get_lift_total(aircraft) - - # self.drag = self.get_drag(10) - # self.lift_rectangular = self.get_lift_rectangular(13.7) - # self.lift_elliptical = self.get_lift_elliptical(15) - # self.lift_total = self.get_lift_total() - # self.mass_dist = self.get_mass_distribution(self.mass_total) - # self.centroid = self.get_centroid() - # self.I_['x'] = self.get_inertia_terms()[0] - # self.I_['z'] = self.get_inertia_terms()[1] - # self.I_['xz'] = self.get_inertia_terms()[2] - # spar_dx = self.get_dx(self.spar) - # spar_dz = self.get_dz(self.spar) - # self.spar.dP_x = self.get_dP(spar_dx, spar_dz, V_x, 0, - # self.spar.cap_area) - # self.spar.dP_z = self.get_dP(spar_dx, spar_dz, 0, V_z, - # self.spar.cap_area) - # return None - - def tree_print(self, population): - """Print the list of subcomponents.""" - name = f" TREE FOR {[i.name for i in population.aircraft]} IN {self.name} " - num_of_dashes = len(name) - print(num_of_dashes * '-') - print(name) - for aircraft in population: - print(".") - print(f"`-- {aircraft}") - print(f" |--{aircraft.wing}") - print(f" | |-- {aircraft.wing.stringers}") - for spar in aircraft.wing.spars[:-1]: - print(f" | |-- {spar}") - print(f" | `-- {aircraft.wing.spars[-1]}") - print(f" |-- {aircraft.fuselage}") - print(f" `-- {aircraft.propulsion}") - print(num_of_dashes * '-') - return None - - def tree_save(self, - population, - save_path='/home/blendux/Projects/Aircraft_Studio/save'): - """Save the evaluator's tree to a file.""" - for aircraft in population.aircraft: - file_name = f"{aircraft.name}_tree.txt" - full_path = os.path.join(save_path, file_name) - with open(full_path, 'w') as f: - try: - f.write(".\n") - f.write(f"`-- {aircraft}\n") - f.write(f" |--{aircraft.wing}\n") - for spar in aircraft.wing.spars[:-1]: - f.write(f" | |-- {spar}\n") - f.write(f" | `-- {aircraft.wing.spars[-1]}\n") - f.write(f" |-- {aircraft.fuselage}\n") - f.write(f" `-- {aircraft.propulsion}\n") - logging.debug(f'Successfully wrote to file {full_path}') - - except IOError: - print( - f'Unable to write {file_name} to specified directory.', - 'Was the full path passed to the function?') - return None - - -def plot_geom(evaluator): - """This function plots analysis results over the airfoil's geometry.""" - # Plot chord - x_chord = [0, evaluator.chord] - y_chord = [0, 0] - plt.plot(x_chord, y_chord, linewidth='1') - # Plot quarter chord - plt.plot(evaluator.chord / 4, - 0, - '.', - color='g', - markersize=24, - label='Quarter-chord') - # Plot airfoil surfaces - x = [0.98 * x for x in evaluator.airfoil.x] - y = [0.98 * z for z in evaluator.airfoil.z] - plt.fill(x, y, color='w', linewidth='1', fill=False) - x = [1.02 * x for x in evaluator.airfoil.x] - y = [1.02 * z for z in evaluator.airfoil.z] - plt.fill(x, y, color='b', linewidth='1', fill=False) - - # Plot spars - try: - for _ in range(len(evaluator.spar.x)): - x = (evaluator.spar.x[_]) - y = (evaluator.spar.z[_]) - plt.plot(x, y, '-', color='b') - except AttributeError: - print('No spars to plot.') - # Plot stringers - try: - for _ in range(0, len(evaluator.stringer.x)): - x = evaluator.stringer.x[_] - y = evaluator.stringer.z[_] - plt.plot(x, y, '.', color='y', markersize=12) - except AttributeError: - print('No stringers to plot.') - - # Plot centroid - x = evaluator.centroid[0] - y = evaluator.centroid[1] - plt.plot(x, y, '.', color='r', markersize=24, label='centroid') - - # Graph formatting - plt.xlabel('X axis') - plt.ylabel('Z axis') - - plot_bound = max(evaluator.airfoil.x) - plt.xlim(-0.10 * plot_bound, 1.10 * plot_bound) - plt.ylim(-(1.10 * plot_bound / 2), (1.10 * plot_bound / 2)) - plt.gca().set_aspect('equal', adjustable='box') - plt.gca().legend() - plt.grid(axis='both', linestyle=':', linewidth=1) - plt.show() - return None - - -def plot_lift(evaluator): - x = range(evaluator.semi_span) - y_1 = evaluator.lift_rectangular - y_2 = evaluator.lift_elliptical - y_3 = evaluator.lift_total - plt.plot(x, y_1, '.', color='b', markersize=4, label='Rectangular lift') - plt.plot(x, y_2, '.', color='g', markersize=4, label='Elliptical lift') - plt.plot(x, y_3, '.', color='r', markersize=4, label='Total lift') - - # Graph formatting - plt.xlabel('Semi-span location') - plt.ylabel('Lift') - - plt.gca().legend() - plt.grid(axis='both', linestyle=':', linewidth=1) - plt.show() - return None diff --git a/evaluator/inertia.py b/evaluator/inertia.py deleted file mode 100644 index f047766..0000000 --- a/evaluator/inertia.py +++ /dev/null @@ -1,66 +0,0 @@ -def get_centroid(aircraft): - """Return the coordinates of the centroid.""" - # stringer_area = aircraft.wing.stringers.area - # cap_area = aircraft.wing.spars.cap_area - - # TODO: Fix this - # caps_x = [value for spar in aircraft.wing.spars.x for value in spar] - # caps_z = [value for spar in aircraft.wing.spars.z for value in spar] - # stringers_x = aircraft.wing.stringers.x - # stringers_z = aircraft.wing.stringers.z - - # denominator = float( - # len(caps_x) * cap_area + len(stringers_x) * stringer_area) - - # centroid_x = float( - # sum([x * cap_area - # for x in caps_x]) + sum([x * stringer_area for x in stringers_x])) - # centroid_x = centroid_x / denominator - - # centroid_z = float( - # sum([z * cap_area - # for z in caps_z]) + sum([z * stringer_area for z in stringers_z])) - # centroid_z = centroid_z / denominator - - # return (centroid_x, centroid_z) - return (200, 420) - - -def get_inertia_terms(self): - """Obtain all inertia terms.""" - stringer_area = self.stringer.area - cap_area = self.spar.cap_area - - # Adds upper and lower components' coordinates to list - x_stringers = self.stringer.x - z_stringers = self.stringer.z - x_spars = self.spar.x[:][0] + self.spar.x[:][1] - z_spars = self.spar.z[:][0] + self.spar.z[:][1] - stringer_count = range(len(x_stringers)) - spar_count = range(len(self.spar.x)) - - # I_x is the sum of the contributions of the spar caps and stringers - # TODO: replace list indices with dictionary value - I_x = sum( - [cap_area * (z_spars[i] - self.centroid[1])**2 for i in spar_count]) - I_x += sum([ - stringer_area * (z_stringers[i] - self.centroid[1])**2 - for i in stringer_count - ]) - - I_z = sum( - [cap_area * (x_spars[i] - self.centroid[0])**2 for i in spar_count]) - I_z += sum([ - stringer_area * (x_stringers[i] - self.centroid[0])**2 - for i in stringer_count - ]) - - I_xz = sum([ - cap_area * (x_spars[i] - self.centroid[0]) * - (z_spars[i] - self.centroid[1]) for i in spar_count - ]) - I_xz += sum([ - stringer_area * (x_stringers[i] - self.centroid[0]) * - (z_stringers[i] - self.centroid[1]) for i in stringer_count - ]) - return (I_x, I_z, I_xz) diff --git a/evaluator/lift.py b/evaluator/lift.py deleted file mode 100644 index 516d649..0000000 --- a/evaluator/lift.py +++ /dev/null @@ -1,30 +0,0 @@ -import numpy as np -from math import sqrt - - -def _get_lift_rectangular(aircraft, lift=50): - L_prime = np.array([ - lift / (aircraft.wing.semi_span * 2) - for _ in range(aircraft.wing.semi_span) - ]) - return L_prime - - -def _get_lift_elliptical(aircraft, L_0=3.2): - L_prime = np.array([ - 0.5 * L_0 / (aircraft.wing.semi_span * 2) * - sqrt(1 - (y / aircraft.wing.semi_span)**2) - for y in range(aircraft.wing.semi_span) - ]) - return L_prime - - -def get_lift_total(aircraft): - """Combination of rectangular and elliptical lift.""" - # F_z = self._get_lift_rectangular(aircraft) + self._get_lift_elliptical( - # aircraft) - # F_z = self._get_lift_rectangular( - # aircraft) + self._get_lift_elliptical(aircraft) / 2 - # F_z = [i + j for i, j in self._get_lift_rectangular] - # return F_z - return 400 diff --git a/evaluator/mass.py b/evaluator/mass.py deleted file mode 100644 index 7edb926..0000000 --- a/evaluator/mass.py +++ /dev/null @@ -1,8 +0,0 @@ -def get_mass_distribution(self, total_mass): - F_z = [total_mass / self.semi_span for x in range(0, self.semi_span)] - return F_z - - -def get_mass_total(aircraft): - """Get the total aircraft mass.""" - return 2000 diff --git a/example.py b/example.py index 5faaae3..8bc3033 100644 --- a/example.py +++ b/example.py @@ -1,4 +1,5 @@ -"""This example illustrates the usage of creator, evaluator and generator. +""" +This example illustrates the usage of creator, evaluator and generator. All the steps of airfoil creation & evaluation are detailed here; furthermore, the generator.py module contains certain presets @@ -9,11 +10,7 @@ Evaluate an airfoil; Generate a population of airfoils & optimize. """ -import matplotlib.pyplot as plt - -import creator -import evaluator -import generator +import aircraftstudio as acs import resources.materials as mt import time @@ -54,18 +51,15 @@ SAVE_PATH = '/home/blendux/Projects/Aircraft_Studio/save' # stringer2 = creator.wing.Stringer(af2, 'stringer2') # stringer2.info_save(SAVE_PATH) -pop = generator.Population(200) - -evaluator.analyze_all(pop) - -# for aircraft in pop.aircrafts: -# print(aircraft.results) +population = acs.generator.Population(10000) +acs.evaluator.analyze_all(population) # 123s with multiprocessing :-( -# for i in eval.aircrafts: -# print(i.name) +def foo(size): + for _ in range(size): + print(acs.evaluator.analyze(acs.creator.base.Aircraft.from_random())) + return None -# for i in eval.aircrafts: -# print(i.results) +foo(10000) # 106s # Final execution time final_time = time.time() - start_time diff --git a/generator/__init__.py b/generator/__init__.py deleted file mode 100644 index 4f233cb..0000000 --- a/generator/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .generator import * diff --git a/generator/generator.py b/generator/generator.py deleted file mode 100644 index c2b8103..0000000 --- a/generator/generator.py +++ /dev/null @@ -1,43 +0,0 @@ -""" -The generator.py module contains classes describing genetic populations -and methods to generate default aircraft. -""" - -import random -import concurrent.futures - -import creator -import evaluator - - -def default_fuselage(): - pass - - -def default_propulsion(): - pass - - -class Population(): - """Represents a collection of aircraft.""" - def __init__(self, size): - self.aircrafts = [] - for i in range(size): - self.aircrafts.append(creator.base.Aircraft.from_default()) - self.size = size - self.results = None - self.gen_number = 0 # incremented for every generation - - def evaluate(self): - with concurrent.futures.ProcessPoolExecutor as executor: - for aircraft in self.aircrafts: - executor.submit(evaluator.analyze, aircraft) - - def mutate(self, prob_mt): - """Randomly mutate the genes of prob_mt % of the population.""" - def crossover(self, prob_cx): - """Combine the genes of prob_cx % of the population.""" - def reproduce(self, prob_rp): - """Pass on the genes of the fittest prob_rp % of the population.""" - def fitness(): - """Rate the fitness of an individual on a relative scale (0-100)""" diff --git a/log_base.txt b/log_base.txt index e69de29..65b0583 100644 --- a/log_base.txt +++ b/log_base.txt @@ -0,0 +1,208 @@ +2019-10-22 15:23:21,536 - DEBUG - $HOME=/home/blendux +2019-10-22 15:23:21,536 - DEBUG - CONFIGDIR=/home/blendux/.config/matplotlib +2019-10-22 15:23:21,536 - DEBUG - matplotlib data path: /usr/lib/python3.7/site-packages/matplotlib/mpl-data +2019-10-22 15:23:21,541 - DEBUG - loaded rc file /usr/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc +2019-10-22 15:23:21,543 - DEBUG - matplotlib version 3.1.1 +2019-10-22 15:23:21,543 - DEBUG - interactive is False +2019-10-22 15:23:21,543 - DEBUG - platform is linux +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'] +2019-10-22 15:23:21,578 - DEBUG - CACHEDIR=/home/blendux/.cache/matplotlib +2019-10-22 15:23:21,580 - DEBUG - Using fontManager instance from /home/blendux/.cache/matplotlib/fontlist-v310.json +2019-10-22 15:23:21,677 - DEBUG - Loaded backend qt5agg version unknown. +2019-10-22 15:23:21,688 - DEBUG - Loaded backend tkagg version unknown. +2019-10-22 15:23:21,689 - DEBUG - Loaded backend TkAgg version unknown. +2019-10-22 15:47:34,956 - DEBUG - $HOME=/home/blendux +2019-10-22 15:47:34,956 - DEBUG - CONFIGDIR=/home/blendux/.config/matplotlib +2019-10-22 15:47:34,957 - DEBUG - matplotlib data path: /usr/lib/python3.7/site-packages/matplotlib/mpl-data +2019-10-22 15:47:34,961 - DEBUG - loaded rc file /usr/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc +2019-10-22 15:47:34,963 - DEBUG - matplotlib version 3.1.1 +2019-10-22 15:47:34,963 - DEBUG - interactive is False +2019-10-22 15:47:34,963 - DEBUG - platform is linux +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'] +2019-10-22 15:47:34,996 - DEBUG - CACHEDIR=/home/blendux/.cache/matplotlib +2019-10-22 15:47:34,997 - DEBUG - Using fontManager instance from /home/blendux/.cache/matplotlib/fontlist-v310.json +2019-10-22 15:47:35,087 - DEBUG - Loaded backend qt5agg version unknown. +2019-10-22 15:47:35,097 - DEBUG - Loaded backend tkagg version unknown. +2019-10-22 15:47:35,098 - DEBUG - Loaded backend TkAgg version unknown. +2019-10-31 19:35:35,989 - DEBUG - $HOME=/home/blendux +2019-10-31 19:35:35,991 - DEBUG - CONFIGDIR=/home/blendux/.config/matplotlib +2019-10-31 19:35:35,992 - DEBUG - matplotlib data path: /usr/lib/python3.7/site-packages/matplotlib/mpl-data +2019-10-31 19:35:36,029 - DEBUG - loaded rc file /usr/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc +2019-10-31 19:35:36,040 - DEBUG - matplotlib version 3.1.1 +2019-10-31 19:35:36,041 - DEBUG - interactive is False +2019-10-31 19:35:36,042 - DEBUG - platform is linux +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'] +2019-10-31 19:35:36,325 - DEBUG - CACHEDIR=/home/blendux/.cache/matplotlib +2019-10-31 19:35:36,335 - DEBUG - Using fontManager instance from /home/blendux/.cache/matplotlib/fontlist-v310.json +2019-10-31 19:35:37,204 - DEBUG - Loaded backend qt5agg version unknown. +2019-10-31 19:35:37,302 - DEBUG - Loaded backend tkagg version unknown. +2019-10-31 19:35:37,305 - DEBUG - Loaded backend TkAgg version unknown. +2019-10-31 19:36:17,660 - DEBUG - $HOME=/home/blendux +2019-10-31 19:36:17,661 - DEBUG - CONFIGDIR=/home/blendux/.config/matplotlib +2019-10-31 19:36:17,662 - DEBUG - matplotlib data path: /usr/lib/python3.7/site-packages/matplotlib/mpl-data +2019-10-31 19:36:17,697 - DEBUG - loaded rc file /usr/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc +2019-10-31 19:36:17,708 - DEBUG - matplotlib version 3.1.1 +2019-10-31 19:36:17,709 - DEBUG - interactive is False +2019-10-31 19:36:17,709 - DEBUG - platform is linux +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'] +2019-10-31 19:36:17,956 - DEBUG - CACHEDIR=/home/blendux/.cache/matplotlib +2019-10-31 19:36:17,965 - DEBUG - Using fontManager instance from /home/blendux/.cache/matplotlib/fontlist-v310.json +2019-10-31 19:36:18,655 - DEBUG - Loaded backend qt5agg version unknown. +2019-10-31 19:36:18,728 - DEBUG - Loaded backend tkagg version unknown. +2019-10-31 19:36:18,731 - DEBUG - Loaded backend TkAgg version unknown. +2019-10-31 19:40:15,940 - DEBUG - $HOME=/home/blendux +2019-10-31 19:40:15,942 - DEBUG - CONFIGDIR=/home/blendux/.config/matplotlib +2019-10-31 19:40:15,943 - DEBUG - matplotlib data path: /usr/lib/python3.7/site-packages/matplotlib/mpl-data +2019-10-31 19:40:15,978 - DEBUG - loaded rc file /usr/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc +2019-10-31 19:40:15,990 - DEBUG - matplotlib version 3.1.1 +2019-10-31 19:40:15,990 - DEBUG - interactive is False +2019-10-31 19:40:15,991 - DEBUG - platform is linux +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'] +2019-10-31 19:40:16,242 - DEBUG - CACHEDIR=/home/blendux/.cache/matplotlib +2019-10-31 19:40:16,250 - DEBUG - Using fontManager instance from /home/blendux/.cache/matplotlib/fontlist-v310.json +2019-10-31 19:40:16,967 - DEBUG - Loaded backend qt5agg version unknown. +2019-10-31 19:40:17,040 - DEBUG - Loaded backend tkagg version unknown. +2019-10-31 19:40:17,042 - DEBUG - Loaded backend TkAgg version unknown. +2019-11-01 17:48:41,736 - DEBUG - $HOME=/home/blendux +2019-11-01 17:48:41,736 - DEBUG - CONFIGDIR=/home/blendux/.config/matplotlib +2019-11-01 17:48:41,737 - DEBUG - matplotlib data path: /usr/lib/python3.7/site-packages/matplotlib/mpl-data +2019-11-01 17:48:41,742 - DEBUG - loaded rc file /usr/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc +2019-11-01 17:48:41,744 - DEBUG - matplotlib version 3.1.1 +2019-11-01 17:48:41,744 - DEBUG - interactive is False +2019-11-01 17:48:41,744 - DEBUG - platform is linux +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'] +2019-11-01 17:48:41,792 - DEBUG - CACHEDIR=/home/blendux/.cache/matplotlib +2019-11-01 17:48:41,794 - DEBUG - Using fontManager instance from /home/blendux/.cache/matplotlib/fontlist-v310.json +2019-11-01 17:48:41,967 - DEBUG - Loaded backend qt5agg version unknown. +2019-11-01 17:48:41,992 - DEBUG - Loaded backend tkagg version unknown. +2019-11-01 17:48:41,992 - DEBUG - Loaded backend TkAgg version unknown. +2019-11-01 17:52:55,611 - DEBUG - $HOME=/home/blendux +2019-11-01 17:52:55,611 - DEBUG - CONFIGDIR=/home/blendux/.config/matplotlib +2019-11-01 17:52:55,611 - DEBUG - matplotlib data path: /usr/lib/python3.7/site-packages/matplotlib/mpl-data +2019-11-01 17:52:55,616 - DEBUG - loaded rc file /usr/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc +2019-11-01 17:52:55,618 - DEBUG - matplotlib version 3.1.1 +2019-11-01 17:52:55,618 - DEBUG - interactive is False +2019-11-01 17:52:55,618 - DEBUG - platform is linux +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'] +2019-11-01 17:52:55,651 - DEBUG - CACHEDIR=/home/blendux/.cache/matplotlib +2019-11-01 17:52:55,652 - DEBUG - Using fontManager instance from /home/blendux/.cache/matplotlib/fontlist-v310.json +2019-11-01 17:52:55,740 - DEBUG - Loaded backend qt5agg version unknown. +2019-11-01 17:52:55,750 - DEBUG - Loaded backend tkagg version unknown. +2019-11-01 17:52:55,750 - DEBUG - Loaded backend TkAgg version unknown. +2019-11-01 17:54:04,018 - DEBUG - $HOME=/home/blendux +2019-11-01 17:54:04,018 - DEBUG - CONFIGDIR=/home/blendux/.config/matplotlib +2019-11-01 17:54:04,018 - DEBUG - matplotlib data path: /usr/lib/python3.7/site-packages/matplotlib/mpl-data +2019-11-01 17:54:04,023 - DEBUG - loaded rc file /usr/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc +2019-11-01 17:54:04,025 - DEBUG - matplotlib version 3.1.1 +2019-11-01 17:54:04,025 - DEBUG - interactive is False +2019-11-01 17:54:04,025 - DEBUG - platform is linux +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'] +2019-11-01 17:54:04,057 - DEBUG - CACHEDIR=/home/blendux/.cache/matplotlib +2019-11-01 17:54:04,058 - DEBUG - Using fontManager instance from /home/blendux/.cache/matplotlib/fontlist-v310.json +2019-11-01 17:54:04,147 - DEBUG - Loaded backend qt5agg version unknown. +2019-11-01 17:54:04,157 - DEBUG - Loaded backend tkagg version unknown. +2019-11-01 17:54:04,158 - DEBUG - Loaded backend TkAgg version unknown. +2019-11-01 17:54:16,377 - DEBUG - $HOME=/home/blendux +2019-11-01 17:54:16,377 - DEBUG - CONFIGDIR=/home/blendux/.config/matplotlib +2019-11-01 17:54:16,378 - DEBUG - matplotlib data path: /usr/lib/python3.7/site-packages/matplotlib/mpl-data +2019-11-01 17:54:16,382 - DEBUG - loaded rc file /usr/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc +2019-11-01 17:54:16,384 - DEBUG - matplotlib version 3.1.1 +2019-11-01 17:54:16,384 - DEBUG - interactive is False +2019-11-01 17:54:16,384 - DEBUG - platform is linux +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'] +2019-11-01 17:54:16,416 - DEBUG - CACHEDIR=/home/blendux/.cache/matplotlib +2019-11-01 17:54:16,417 - DEBUG - Using fontManager instance from /home/blendux/.cache/matplotlib/fontlist-v310.json +2019-11-01 17:54:16,507 - DEBUG - Loaded backend qt5agg version unknown. +2019-11-01 17:54:16,517 - DEBUG - Loaded backend tkagg version unknown. +2019-11-01 17:54:16,518 - DEBUG - Loaded backend TkAgg version unknown. +2019-11-01 17:55:44,684 - DEBUG - $HOME=/home/blendux +2019-11-01 17:55:44,684 - DEBUG - CONFIGDIR=/home/blendux/.config/matplotlib +2019-11-01 17:55:44,684 - DEBUG - matplotlib data path: /usr/lib/python3.7/site-packages/matplotlib/mpl-data +2019-11-01 17:55:44,689 - DEBUG - loaded rc file /usr/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc +2019-11-01 17:55:44,691 - DEBUG - matplotlib version 3.1.1 +2019-11-01 17:55:44,691 - DEBUG - interactive is False +2019-11-01 17:55:44,691 - DEBUG - platform is linux +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'] +2019-11-01 17:55:44,723 - DEBUG - CACHEDIR=/home/blendux/.cache/matplotlib +2019-11-01 17:55:44,724 - DEBUG - Using fontManager instance from /home/blendux/.cache/matplotlib/fontlist-v310.json +2019-11-01 17:55:44,812 - DEBUG - Loaded backend qt5agg version unknown. +2019-11-01 17:55:44,822 - DEBUG - Loaded backend tkagg version unknown. +2019-11-01 17:55:44,822 - DEBUG - Loaded backend TkAgg version unknown. +2019-11-01 17:57:52,401 - DEBUG - $HOME=/home/blendux +2019-11-01 17:57:52,401 - DEBUG - CONFIGDIR=/home/blendux/.config/matplotlib +2019-11-01 17:57:52,401 - DEBUG - matplotlib data path: /usr/lib/python3.7/site-packages/matplotlib/mpl-data +2019-11-01 17:57:52,406 - DEBUG - loaded rc file /usr/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc +2019-11-01 17:57:52,408 - DEBUG - matplotlib version 3.1.1 +2019-11-01 17:57:52,408 - DEBUG - interactive is False +2019-11-01 17:57:52,408 - DEBUG - platform is linux +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'] +2019-11-01 17:57:52,441 - DEBUG - CACHEDIR=/home/blendux/.cache/matplotlib +2019-11-01 17:57:52,442 - DEBUG - Using fontManager instance from /home/blendux/.cache/matplotlib/fontlist-v310.json +2019-11-01 17:57:52,532 - DEBUG - Loaded backend qt5agg version unknown. +2019-11-01 17:57:52,542 - DEBUG - Loaded backend tkagg version unknown. +2019-11-01 17:57:52,542 - DEBUG - Loaded backend TkAgg version unknown. +2019-11-01 18:00:17,743 - DEBUG - $HOME=/home/blendux +2019-11-01 18:00:17,744 - DEBUG - CONFIGDIR=/home/blendux/.config/matplotlib +2019-11-01 18:00:17,744 - DEBUG - matplotlib data path: /usr/lib/python3.7/site-packages/matplotlib/mpl-data +2019-11-01 18:00:17,749 - DEBUG - loaded rc file /usr/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc +2019-11-01 18:00:17,750 - DEBUG - matplotlib version 3.1.1 +2019-11-01 18:00:17,750 - DEBUG - interactive is False +2019-11-01 18:00:17,750 - DEBUG - platform is linux +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'] +2019-11-01 18:00:17,782 - DEBUG - CACHEDIR=/home/blendux/.cache/matplotlib +2019-11-01 18:00:17,783 - DEBUG - Using fontManager instance from /home/blendux/.cache/matplotlib/fontlist-v310.json +2019-11-01 18:00:17,872 - DEBUG - Loaded backend qt5agg version unknown. +2019-11-01 18:00:17,881 - DEBUG - Loaded backend tkagg version unknown. +2019-11-01 18:00:17,882 - DEBUG - Loaded backend TkAgg version unknown. +2019-11-01 18:00:38,980 - DEBUG - $HOME=/home/blendux +2019-11-01 18:00:38,981 - DEBUG - CONFIGDIR=/home/blendux/.config/matplotlib +2019-11-01 18:00:38,981 - DEBUG - matplotlib data path: /usr/lib/python3.7/site-packages/matplotlib/mpl-data +2019-11-01 18:00:38,986 - DEBUG - loaded rc file /usr/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc +2019-11-01 18:00:38,987 - DEBUG - matplotlib version 3.1.1 +2019-11-01 18:00:38,988 - DEBUG - interactive is False +2019-11-01 18:00:38,988 - DEBUG - platform is linux +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'] +2019-11-01 18:00:39,019 - DEBUG - CACHEDIR=/home/blendux/.cache/matplotlib +2019-11-01 18:00:39,020 - DEBUG - Using fontManager instance from /home/blendux/.cache/matplotlib/fontlist-v310.json +2019-11-01 18:00:39,108 - DEBUG - Loaded backend qt5agg version unknown. +2019-11-01 18:00:39,117 - DEBUG - Loaded backend tkagg version unknown. +2019-11-01 18:00:39,118 - DEBUG - Loaded backend TkAgg version unknown. +2019-11-01 18:00:44,523 - DEBUG - $HOME=/home/blendux +2019-11-01 18:00:44,523 - DEBUG - CONFIGDIR=/home/blendux/.config/matplotlib +2019-11-01 18:00:44,523 - DEBUG - matplotlib data path: /usr/lib/python3.7/site-packages/matplotlib/mpl-data +2019-11-01 18:00:44,528 - DEBUG - loaded rc file /usr/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc +2019-11-01 18:00:44,530 - DEBUG - matplotlib version 3.1.1 +2019-11-01 18:00:44,530 - DEBUG - interactive is False +2019-11-01 18:00:44,530 - DEBUG - platform is linux +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'] +2019-11-01 18:00:44,561 - DEBUG - CACHEDIR=/home/blendux/.cache/matplotlib +2019-11-01 18:00:44,562 - DEBUG - Using fontManager instance from /home/blendux/.cache/matplotlib/fontlist-v310.json +2019-11-01 18:00:44,652 - DEBUG - Loaded backend qt5agg version unknown. +2019-11-01 18:00:44,662 - DEBUG - Loaded backend tkagg version unknown. +2019-11-01 18:00:44,662 - DEBUG - Loaded backend TkAgg version unknown. +2019-11-01 18:00:56,851 - DEBUG - $HOME=/home/blendux +2019-11-01 18:00:56,851 - DEBUG - CONFIGDIR=/home/blendux/.config/matplotlib +2019-11-01 18:00:56,851 - DEBUG - matplotlib data path: /usr/lib/python3.7/site-packages/matplotlib/mpl-data +2019-11-01 18:00:56,856 - DEBUG - loaded rc file /usr/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc +2019-11-01 18:00:56,858 - DEBUG - matplotlib version 3.1.1 +2019-11-01 18:00:56,858 - DEBUG - interactive is False +2019-11-01 18:00:56,858 - DEBUG - platform is linux +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'] +2019-11-01 18:00:56,889 - DEBUG - CACHEDIR=/home/blendux/.cache/matplotlib +2019-11-01 18:00:56,891 - DEBUG - Using fontManager instance from /home/blendux/.cache/matplotlib/fontlist-v310.json +2019-11-01 18:00:56,979 - DEBUG - Loaded backend qt5agg version unknown. +2019-11-01 18:00:56,989 - DEBUG - Loaded backend tkagg version unknown. +2019-11-01 18:00:56,989 - DEBUG - Loaded backend TkAgg version unknown. +2019-11-01 18:08:24,846 - DEBUG - $HOME=/home/blendux +2019-11-01 18:08:24,846 - DEBUG - CONFIGDIR=/home/blendux/.config/matplotlib +2019-11-01 18:08:24,846 - DEBUG - matplotlib data path: /usr/lib/python3.7/site-packages/matplotlib/mpl-data +2019-11-01 18:08:24,851 - DEBUG - loaded rc file /usr/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc +2019-11-01 18:08:24,853 - DEBUG - matplotlib version 3.1.1 +2019-11-01 18:08:24,853 - DEBUG - interactive is False +2019-11-01 18:08:24,853 - DEBUG - platform is linux +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'] +2019-11-01 18:08:24,886 - DEBUG - CACHEDIR=/home/blendux/.cache/matplotlib +2019-11-01 18:08:24,887 - DEBUG - Using fontManager instance from /home/blendux/.cache/matplotlib/fontlist-v310.json +2019-11-01 18:08:24,977 - DEBUG - Loaded backend qt5agg version unknown. +2019-11-01 18:08:24,986 - DEBUG - Loaded backend tkagg version unknown. +2019-11-01 18:08:24,987 - DEBUG - Loaded backend TkAgg version unknown. diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..db01414 --- /dev/null +++ b/setup.py @@ -0,0 +1,4 @@ +from distutils.core import setup +from Cython.Build import cythonize + +setup(ext_modules=cythonize('example.py')) diff --git a/test/creator_test.py b/test/creator_test.py new file mode 100644 index 0000000..303ac66 --- /dev/null +++ b/test/creator_test.py @@ -0,0 +1,7 @@ +import unittest +from aircraftstudio import creator + + +class TestDefaults(unittest.TestCase): + def test_default_aircraft(self): + self.assertEqual(creator.base.Aircraft.from_defaults().naca_num, 2412) -- cgit v1.2.3