Skip to content

Commit 294367f

Browse files
committed
[FIX] Python 3 compatibility of gantt chart generator
1 parent 2e211f7 commit 294367f

File tree

1 file changed

+34
-28
lines changed

1 file changed

+34
-28
lines changed

nipype/utils/draw_gantt_chart.py

Lines changed: 34 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,18 @@
55
callback_log.log_nodes_cb()
66
"""
77
from __future__ import print_function, division, unicode_literals, absolute_import
8-
from builtins import str, range, open
9-
10-
# Py2 compat: http://python-future.org/compatible_idioms.html#collections-counter-and-ordereddict
11-
from future import standard_library
12-
standard_library.install_aliases()
13-
from collections import OrderedDict
148

159
# Import packages
10+
import sys
1611
import random
1712
import datetime
1813
import simplejson as json
1914
from dateutil import parser
15+
from builtins import str, range, open
16+
# Py2 compat: http://python-future.org/compatible_idioms.html#collections-counter-and-ordereddict
17+
from future import standard_library
18+
standard_library.install_aliases()
19+
from collections import OrderedDict
2020

2121
# Pandas
2222
try:
@@ -26,6 +26,8 @@
2626
'install the pandas package')
2727
pass
2828

29+
PY3 = sys.version_info[0] > 2
30+
2931
def create_event_dict(start_time, nodes_list):
3032
'''
3133
Function to generate a dictionary of event (start/finish) nodes
@@ -57,10 +59,10 @@ def create_event_dict(start_time, nodes_list):
5759
runtime_memory_gb = node.get('runtime_memory_gb', 0.0)
5860

5961
# Init and format event-based nodes
60-
node['estimated_threads'] = estimated_threads
61-
node['estimated_memory_gb'] = estimated_memory_gb
62-
node['runtime_threads'] = runtime_threads
63-
node['runtime_memory_gb'] = runtime_memory_gb
62+
node['estimated_threads'] = estimated_threads
63+
node['estimated_memory_gb'] = estimated_memory_gb
64+
node['runtime_threads'] = runtime_threads
65+
node['runtime_memory_gb'] = runtime_memory_gb
6466
start_node = node
6567
finish_node = copy.deepcopy(node)
6668
start_node['event'] = 'start'
@@ -71,7 +73,7 @@ def create_event_dict(start_time, nodes_list):
7173
finish_delta = (node['finish'] - start_time).total_seconds()
7274

7375
# Populate dictionary
74-
if events.has_key(start_delta) or events.has_key(finish_delta):
76+
if events.get(start_delta) or events.get(finish_delta):
7577
err_msg = 'Event logged twice or events started at exact same time!'
7678
raise KeyError(err_msg)
7779
events[start_delta] = start_node
@@ -186,22 +188,22 @@ def calculate_resource_timeseries(events, resource):
186188
all_res = 0.0
187189

188190
# Iterate through the events
189-
for tdelta, event in sorted(events.items()):
191+
for _, event in sorted(events.items()):
190192
if event['event'] == "start":
191193
if resource in event and event[resource] != 'Unknown':
192194
all_res += float(event[resource])
193-
current_time = event['start'];
195+
current_time = event['start']
194196
elif event['event'] == "finish":
195197
if resource in event and event[resource] != 'Unknown':
196198
all_res -= float(event[resource])
197-
current_time = event['finish'];
199+
current_time = event['finish']
198200
res[current_time] = all_res
199201

200202
# Formulate the pandas timeseries
201203
time_series = pd.Series(data=list(res.values()), index=list(res.keys()))
202204
# Downsample where there is only value-diff
203205
ts_diff = time_series.diff()
204-
time_series = time_series[ts_diff!=0]
206+
time_series = time_series[ts_diff != 0]
205207

206208
# Return the new time series
207209
return time_series
@@ -235,7 +237,7 @@ def draw_lines(start, total_duration, minute_scale, scale):
235237
result = ''
236238
next_line = 220
237239
next_time = start
238-
num_lines = ((total_duration // 60) // minute_scale) + 2
240+
num_lines = int(((total_duration // 60) // minute_scale) + 2)
239241

240242
# Iterate through the lines and create html line markers string
241243
for line in range(num_lines):
@@ -559,26 +561,30 @@ def generate_gantt_chart(logfile, cores, minute_scale=10,
559561
runtime_mem_ts = calculate_resource_timeseries(events, 'runtime_memory_gb')
560562
# Plot gantt chart
561563
resource_offset = 120 + 30*cores
562-
html_string += draw_resource_bar(start_node['start'], last_node['finish'], estimated_mem_ts,
563-
space_between_minutes, minute_scale, '#90BBD7', resource_offset*2+120, 'Memory')
564-
html_string += draw_resource_bar(start_node['start'], last_node['finish'], runtime_mem_ts,
565-
space_between_minutes, minute_scale, '#03969D', resource_offset*2+120, 'Memory')
564+
html_string += draw_resource_bar(
565+
start_node['start'], last_node['finish'], estimated_mem_ts,
566+
space_between_minutes, minute_scale, '#90BBD7', resource_offset*2+120, 'Memory')
567+
html_string += draw_resource_bar(
568+
start_node['start'], last_node['finish'], runtime_mem_ts,
569+
space_between_minutes, minute_scale, '#03969D', resource_offset*2+120, 'Memory')
566570

567571
# Get threads timeseries
568572
estimated_threads_ts = calculate_resource_timeseries(events, 'estimated_threads')
569573
runtime_threads_ts = calculate_resource_timeseries(events, 'runtime_threads')
570574
# Plot gantt chart
571-
html_string += draw_resource_bar(start_node['start'], last_node['finish'], estimated_threads_ts,
572-
space_between_minutes, minute_scale, '#90BBD7', resource_offset, 'Threads')
573-
html_string += draw_resource_bar(start_node['start'], last_node['finish'], runtime_threads_ts,
574-
space_between_minutes, minute_scale, '#03969D', resource_offset, 'Threads')
575+
html_string += draw_resource_bar(
576+
start_node['start'], last_node['finish'], estimated_threads_ts,
577+
space_between_minutes, minute_scale, '#90BBD7', resource_offset, 'Threads')
578+
html_string += draw_resource_bar(
579+
start_node['start'], last_node['finish'], runtime_threads_ts,
580+
space_between_minutes, minute_scale, '#03969D', resource_offset, 'Threads')
575581

576582
#finish html
577-
html_string+= '''
583+
html_string += '''
578584
</div>
579585
</body>'''
580586

581587
#save file
582-
html_file = open(logfile + '.html', 'wb')
583-
html_file.write(html_string)
584-
html_file.close()
588+
with open(logfile + '.html', 'w' if PY3 else 'wb') as html_file:
589+
html_file.write(html_string)
590+

0 commit comments

Comments
 (0)