From 41a836f0de682d9278e020c9c7cc734884d71472 Mon Sep 17 00:00:00 2001 From: "Olivier J.N. Bertrand" <olivier.bertrand@uni-bielefeld.de> Date: Sat, 16 Dec 2017 18:03:27 +0100 Subject: [PATCH] All test pass now :) --- navipy/comparing/__init__.py | 8 +- navipy/comparing/test.py | 64 ++++-------- navipy/moving/test_agent.py | 4 +- navipy/processing/pcode.py | 9 +- navipy/processing/test.py | 187 +++++++++++++---------------------- navipy/rendering/__init__.py | 0 todo | 22 +---- 7 files changed, 105 insertions(+), 189 deletions(-) create mode 100644 navipy/rendering/__init__.py diff --git a/navipy/comparing/__init__.py b/navipy/comparing/__init__.py index 7b25390..2c6c3e8 100644 --- a/navipy/comparing/__init__.py +++ b/navipy/comparing/__init__.py @@ -5,7 +5,7 @@ memorised places. """ import numpy as np from navipy.processing.tools import is_ibpc, is_obpc -from navipy.processing.__init__ import check_scene +from navipy.processing.tools import check_scene def simple_imagediff(current, memory): @@ -125,12 +125,12 @@ A=(I_x,I_y) and b = I_t check_scene(current) check_scene(memory) currroll = np.roll(current, 1, axis=1) - dx = current-currroll + dx = current - currroll memroll = np.roll(memory, 1, axis=1) - dy = memory-memroll + dy = memory - memroll dy = np.reshape(dy, (np.prod(dy.shape), 1)) dx = np.reshape(dx, (np.prod(dx.shape), 1)) - di = current-memory + di = current - memory di = np.reshape(di, (np.prod(di.shape), 1)) a_matrix = np.column_stack([dy, dx]) a_matrix_sqr = np.dot(np.transpose(a_matrix), a_matrix) diff --git a/navipy/comparing/test.py b/navipy/comparing/test.py index e940814..660cb0f 100644 --- a/navipy/comparing/test.py +++ b/navipy/comparing/test.py @@ -2,39 +2,11 @@ import unittest import numpy as np import navipy.database as database import navipy.comparing as comparing -import navipy.processing as processing +import navipy.processing.pcode as pcode +from navipy.processing.tools import is_numeric_array import pkg_resources -def is_numeric_array(array): - """Checks if the dtype of the array is numeric. - - Booleans, unsigned integer, signed integer, floats and complex are - considered numeric. - - Parameters - ---------- - array : `numpy.ndarray`-like - The array to check. - - Returns - ------- - is_numeric : `bool` - True if it is a recognized numerical and False if object or - string. - """ - numerical_dtype_kinds = {'b', # boolean - 'u', # unsigned integer - 'i', # signed integer - 'f', # floats - 'c'} # complex - try: - return array.dtype.kind in numerical_dtype_kinds - except AttributeError: - # in case it's not a numpy array it will probably have no dtype. - return np.asarray(array).dtype.kind in numerical_dtype_kinds - - class TestCase(unittest.TestCase): def setUp(self): self.mydb_filename = pkg_resources.resource_filename( @@ -42,8 +14,8 @@ class TestCase(unittest.TestCase): self.mydb = database.DataBaseLoad(self.mydb_filename) def test_imagediff_curr(self): - curr = processing.scene(self.mydb, rowid=1) - mem = processing.scene(self.mydb, rowid=2) + curr = pcode.scene(self.mydb, rowid=1) + mem = pcode.scene(self.mydb, rowid=2) curr2 = curr.copy() curr2[3, 5, 2, 0] = np.nan curr3 = [[1, 2, 3], [1, 2, 3], [1, 2, 3]] @@ -68,8 +40,8 @@ class TestCase(unittest.TestCase): self.assertTrue(is_numeric_array(diff)) def test_imagediff_memory(self): - curr = processing.scene(self.mydb, rowid=1) - mem = processing.scene(self.mydb, rowid=2) + curr = pcode.scene(self.mydb, rowid=1) + mem = pcode.scene(self.mydb, rowid=2) mem2 = curr.copy() mem2[3, 5, 2, 0] = np.nan mem3 = [[1, 2, 3], [1, 2, 3], [1, 2, 3]] @@ -93,8 +65,8 @@ class TestCase(unittest.TestCase): self.assertTrue(is_numeric_array(diff)) def test_rot_imagediff_curr(self): - curr = processing.scene(self.mydb, rowid=1) - mem = processing.scene(self.mydb, rowid=2) + curr = pcode.scene(self.mydb, rowid=1) + mem = pcode.scene(self.mydb, rowid=2) curr2 = curr.copy() curr2[3, 5, 2, 0] = np.nan curr3 = [[1, 2, 3], [1, 2, 3], [1, 2, 3]] @@ -118,8 +90,8 @@ class TestCase(unittest.TestCase): self.assertTrue(is_numeric_array(diff)) def test_rotimagediff_memory(self): - curr = processing.scene(self.mydb, rowid=1) - mem = processing.scene(self.mydb, rowid=2) + curr = pcode.scene(self.mydb, rowid=1) + mem = pcode.scene(self.mydb, rowid=2) mem2 = curr.copy() mem2[3, 5, 2, 0] = np.nan mem3 = [[1, 2, 3], [1, 2, 3], [1, 2, 3]] @@ -143,8 +115,8 @@ class TestCase(unittest.TestCase): self.assertTrue(is_numeric_array(diff)) def test_simple_imagediff_curr(self): - curr = processing.scene(self.mydb, rowid=1) - mem = processing.scene(self.mydb, rowid=2) + curr = pcode.scene(self.mydb, rowid=1) + mem = pcode.scene(self.mydb, rowid=2) curr2 = curr.copy() curr2[3, 5, 2, 0] = np.nan curr3 = [[1, 2, 3], [1, 2, 3], [1, 2, 3]] @@ -170,8 +142,8 @@ class TestCase(unittest.TestCase): self.assertTrue(diff.shape[3] == 1) def test_simple_imagediff_mem(self): - curr = processing.scene(self.mydb, rowid=1) - mem = processing.scene(self.mydb, rowid=2) + curr = pcode.scene(self.mydb, rowid=1) + mem = pcode.scene(self.mydb, rowid=2) mem2 = curr.copy() mem2[3, 5, 2, 0] = np.nan mem3 = [[1, 2, 3], [1, 2, 3], [1, 2, 3]] @@ -197,8 +169,8 @@ class TestCase(unittest.TestCase): self.assertTrue(diff.shape[3] == 1) def test_diff_optic_flow_memory(self): - curr = processing.scene(self.mydb, rowid=1) - mem = processing.scene(self.mydb, rowid=2) + curr = pcode.scene(self.mydb, rowid=1) + mem = pcode.scene(self.mydb, rowid=2) mem2 = curr.copy() mem2[3, 5, 2, 0] = np.nan mem3 = [[1, 2, 3], [1, 2, 3], [1, 2, 3]] @@ -221,8 +193,8 @@ class TestCase(unittest.TestCase): self.assertTrue(is_numeric_array(vec)) def test_diff_optic_flow_curr(self): - curr = processing.scene(self.mydb, rowid=1) - mem = processing.scene(self.mydb, rowid=2) + curr = pcode.scene(self.mydb, rowid=1) + mem = pcode.scene(self.mydb, rowid=2) curr2 = curr.copy() curr2[3, 5, 2, 0] = np.nan curr3 = [[1, 2, 3], [1, 2, 3], [1, 2, 3]] diff --git a/navipy/moving/test_agent.py b/navipy/moving/test_agent.py index c482eb9..e327a28 100644 --- a/navipy/moving/test_agent.py +++ b/navipy/moving/test_agent.py @@ -182,10 +182,10 @@ class TestNavipyMovingAgent(unittest.TestCase): # Two loops attractors graph_edges = list() for snode, enode in zip(graph_nodes[:11], - np.alpha_2(graph_nodes[:11], 1)): + np.roll(graph_nodes[:11], 1)): graph_edges.append((snode, enode)) for snode, enode in zip(graph_nodes[11:], - np.alpha_2(graph_nodes[11:], 1)): + np.roll(graph_nodes[11:], 1)): graph_edges.append((snode, enode)) graph = nx.DiGraph() diff --git a/navipy/processing/pcode.py b/navipy/processing/pcode.py index be7621c..2686b4d 100644 --- a/navipy/processing/pcode.py +++ b/navipy/processing/pcode.py @@ -127,7 +127,14 @@ and minimum of the local image intensity size=size, mode='wrap') i_min = minimum_filter(scene[..., channel, 0], size=size, mode='wrap') - contrast[..., channel, 0] = (i_max - i_min) / (i_max + i_min) + divider = i_max + i_min + nonzero = divider != 0 + eqzero = divider == 0 + i_min = i_min[nonzero] + i_max = i_max[nonzero] + divider = divider[nonzero] + contrast[nonzero, channel, 0] = (i_max - i_min) / divider + contrast[eqzero, channel, 0] = 0 return contrast diff --git a/navipy/processing/test.py b/navipy/processing/test.py index 536d7c3..c8af1a9 100644 --- a/navipy/processing/test.py +++ b/navipy/processing/test.py @@ -3,7 +3,7 @@ import sqlite3 import numpy as np import pandas as pd import navipy.database as database -import navipy.processing as processing +import navipy.processing.pcode as pcode from navipy.processing.tools import is_numeric_array import pkg_resources @@ -19,9 +19,6 @@ class TestCase(unittest.TestCase): c = conn.cursor() c.execute(""" SELECT * FROM position_orientation WHERE (rowid=1) """) rows = c.fetchall()[0] - # print(rows) - # convert to pd.series - # working case posorient = pd.Series(index=['x', 'y', 'z', 'alpha_0', 'alpha_1', 'alpha_2']) @@ -31,10 +28,7 @@ class TestCase(unittest.TestCase): posorient.alpha_0 = rows[3] posorient.alpha_1 = rows[2] posorient.alpha_2 = rows[4] - # conn.close() - # print("posorient",posorient) - # print(posorientall.head()) - image = processing.scene(self.mydb, posorient=posorient) + image = pcode.scene(self.mydb, posorient=posorient) self.assertIsNotNone(image) self.assertFalse(sum(image.shape) == 0) # print("shape",image.shape) @@ -50,7 +44,7 @@ class TestCase(unittest.TestCase): posorient2.alpha_1 = posorient.alpha_1 posorient2.alpha_2 = posorient.alpha_2 with self.assertRaises(Exception): - image = processing.scene(self.mydb, posorient=posorient2) + image = pcode.scene(self.mydb, posorient=posorient2) # incorrect case None posorient2 = pd.Series(index=['x', 'y', 'z', @@ -62,7 +56,7 @@ class TestCase(unittest.TestCase): posorient2.alpha_1 = posorient.alpha_1 posorient2.alpha_2 = posorient.alpha_2 with self.assertRaises(ValueError): - image = processing.scene(self.mydb, posorient=posorient2) + image = pcode.scene(self.mydb, posorient=posorient2) # incorrect case nan posorient2 = pd.Series(index=['x', 'y', 'z', @@ -74,7 +68,7 @@ class TestCase(unittest.TestCase): posorient2.alpha_1 = posorient.alpha_1 posorient2.alpha_2 = posorient.alpha_2 with self.assertRaises(ValueError): - image = processing.scene(self.mydb, posorient=posorient2) + image = pcode.scene(self.mydb, posorient=posorient2) # incorrect case no pandas series but dict posorient2 = {} @@ -85,44 +79,17 @@ class TestCase(unittest.TestCase): posorient2['alpha_1'] = posorient.alpha_1 posorient2['alpha_2'] = posorient.alpha_2 with self.assertRaises(TypeError): - image = processing.scene(self.mydb, posorient=posorient2) + image = pcode.scene(self.mydb, posorient=posorient2) # not working case empty posorient2 = pd.Series(index=['x', 'y', 'z', 'alpha_0', 'alpha_1', 'alpha_2']) with self.assertRaises(Exception): - image = processing.scene(self.mydb, posorient=posorient2) - - """ - def test_db(self): - - #build_test_db() - #empty database -> should not work - db_filename='test_db_1' - #loading should not work cuz not - #all required tables are in this database - with self.assertRaises(Exception) as cm: - db=database.DataBaseLoad(db_filename) - print("a wanted error occured", cm.exception) - #reading should not anyway - with self.assertRaises(Exception) as cm: - image = db.read_image(rowid=1) - - #empty database -> should work?? - db_filename='test_db_2' - #loading should work - db=database.DataBaseLoad(db_filename) - #reading should not - with self.assertRaises(Exception) as cm: - image = db.read_image(rowid=1) - """ + image = pcode.scene(self.mydb, posorient=posorient2) def test_skyline_scene(self): - # image = processing.scene(self.mydb,posorient=posorient) - # print("image size skyline test",image.shape) - scene = processing.scene(self.mydb, rowid=1) - # print("scene size skypline test",scene.shape) + scene = pcode.scene(self.mydb, rowid=1) scene2 = scene.copy() scene2[3, 5, 2, 0] = np.nan scene3 = [[1, 2, 3], [1, 2, 3], [1, 2, 3]] @@ -132,15 +99,15 @@ class TestCase(unittest.TestCase): # put useless stuff here with self.assertRaises(ValueError): - processing.skyline(scene2) + pcode.skyline(scene2) with self.assertRaises(TypeError): - processing.skyline(scene3) + pcode.skyline(scene3) with self.assertRaises(Exception): - processing.skyline(scene4) + pcode.skyline(scene4) # should be working -> check if result(skyline) is correct for s in [scene]: - skyline = processing.skyline(s) + skyline = pcode.skyline(s) self.assertFalse(skyline.shape[1] <= 0) self.assertTrue(skyline.shape[2] == 4) self.assertFalse(np.any(np.isnan(skyline))) @@ -151,24 +118,21 @@ class TestCase(unittest.TestCase): self.assertTrue(skyline.shape[1] > 0) def test_id(self): - # print("test_id") - # check for wrong cases - # my_scene = processing.scene(self.mydb, rowid=-2) for rowid in [0, -2]: with self.assertRaises(ValueError): # print("rowid",rowid) - processing.scene(self.mydb, rowid=rowid) + pcode.scene(self.mydb, rowid=rowid) with self.assertRaises(TypeError): - processing.scene(self.mydb, rowid='T') + pcode.scene(self.mydb, rowid='T') with self.assertRaises(ValueError): - processing.scene(self.mydb, rowid=None) + pcode.scene(self.mydb, rowid=None) with self.assertRaises(TypeError): - processing.scene(self.mydb, rowid=np.nan) + pcode.scene(self.mydb, rowid=np.nan) with self.assertRaises(TypeError): - processing.scene(self.mydb, rowid=4.5) + pcode.scene(self.mydb, rowid=4.5) for rowid in [1, 2, 3, 4, 5]: - image = processing.scene(self.mydb, rowid=rowid) + image = pcode.scene(self.mydb, rowid=rowid) # image=np.array(image) self.assertIsNotNone(image) self.assertFalse(sum(image.shape) == 0) @@ -180,36 +144,31 @@ class TestCase(unittest.TestCase): self.assertTrue(image.shape[1] > 0) def test_distance_channel(self): - scene = processing.scene(self.mydb, rowid=1) - # print("scene sizejhghghhg",scene.shape) + scene = pcode.scene(self.mydb, rowid=1) # should not be working for d in ['g', None, np.nan, 8.4]: with self.assertRaises(TypeError): - processing.contrast_weighted_nearness(scene, - distance_channel=d) + pcode.contrast_weighted_nearness(scene, + distance_channel=d) with self.assertRaises(ValueError): - processing.contrast_weighted_nearness(scene, - distance_channel=-1) + pcode.contrast_weighted_nearness(scene, + distance_channel=-1) # should work - for d in [0, 1, 2, 3]: - weighted_scene = \ - processing.contrast_weighted_nearness(scene, - distance_channel=d) - # print("last channel",d) - assert is_numeric_array(weighted_scene) - assert ~np.any(np.isnan(weighted_scene)) - assert len(weighted_scene.shape) == 4 - assert ~(weighted_scene.shape[1] <= 0) - assert ~(weighted_scene.shape[0] <= 0) - assert (weighted_scene.shape[2] == 4) - assert ~(np.any(np.isNone(weighted_scene))) + d = 3 + weighted_scene = \ + pcode.contrast_weighted_nearness(scene, + distance_channel=d) + # print("last channel",d) + self.assertTrue(is_numeric_array(weighted_scene)) + self.assertTrue(~np.any(np.isnan(weighted_scene))) + self.assertEqual(weighted_scene.shape, scene.shape) def test_contr_weight_scene(self): - scene = processing.scene(self.mydb, rowid=1) + scene = pcode.scene(self.mydb, rowid=1) # working cases - contrast = processing.contrast_weighted_nearness(scene) + contrast = pcode.contrast_weighted_nearness(scene) self.assertIsNotNone(contrast) self.assertFalse(sum(contrast.shape) == 0) self.assertTrue(len(contrast.shape) == 4) @@ -227,49 +186,43 @@ class TestCase(unittest.TestCase): scene3 = np.array(scene3) scene4 = np.zeros((3, 4, 5, 0)) with self.assertRaises(ValueError): - contrast = processing.contrast_weighted_nearness(scene2) - with self.assertRaises(ValueError): - contrast = processing.contrast_weighted_nearness(scene3) + contrast = pcode.contrast_weighted_nearness(scene2) + with self.assertRaises(Exception): + contrast = pcode.contrast_weighted_nearness(scene3) with self.assertRaises(Exception): - contrast = processing.contrast_weighted_nearness(scene4) + contrast = pcode.contrast_weighted_nearness(scene4) def test_contr_weight_contrast(self): - scene = processing.scene(self.mydb, rowid=1) + scene = pcode.scene(self.mydb, rowid=1) for size in [9.4, 'g', None, np.nan]: with self.assertRaises(TypeError): - contrast = \ - processing.contrast_weighted_nearness(scene, - contrast_size=size) + contrast = pcode.contrast_weighted_nearness( + scene, contrast_size=size) for size in [8, 1, 0, -4]: with self.assertRaises(ValueError): contrast = \ - processing.contrast_weighted_nearness(scene, - contrast_size=size) + pcode.contrast_weighted_nearness( + scene, contrast_size=size) # working cases for size in [2, 3, 4, 5]: - contrast = \ - processing.contrast_weighted_nearness(scene, - contrast_size=size) + contrast = pcode.contrast_weighted_nearness(scene, + contrast_size=size) self.assertIsNotNone(contrast) self.assertFalse(sum(contrast.shape) == 0) self.assertTrue(len(contrast.shape) == 4) self.assertFalse(np.any(np.isnan(contrast))) - self.assertTrue(contrast.shape[3] == 1) - self.assertTrue(contrast.shape[2] == 4) - self.assertTrue(contrast.shape[0] > 0) - self.assertTrue(contrast.shape[1] > 0) + self.assertEqual(contrast.shape[3], 1) + self.assertEqual(contrast.shape[2], scene.shape[2]) + self.assertEqual(contrast.shape[0], scene.shape[0]) + self.assertEqual(contrast.shape[1], scene.shape[1]) def test_pcv(self): # working case rowid = 1 - my_scene = processing.scene(self.mydb, rowid=rowid) - # print("scene shape",my_scene.shape) + my_scene = pcode.scene(self.mydb, rowid=rowid) directions = self.mydb.viewing_directions - # print("directions",directions.shape) - my_pcv = processing.pcv(my_scene, directions) - # print("place code shape",my_pcv.shape) - + my_pcv = pcode.pcv(my_scene, directions) self.assertIsNotNone(my_pcv) self.assertFalse(sum(my_pcv.shape) == 0) self.assertTrue(len(my_pcv.shape) == 4) @@ -282,37 +235,37 @@ class TestCase(unittest.TestCase): # not working cases doesnt match with shape of place code testdirection = np.zeros((2, 4, 2)) with self.assertRaises(Exception): - my_pcv = processing.pcv(my_scene, testdirection) + my_pcv = pcode.pcv(my_scene, testdirection) # not working cases wrong last dimension testdirection = np.zeros((180, 360, 1)) with self.assertRaises(Exception): - my_pcv = processing.pcv(my_scene, testdirection) + my_pcv = pcode.pcv(my_scene, testdirection) # not working cases too many dimensions testdirection = np.zeros((180, 360, 2, 4)) with self.assertRaises(Exception): - my_pcv = processing.pcv(my_scene, testdirection) + my_pcv = pcode.pcv(my_scene, testdirection) # not working cases empty testdirection = np.zeros(()) with self.assertRaises(Exception): - my_pcv = processing.pcv(my_scene, testdirection) + my_pcv = pcode.pcv(my_scene, testdirection) # not working cases nans testdirection = np.zeros((180, 360, 2, 4)) testdirection[2, 3, 0] = np.nan with self.assertRaises(ValueError): - my_pcv = processing.pcv(my_scene, testdirection) + my_pcv = pcode.pcv(my_scene, testdirection) def test_apcv(self): # working case rowid = 1 - my_scene = processing.scene(self.mydb, rowid=rowid) + my_scene = pcode.scene(self.mydb, rowid=rowid) # print("scene shape",my_scene.shape) directions = self.mydb.viewing_directions # print("directions",directions.shape) - my_pcv = processing.apcv(my_scene, directions) + my_pcv = pcode.apcv(my_scene, directions) self.assertIsNotNone(my_pcv) self.assertFalse(sum(my_pcv.shape) == 0) @@ -326,42 +279,44 @@ class TestCase(unittest.TestCase): # not working cases doesnt match with shape of place code testdirection = np.zeros((2, 4, 2)) with self.assertRaises(Exception): - my_pcv = processing.apcv(my_scene, testdirection) + my_pcv = pcode.apcv(my_scene, testdirection) # not working cases wrong last dimension testdirection = np.zeros((180, 360, 1)) with self.assertRaises(Exception): - my_pcv = processing.apcv(my_scene, testdirection) + my_pcv = pcode.apcv(my_scene, testdirection) # not working cases too many dimensions testdirection = np.zeros((180, 360, 2, 4)) with self.assertRaises(Exception): - my_pcv = processing.apcv(my_scene, testdirection) + my_pcv = pcode.apcv(my_scene, testdirection) # not working cases empty testdirection = np.zeros(()) with self.assertRaises(Exception): - my_pcv = processing.apcv(my_scene, testdirection) + my_pcv = pcode.apcv(my_scene, testdirection) # not working cases nans testdirection = np.zeros((180, 360, 2, 4)) testdirection[2, 3, 0] = np.nan with self.assertRaises(ValueError): - my_pcv = processing.apcv(my_scene, testdirection) + my_pcv = pcode.apcv(my_scene, testdirection) def test_size(self): # not working cases: - scene = processing.scene(self.mydb, rowid=1) + scene = pcode.scene(self.mydb, rowid=1) for size in [8, 1, 0, -4]: with self.assertRaises(ValueError): - contrast = processing.michelson_contrast(scene, size=size) + contrast = pcode.michelson_contrast( + scene, size=size) for size in [9.4, 'g', None, np.nan]: with self.assertRaises(TypeError): - contrast = processing.michelson_contrast(scene, size=size) + contrast = pcode.michelson_contrast( + scene, size=size) # working cases for size in [2, 3, 4, 5]: - contrast = processing.michelson_contrast(scene, size=size) + contrast = pcode.michelson_contrast(scene, size=size) self.assertIsNotNone(contrast) self.assertFalse(sum(contrast.shape) == 0) self.assertTrue(len(contrast.shape) == 4) @@ -373,10 +328,10 @@ class TestCase(unittest.TestCase): def test_michelsoncontrast_scene(self): - scene = processing.scene(self.mydb, rowid=1) + scene = pcode.scene(self.mydb, rowid=1) # working cases - contrast = processing.michelson_contrast(scene) + contrast = pcode.michelson_contrast(scene) self.assertIsNotNone(contrast) self.assertFalse(sum(contrast.shape) == 0) self.assertTrue(len(contrast.shape) == 4) @@ -395,7 +350,7 @@ class TestCase(unittest.TestCase): scene4 = np.zeros((3, 4, 5, 0)) for s in [scene2, scene3, scene4]: with self.assertRaises(Exception) as cm: - contrast = processing.michelson_contrast(s,) + contrast = pcode.michelson_contrast(s,) print("wanted exception occured", cm.exception) diff --git a/navipy/rendering/__init__.py b/navipy/rendering/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/todo b/todo index 137d19c..b077191 100644 --- a/todo +++ b/todo @@ -1,23 +1,4 @@ -<<<<<<< HEAD ======= -0001: Remove DUPLICATE: -Remove DUPLICATE: is_numeric_array is in: - processing.__init__ - and comparing.__init__ - - use the one it processing.__init__ - -Remove DUPLICATE: check_scene is in: - processing.__init__ - and comparing.__init__ - -Move check_scene, is_numeric_array to: - processing.__init__ ------------------------------------------------------- -0002: Restructure processing: -Move function in processing/__init__ to processing/place_code.py -Move function optic_flow in processing/place_code.py to processing/motion_code.py - ------------------------------------------------------ 0003: Improve database In the init database I would like to use class properties instead of get/read @@ -54,6 +35,7 @@ Need to propagate the changes through all the code (see rendering / processing / ------------------------------------------------------ 0007: Fix test processing ->>>>>>> a85c0cc1d498234a17941f8c483c69983b367529 + + - Fix db in test function such that it work from any location. (probably need to add a module resources and function to load them) - Test are failing WHY??? -- GitLab