Skip to content

Commit 8f98111

Browse files
Update meta object str, repr, and pprint implementations
1 parent 2348991 commit 8f98111

File tree

4 files changed

+36
-20
lines changed

4 files changed

+36
-20
lines changed

symbolic_pymc/meta.py

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -259,27 +259,31 @@ def __hash__(self):
259259
return hash((self.base, self.rands()))
260260

261261
def __str__(self):
262-
obj = getattr(self, "obj", None)
263-
if obj is None:
264-
res = self.__repr__()
262+
return self.__repr__(show_obj=False, _repr=str)
263+
264+
def __repr__(self, show_obj=True, _repr=meta_repr.repr):
265+
rands = self.rands()
266+
267+
if rands:
268+
args = _repr(self.rands())[1:-1]
265269
else:
266-
res = f"{self.__class__.__name__}({str(obj)})"
267-
return res
270+
args = ""
268271

269-
def __repr__(self):
270272
obj = getattr(self, "obj", None)
271-
args = meta_repr.repr(self.rands()).strip("()")
272-
if args:
273-
args += ", "
274-
args += f"obj={meta_repr.repr(obj)}"
273+
274+
if (show_obj and obj is not None) or not args:
275+
if args:
276+
args += ", "
277+
args += f"obj={_repr(obj)}"
278+
275279
return "{}({})".format(self.__class__.__name__, args)
276280

277281
def _repr_pretty_(self, p, cycle):
278282
if cycle:
279283
p.text(f"{self.__class__.__name__}(...)")
280284
else:
281285
with p.group(2, f"{self.__class__.__name__}(", ")"):
282-
p.breakable()
286+
p.breakable(sep="")
283287
idx = None
284288
if hasattr(self, "__all_props__"):
285289
for idx, (name, item) in enumerate(zip(self.__all_props__, self.rands())):

symbolic_pymc/tensorflow/meta.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,12 @@ def __str__(self):
345345
return f"{self.__class__.__name__}({self.obj.name})"
346346

347347
def _repr_pretty_(self, p, cycle):
348-
return p.text(f"{self.__class__.__name__}({self.obj.name})")
348+
if cycle:
349+
p.text(f"{self.__class__.__name__}(...)")
350+
else:
351+
with p.group(2, f"{self.__class__.__name__}(", ")"):
352+
p.breakable(sep="")
353+
p.text(self.obj.name)
349354

350355
def __eq__(self, other):
351356
if self is other:

symbolic_pymc/theano/meta.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,12 @@ def __str__(self):
212212
return f"{self.__class__.__name__}({self.obj})"
213213

214214
def _repr_pretty_(self, p, cycle):
215-
return p.text(f"{self.__class__.__name__}({self.obj})")
215+
if cycle:
216+
p.text(f"{self.__class__.__name__}(...)")
217+
else:
218+
with p.group(2, f"{self.__class__.__name__}(", ")"):
219+
p.breakable(sep="")
220+
p.text(getattr(self.obj, "name", str(self.obj)))
216221

217222

218223
class TheanoMetaElemwise(TheanoMetaOp):

tests/test_meta.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -116,16 +116,18 @@ def test_meta_str():
116116

117117
some_mt = SomeMetaSymbol()
118118

119-
assert repr(some_mt) == 'SomeMetaSymbol(1, 2, obj=None)'
119+
assert repr(some_mt) == 'SomeMetaSymbol(1, 2)'
120120
assert str(some_mt) == repr(some_mt)
121121

122122
some_mt = SomeMetaSymbol(SomeType(1, 2))
123123

124124
assert repr(some_mt) == 'SomeMetaSymbol(1, 2, obj=SomeType(1, 2))'
125-
assert str(some_mt) == 'SomeMetaSymbol(SomeType<1, 2>)'
125+
assert str(some_mt) == 'SomeMetaSymbol(1, 2)'
126126

127-
some_op_mt = SomeMetaOp(SomeOp())
127+
some_op_mt = SomeMetaOp()
128+
assert repr(some_op_mt) == 'SomeMetaOp(obj=None)'
128129

130+
some_op_mt = SomeMetaOp(SomeOp())
129131
assert repr(some_op_mt) == 'SomeMetaOp(obj=<SomeOp>)'
130132

131133

@@ -135,20 +137,20 @@ def test_meta_pretty():
135137

136138
some_mt = SomeMetaSymbol()
137139

138-
assert pretty_mod.pretty(some_mt) == 'SomeMetaSymbol( field1=1, field2=2)'
140+
assert pretty_mod.pretty(some_mt) == 'SomeMetaSymbol(field1=1, field2=2)'
139141

140142
meta_repr.print_obj = True
141143

142-
assert pretty_mod.pretty(some_mt) == 'SomeMetaSymbol( field1=1, field2=2)'
144+
assert pretty_mod.pretty(some_mt) == 'SomeMetaSymbol(field1=1, field2=2)'
143145

144146
some_mt = SomeMetaSymbol(SomeType(1, 2))
145147

146-
assert pretty_mod.pretty(some_mt) == 'SomeMetaSymbol( field1=1, field2=2, obj=SomeType(1, 2))'
148+
assert pretty_mod.pretty(some_mt) == 'SomeMetaSymbol(field1=1, field2=2, obj=SomeType(1, 2))'
147149

148150
meta_repr.print_obj = False
149151

150152
some_mt = SomeMetaSymbol(SomeType(1, 2))
151153
some_mt.field1 = SomeMetaSymbol(SomeType(3, 4))
152154
some_mt.field1.field2 = SomeMetaSymbol(SomeType(5, 6))
153155

154-
assert pretty_mod.pretty(some_mt) == 'SomeMetaSymbol(\n field1=SomeMetaSymbol( field1=1, field2=SomeMetaSymbol( field1=1, field2=2)),\n field2=2)'
156+
assert pretty_mod.pretty(some_mt) == 'SomeMetaSymbol(\n field1=SomeMetaSymbol(field1=1, field2=SomeMetaSymbol(field1=1, field2=2)),\n field2=2)'

0 commit comments

Comments
 (0)