Source code for yt.frontends.exodus_ii.util
import re
import string
from collections import OrderedDict
from itertools import takewhile
import numpy as np
[docs]
def get_num_pseudo_dims(coords):
D = coords.shape[1]
return sum(np.all(coords[:, dim] == 0.0) for dim in range(D))
[docs]
def sanitize_string(s):
_printable = {ord(_) for _ in string.printable}
return "".join(chr(_) for _ in takewhile(lambda a: a in _printable, s))
[docs]
def load_info_records(info_records):
info_records_parsed = [sanitize_string(line_chars) for line_chars in info_records]
return group_by_sections(info_records_parsed)
[docs]
def group_by_sections(info_records):
# 1. Split by top groupings
top_levels = get_top_levels(info_records)
# 2. Determine if in section by index number
grouped = OrderedDict()
for tidx, top_level in enumerate(top_levels):
grouped[top_level[1]] = []
try:
next_idx = top_levels[tidx + 1][0]
except IndexError:
next_idx = len(info_records) - 1
for idx in range(top_level[0], next_idx):
if idx == top_level[0]:
continue
grouped[top_level[1]].append(info_records[idx])
if "Version Info" in grouped.keys():
version_info = OrderedDict()
for line in grouped["Version Info"]:
split_line = line.split(":")
key = split_line[0]
val = ":".join(split_line[1:]).lstrip().rstrip()
if key != "":
version_info[key] = val
grouped["Version Info"] = version_info
return grouped
[docs]
def get_top_levels(info_records):
top_levels = []
for idx, line in enumerate(info_records):
pattern = re.compile(r"###[a-zA-Z\s]+")
if pattern.match(line):
clean_line = re.sub(r"[^\w\s]", "", line).lstrip().rstrip()
top_levels.append([idx, clean_line])
return top_levels