There will be a short amount of downtime, for,, and, starting around approximately 10am CDT on Tuesday 18th June 2019. This is to enable access controls for GitLab Pages. More information can be found here.

Commit 54d6f740 authored by Jameson Graef Rollins's avatar Jameson Graef Rollins

new Struct.diff() method to return list of differences with another struct

returns list of (param, value, other_value) tuples.

command line interface added as well.
parent 832f5fc1
Pipeline #29291 passed with stages
in 55 seconds
......@@ -78,6 +78,8 @@ group.add_argument('--yaml', '-y', action='store_true',
help="print IFO as yaml to stdout and exit")
group.add_argument('--text', '-x', action='store_true',
help="print IFO as text table to stdout and exit")
group.add_argument('--diff', '-d', metavar='IFO',
help="show differences table between another IFO description")
group.add_argument('--no-plot', '-np', action='store_false', dest='plot',
help="supress plotting")
parser.add_argument('IFO', default=IFO,
......@@ -109,6 +111,18 @@ def main():
if args.text:
print(ifo.to_txt(), end='')
if args.diff:
fmt = '{:30} {:>20} {:>20}'
ifoo = load_ifo(args.diff)
diffs = ifo.diff(ifoo)
if diffs:
print(fmt.format('', args.IFO, args.diff))
for p in diffs:
k = str(p[0])
v = repr(p[1])
ov = repr(p[2])
print(fmt.format(k, v, ov))
if args.plot:
# FIXME: this silliness seems to be the only way to have
......@@ -196,6 +196,26 @@ class Struct(object):
except (AttributeError, TypeError):
yield k, v
def diff(self, other):
"""Return tuple of differences between target IFO.
Returns list of (key, value, other_value) tuples. Value is
None if key not present.
diffs = []
for k, ov in other.walk():
v = self.get(k, None)
if ov != v and ov is not v:
diffs.append((k, v, ov))
for k, v in self.walk():
ov = other.get(k, None)
if ov is None:
diffs.append((k, v, ov))
return diffs
def to_txt(self, path=None, fmt='0.6e', delimiter=': ', end=''):
"""Return text represenation of Struct, one element per line.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment