Skip to content

Commit

Permalink
Merge pull request Pyomo#3387 from jsiirola/pprint-nonfinite-param
Browse files Browse the repository at this point in the history
Support `Param.pprint()` for non-finite Params
  • Loading branch information
blnicho authored Oct 21, 2024
2 parents dc72d1d + 5a3eea1 commit cc1b175
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 1 deletion.
6 changes: 5 additions & 1 deletion pyomo/core/base/param.py
Original file line number Diff line number Diff line change
Expand Up @@ -894,8 +894,12 @@ def _pprint(self):
dataGen = lambda k, v: [v._value]
else:
dataGen = lambda k, v: [v]
if self.index_set().isfinite() or self._default_val is Param.NoValue:
_len = len(self)
else:
_len = 'inf'
headers = [
("Size", len(self)),
("Size", _len),
("Index", self._index_set if self.is_indexed() else None),
("Domain", self.domain.name),
("Default", default),
Expand Down
64 changes: 64 additions & 0 deletions pyomo/core/tests/unit/test_param.py
Original file line number Diff line number Diff line change
Expand Up @@ -1561,6 +1561,70 @@ def test_scalar_set_mutable_when_not_present(self):
m.p = 20
self.assertEqual(m.x_p.bounds, (0, 20))

def test_nonfinite_pprint(self):
m = ConcreteModel()

# Test from #3379
m.p = Param(Any, default=1)
self.assertEqual(m.p['foo'], 1)
OUT = StringIO()
m.p.pprint(OUT)
self.assertEqual(
OUT.getvalue(),
"p : Size=inf, Index=Any, Domain=Any, Default=1, Mutable=False\n"
" Key : Value\n",
)

# Other useful checks
m.q = Param(Any, default=1, initialize={1: 2, 'a': 3, 'bb': 4})
OUT = StringIO()
m.q.pprint(OUT)
self.assertEqual(
OUT.getvalue(),
"q : Size=inf, Index=Any, Domain=Any, Default=1, Mutable=False\n"
" Key : Value\n"
" 1 : 2\n"
" a : 3\n"
" bb : 4\n",
)

m.r = Param(Any, initialize={1: 2, 'a': 3, 'bb': 4})
OUT = StringIO()
m.r.pprint(OUT)
self.assertEqual(
OUT.getvalue(),
"r : Size=3, Index=Any, Domain=Any, Default=None, Mutable=False\n"
" Key : Value\n"
" 1 : 2\n"
" a : 3\n"
" bb : 4\n",
)

# Other useful (mutable) checks
m.q = Param(Any, default=1, mutable=True, initialize={1: 2, 'a': 3, 'bb': 4})
OUT = StringIO()
m.q.pprint(OUT)
self.assertEqual(
OUT.getvalue(),
"q : Size=inf, Index=Any, Domain=Any, Default=1, Mutable=True\n"
" Key : Value\n"
" 1 : 2\n"
" a : 3\n"
" bb : 4\n",
)

m.r = Param(Any, mutable=True, initialize={1: 2, 'a': 3, 'bb': 4})
OUT = StringIO()
m.r.pprint(OUT)
self.assertEqual(
OUT.getvalue(),
"r : Size=3, Index=Any, Domain=Any, Default=None, Mutable=True\n"
" Key : Value\n"
" 1 : 2\n"
" a : 3\n"
" bb : 4\n",
)


def createNonIndexedParamMethod(func, init_xy, new_xy, tol=1e-10):
def testMethod(self):
Expand Down

0 comments on commit cc1b175

Please sign in to comment.