From 14e3e1257179376367905321d9967c6e14f8349b Mon Sep 17 00:00:00 2001 From: Guillaume Raffy Date: Tue, 23 Feb 2021 13:01:52 +0000 Subject: [PATCH] fixed pep8 styling problems --- cluster_stats.py | 132 +++++++++++++++++++++++++---------------------- 1 file changed, 71 insertions(+), 61 deletions(-) diff --git a/cluster_stats.py b/cluster_stats.py index 03f4ec4..15a0289 100644 --- a/cluster_stats.py +++ b/cluster_stats.py @@ -1,5 +1,5 @@ # encoding: utf-8 -import sys +# import sys import os import re import datetime @@ -16,47 +16,51 @@ import matplotlib # https://matplotlib.org/tutorials/introductory/usage.html#what-is-a-backend r = os.system('python -c "import matplotlib.pyplot as plt;plt.figure()"') if r != 0: - matplotlib.use('Agg') # use Anti Grain Geometry backend for non-interactive rendering into pngs, svg, etc... + matplotlib.use('Agg') # use Anti Grain Geometry backend for non-interactive rendering into pngs, svg, etc... import matplotlib.pyplot as plt -#import matplotlib.pyplot as plt +# import matplotlib.pyplot as plt import matplotlib.dates import abc -from SimpaDbUtil import SqlDatabaseReader, SqlFile -from inventory import Inventory +# from SimpaDbUtil import SqlDatabaseReader, SqlFile +# from inventory import Inventory + def is_cluster_node_name(name): return re.match('^simpatix[0-9]+$', name) is not None or re.match('^physix[0-9]+$', name) is not None + def get_investment_over_time(time_value, price, purchase_time): - percent_decay_per_day = 0.0 # 1.0/(7.0*365.0) - f1 = (purchase_time-time_value)*percent_decay_per_day+1.0 - f2 = np.where( f1 < 0.0, 0.0, f1 ) - f3 = np.where( time_value < purchase_time, 0.0, f2 ) - + percent_decay_per_day = 0.0 # 1.0/(7.0*365.0) + f1 = (purchase_time - time_value) * percent_decay_per_day + 1.0 + f2 = np.where(f1 < 0.0, 0.0, f1) + f3 = np.where(time_value < purchase_time, 0.0, f2) + return f3 * price + def get_flops_over_time(inventory, time_value, computer_id, purchase_time): """ :param Inventory inventory: """ - return np.where( time_value < purchase_time, 0.0, inventory.get_computer_dflops(computer_id) ) + return np.where(time_value < purchase_time, 0.0, inventory.get_computer_dflops(computer_id)) + def get_flops_price_over_time(inventory, time_value): """ :param Inventory inventory: the inventory database """ - + rows = inventory.query("SELECT * FROM machines") def get_key(item): return item['time'] flops_prices = [] - + for row in rows: - (name, serial_number, affectation, machine_spec_id, command_id, price_ex_vat, pos_x, pos_y, pos_z, inv_number)=row + (name, serial_number, affectation, machine_spec_id, command_id, price_ex_vat, pos_x, pos_y, pos_z, inv_number) = row is_cluster_node = is_cluster_node_name(name) if is_cluster_node: purchase_date = inventory.get_machine_purchase_date(name) @@ -64,20 +68,20 @@ def get_flops_price_over_time(inventory, time_value): # print(name, price_ex_vat) purchase_time = matplotlib.dates.date2num(purchase_date.date()) computer_flops = inventory.get_computer_dflops(name) - flops_price = ( price_ex_vat-inventory.get_computer_options_price(name) ) / computer_flops + flops_price = (price_ex_vat - inventory.get_computer_options_price(name)) / computer_flops # print ( purchase_date, name, price_ex_vat, computer_flops, flops_price ) - flops_prices.append({'time':purchase_time, 'flops_price':flops_price, 'purchase_date':purchase_date}) - + flops_prices.append({'time': purchase_time, 'flops_price': flops_price, 'purchase_date': purchase_date}) + flops_prices = sorted(flops_prices, key=get_key) - - flops_price_over_time = np.where( True, 0.0, 0.0 ) + + flops_price_over_time = np.where(True, 0.0, 0.0) for item in flops_prices: # print(item) - flops_price_over_time = np.where( time_value < item['time'], flops_price_over_time, item['flops_price']) - - + flops_price_over_time = np.where(time_value < item['time'], flops_price_over_time, item['flops_price']) + return flops_price_over_time + def get_computer_value_over_time(inventory, computer_id, time_value, flops_price_over_time, purchase_time): # print('flops_price_over_time = ', flops_price_over_time) computer_flops = inventory.get_computer_dflops(computer_id) @@ -98,9 +102,9 @@ def get_computer_value_over_time(inventory, computer_id, time_value, flops_price # plt.legend(list(y_signals.keys())) # else: # colors = ['blue', 'orange', 'green', 'purple', 'yellow'] -# # emulating missing Axes.stackplot method +# # emulating missing Axes.stackplot method # y = np.row_stack(list(y_signals.itervalues())) -# # this call to 'cumsum' (cumulative sum), passing in your y data, +# # this call to 'cumsum' (cumulative sum), passing in your y data, # # is necessary to avoid having to manually order the datasets # y_stack = np.cumsum(y, axis=0) # a 3x10 array # for series_index in range(len(y_signals)): @@ -110,6 +114,8 @@ def get_computer_value_over_time(inventory, computer_id, time_value, flops_price # from_signal = y_stack[series_index-1,:] # ax.fill_between(x_signal, from_signal, y_stack[series_index,:], color=colors[series_index], lw=0.0, label=y_signals.keys()[series_index]) # plt.legend() + + def stackplot(ax, x_signal, y_signals): """ :param matplotlib.Axes ax: @@ -117,7 +123,7 @@ def stackplot(ax, x_signal, y_signals): :param dict(str,numpy.array) y_signals: """ if 'stackplot' in dir(ax): - ax.stackplot(x_signal, list(y_signals.values()) ) + ax.stackplot(x_signal, list(y_signals.values())) plt.legend(list(y_signals.keys())) else: # emulating missing Axes.stackplot method @@ -130,21 +136,22 @@ def stackplot(ax, x_signal, y_signals): if series_index == 0: from_signal = 0 else: - from_signal = y_stack[series_index-1,:] - ax.fill_between(x_signal, from_signal, y_stack[series_index,:], color=colors[series_index], lw=0.0) + from_signal = y_stack[series_index - 1, :] + ax.fill_between(x_signal, from_signal, y_stack[series_index, :], color=colors[series_index], lw=0.0) p = plt.Rectangle((0, 0), 0, 0, color=colors[series_index]) ax.add_patch(p) plt.legend(list(y_signals.keys())) + def draw_cluster_value_over_time_graph(inventory, from_date, to_date, graph_type): time_value = matplotlib.dates.drange(dstart=from_date, dend=to_date, delta=datetime.timedelta(days=1)) flops_price_over_time = get_flops_price_over_time(inventory, time_value) cluster_value = {} - + rows = inventory.query("SELECT * FROM machines") for row in rows: - (name, serial_number, affectation, machine_spec_id, command_id, price_ex_vat, pos_x, pos_y, pos_z, inv_number)=row + (name, serial_number, affectation, machine_spec_id, command_id, price_ex_vat, pos_x, pos_y, pos_z, inv_number) = row is_cluster_node = is_cluster_node_name(name) if is_cluster_node: purchase_date = inventory.get_machine_purchase_date(name) @@ -152,9 +159,9 @@ def draw_cluster_value_over_time_graph(inventory, from_date, to_date, graph_type # print(name, price_ex_vat) purchase_time = matplotlib.dates.date2num(purchase_date.date()) item_value_over_time = { - 'cluster_cost_over_time':get_investment_over_time(time_value, price_ex_vat, purchase_time), - 'cluster_value_over_time':get_computer_value_over_time(inventory, name, time_value, flops_price_over_time, purchase_time), - 'cluster_dp_gflops_over_time':get_flops_over_time(inventory, time_value, name, purchase_time)}[graph_type] + 'cluster_cost_over_time': get_investment_over_time(time_value, price_ex_vat, purchase_time), + 'cluster_value_over_time': get_computer_value_over_time(inventory, name, time_value, flops_price_over_time, purchase_time), + 'cluster_dp_gflops_over_time': get_flops_over_time(inventory, time_value, name, purchase_time)}[graph_type] for ownership in inventory.get_item_ownership(name): # print(ownership) # print(ownership['owner'], ownership['owner_ratio']) @@ -165,7 +172,7 @@ def draw_cluster_value_over_time_graph(inventory, from_date, to_date, graph_type if owner_dept in cluster_value.keys(): cluster_value[owner_dept] += item_value_over_time else: - cluster_value[owner_dept] = item_value_over_time # np.zeros_like(time_value) + cluster_value[owner_dept] = item_value_over_time # np.zeros_like(time_value) # print(purchase_date) # print(type(from_date)) @@ -175,17 +182,17 @@ def draw_cluster_value_over_time_graph(inventory, from_date, to_date, graph_type fig, ax = plt.subplots() ax.set_title(graph_type) - #for dept, cluster_value_for_dept in cluster_value.iteritems(): + # for dept, cluster_value_for_dept in cluster_value.iteritems(): # ax.plot(time_value, cluster_value_for_dept) - stackplot( ax, time_value, cluster_value) - + stackplot(ax, time_value, cluster_value) + plt.xlabel('time') - plt.ylabel( - {'cluster_cost_over_time':u'cluster investment (€)', - 'cluster_value_over_time':u'cluster value (€)', - 'cluster_dp_gflops_over_time':u'double prec gflops'}[graph_type]) - + plt.ylabel({ + 'cluster_cost_over_time': u'cluster investment (€)', + 'cluster_value_over_time': u'cluster value (€)', + 'cluster_dp_gflops_over_time': u'double prec gflops'}[graph_type]) + years = matplotlib.dates.YearLocator() # every year months = matplotlib.dates.MonthLocator() # every month yearsFmt = matplotlib.dates.DateFormatter('%Y') @@ -194,7 +201,7 @@ def draw_cluster_value_over_time_graph(inventory, from_date, to_date, graph_type ax.xaxis.set_major_locator(years) ax.xaxis.set_major_formatter(yearsFmt) ax.xaxis.set_minor_locator(months) - + datemin = datetime.date(from_date.year, 1, 1) datemax = datetime.date(to_date.year + 1, 1, 1) ax.set_xlim(datemin, datemax) @@ -203,18 +210,19 @@ def draw_cluster_value_over_time_graph(inventory, from_date, to_date, graph_type # axes up to make room for them # fig.autofmt_xdate() ax.grid(True) - - #plt.plot() + + # plt.plot() # plt.plot(X,S) return fig - + + def draw_dp_gflops_price_over_time_over_time_graph(inventory, from_date, to_date): """ :param Inventory inventory: the inventory database :param datetime from_time: :param datetime to_time: """ - + time_value = matplotlib.dates.drange(dstart=from_date, dend=to_date, delta=datetime.timedelta(days=1)) gflops_price_over_time = get_flops_price_over_time(inventory, time_value) * 1.0e9 fig, ax = plt.subplots() @@ -223,7 +231,7 @@ def draw_dp_gflops_price_over_time_over_time_graph(inventory, from_date, to_date ax.set_xlabel('time') ax.set_ylabel(u'double precision flops price (€/gflops)') ax.set_title('gflops_price_over_time') - + years = matplotlib.dates.YearLocator() # every year months = matplotlib.dates.MonthLocator() # every month yearsFmt = matplotlib.dates.DateFormatter('%Y') @@ -235,6 +243,7 @@ def draw_dp_gflops_price_over_time_over_time_graph(inventory, from_date, to_date ax.grid(True) return fig + def draw_age_pyramid_graph(inventory): """ :param Inventory inventory: the inventory database @@ -246,12 +255,12 @@ def draw_age_pyramid_graph(inventory): rows = inventory.query("SELECT * FROM machines") for row in rows: - (name, serial_number, affectation, machine_spec_id, command_id, price_ex_vat, pos_x, pos_y, pos_z, inv_number)=row + (name, serial_number, affectation, machine_spec_id, command_id, price_ex_vat, pos_x, pos_y, pos_z, inv_number) = row is_cluster_node = is_cluster_node_name(name) if is_cluster_node: purchase_date = inventory.get_machine_purchase_date(name) if purchase_date is not None: - purchase_time = matplotlib.dates.date2num(purchase_date.date()) + purchase_time = matplotlib.dates.date2num(purchase_date.date()) # noqa: F841 age = datetime.datetime.now() - purchase_date age_histogram[age.days / 365] += 1 # print(name, age) @@ -260,10 +269,10 @@ def draw_age_pyramid_graph(inventory): ax.bar(range(oldest_age), age_histogram) ax.set_xlabel('age (in years)') ax.set_xticks(range(oldest_age)) - + ax.set_ylabel(u'number of compute nodes') ax.set_title('compute_nodes_age_pyramid') - + # format the ticks ax.grid(True) return fig @@ -273,14 +282,14 @@ class IFigureHandler(object): """ specifies what to do with generated figures """ - + @abc.abstractmethod def on_figure_ended(self, fig): """ :param matplotlib.Figure fig: """ pass - + @abc.abstractmethod def on_finalize(self): """ @@ -288,44 +297,45 @@ class IFigureHandler(object): """ pass + class ScreenFigureHandler(IFigureHandler): """ displays figures on screen """ def __init__(self): pass - + def on_figure_ended(self, fig): pass - + def on_finalize(self): plt.show() + class SvgFigureHandler(IFigureHandler): """ saves figures as svg files """ - def __init__(self): - pass - + def __init__(self, out_svg_dir_path): """ :param str out_svg_dir_path: where to save the svg files """ self._out_svg_dir_path = out_svg_dir_path - + def on_figure_ended(self, fig): fig.savefig(self._out_svg_dir_path + '/' + fig.axes[0].get_title() + '.svg') - + def on_finalize(self): pass + def draw_graphs(inventory, from_time, to_time, figure_handler): """ :param Inventory inventory: the inventory database :param datetime from_time: :param datetime to_time: - :param IFigureHandler figure_handler: + :param IFigureHandler figure_handler: """ fig = draw_cluster_value_over_time_graph(inventory, from_time.date(), to_time.date(), 'cluster_value_over_time') figure_handler.on_figure_ended(fig)