From ec54e78b1d278733b3f9fcdc4ca5958369c0c17f Mon Sep 17 00:00:00 2001 From: "Olivier J.N. Bertrand" <olivier.bertrand@uni-bielefeld.de> Date: Tue, 21 Aug 2018 14:13:34 +0200 Subject: [PATCH] Add output for long calculation --- navipy/moving/agent.py | 47 +++++++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/navipy/moving/agent.py b/navipy/moving/agent.py index 86c1eb1..188a7aa 100644 --- a/navipy/moving/agent.py +++ b/navipy/moving/agent.py @@ -29,6 +29,7 @@ from multiprocessing import Queue, JoinableQueue, Process import inspect import navipy.moving.maths as navimomath from navipy.database import DataBaseLoad +import time version = float(nx.__version__) @@ -379,7 +380,9 @@ the agent motion, or def compute_velocities(self, ncpu=5, - timeout=1): + timeout=1, + filename=None, + blocksize=100): # Create a dataframe to store the velocities convention = self._brain.renderer.rotation_convention tuples_posvel = posorient_columns(convention) @@ -415,14 +418,30 @@ the agent motion, or # Wait for all of the tasks to finish # posorients_queue.join() - for _ in range(nx.number_of_nodes(self._graph)): + nline = 0 + prev_nline = nline + t_start = time.time() + nbnodes = nx.number_of_nodes(self._graph) + for _ in range(nbnodes): res = results_queue.get(timeout=timeout) self.velocities.loc[res.name, res.index] = res + if (nline-prev_nline) > blocksize: + t_elapse = time.time()-t_start + t_peritem = t_elapse/nline + remain = nbnodes-nline + print('Computed {} in {}'.format(nline, t_elapse)) + print('Remain {}, done in {}'.format(remain, remain*t_peritem)) + if filename is not None: + self.velocities.to_hdf(filename, key='velocities') + + nline += 1 return self.velocities.copy() def build_graph(self, ncpu=5, - timeout=1): + timeout=1, + filename=None, + blocksize=100): # Build a list of nodes results_edges = [] posorients_queue = JoinableQueue() @@ -450,11 +469,23 @@ the agent motion, or # Wait for all of the tasks to finish # posorients_queue.join() - + nline = 0 + prev_nline = nline + t_start = time.time() + nbnodes = nx.number_of_nodes(self._graph) for _ in range(nx.number_of_nodes(self._graph)): result = results_queue.get(timeout=timeout) results_edges.append((result[0].name, result[1].name)) + if (nline-prev_nline) > blocksize: + t_elapse = time.time()-t_start + t_peritem = t_elapse/nline + remain = nbnodes-nline + print('Computed {} in {}'.format(nline, t_elapse)) + print('Remain {}, done in {}'.format(remain, remain*t_peritem)) + if filename is not None: + np.save(filename, np.array(results_edges)) + nline += 1 # print(results_edges[-1]) self._graph.add_edges_from(results_edges) self.check_graph() @@ -510,10 +541,10 @@ the agent motion, or # [0] because one node of the attractor is enough # all other node of the attractor are connected to this one target = list(att['attractor'])[0] - attractors[att_i]['paths'] = \ - nx.shortest_path(self.graph, target=target) - attractors[att_i]['sources'] = \ - list(attractors[att_i]['paths'].keys()) + attractors[att_i]['paths'] = nx.shortest_path( + self.graph, target=target) + attractors[att_i]['sources'] = list( + attractors[att_i]['paths'].keys()) return attractors def catchment_area(self, attractors=None): -- GitLab