Skip to content

Commit cc1b175

Browse files
authored
Merge pull request #3387 from jsiirola/pprint-nonfinite-param
Support `Param.pprint()` for non-finite Params
2 parents dc72d1d + 5a3eea1 commit cc1b175

File tree

2 files changed

+69
-1
lines changed

2 files changed

+69
-1
lines changed

pyomo/core/base/param.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -894,8 +894,12 @@ def _pprint(self):
894894
dataGen = lambda k, v: [v._value]
895895
else:
896896
dataGen = lambda k, v: [v]
897+
if self.index_set().isfinite() or self._default_val is Param.NoValue:
898+
_len = len(self)
899+
else:
900+
_len = 'inf'
897901
headers = [
898-
("Size", len(self)),
902+
("Size", _len),
899903
("Index", self._index_set if self.is_indexed() else None),
900904
("Domain", self.domain.name),
901905
("Default", default),

pyomo/core/tests/unit/test_param.py

+64
Original file line numberDiff line numberDiff line change
@@ -1561,6 +1561,70 @@ def test_scalar_set_mutable_when_not_present(self):
15611561
m.p = 20
15621562
self.assertEqual(m.x_p.bounds, (0, 20))
15631563

1564+
def test_nonfinite_pprint(self):
1565+
m = ConcreteModel()
1566+
1567+
# Test from #3379
1568+
m.p = Param(Any, default=1)
1569+
self.assertEqual(m.p['foo'], 1)
1570+
OUT = StringIO()
1571+
m.p.pprint(OUT)
1572+
self.assertEqual(
1573+
OUT.getvalue(),
1574+
"p : Size=inf, Index=Any, Domain=Any, Default=1, Mutable=False\n"
1575+
" Key : Value\n",
1576+
)
1577+
1578+
# Other useful checks
1579+
m.q = Param(Any, default=1, initialize={1: 2, 'a': 3, 'bb': 4})
1580+
OUT = StringIO()
1581+
m.q.pprint(OUT)
1582+
self.assertEqual(
1583+
OUT.getvalue(),
1584+
"q : Size=inf, Index=Any, Domain=Any, Default=1, Mutable=False\n"
1585+
" Key : Value\n"
1586+
" 1 : 2\n"
1587+
" a : 3\n"
1588+
" bb : 4\n",
1589+
)
1590+
1591+
m.r = Param(Any, initialize={1: 2, 'a': 3, 'bb': 4})
1592+
OUT = StringIO()
1593+
m.r.pprint(OUT)
1594+
self.assertEqual(
1595+
OUT.getvalue(),
1596+
"r : Size=3, Index=Any, Domain=Any, Default=None, Mutable=False\n"
1597+
" Key : Value\n"
1598+
" 1 : 2\n"
1599+
" a : 3\n"
1600+
" bb : 4\n",
1601+
)
1602+
1603+
# Other useful (mutable) checks
1604+
m.q = Param(Any, default=1, mutable=True, initialize={1: 2, 'a': 3, 'bb': 4})
1605+
OUT = StringIO()
1606+
m.q.pprint(OUT)
1607+
self.assertEqual(
1608+
OUT.getvalue(),
1609+
"q : Size=inf, Index=Any, Domain=Any, Default=1, Mutable=True\n"
1610+
" Key : Value\n"
1611+
" 1 : 2\n"
1612+
" a : 3\n"
1613+
" bb : 4\n",
1614+
)
1615+
1616+
m.r = Param(Any, mutable=True, initialize={1: 2, 'a': 3, 'bb': 4})
1617+
OUT = StringIO()
1618+
m.r.pprint(OUT)
1619+
self.assertEqual(
1620+
OUT.getvalue(),
1621+
"r : Size=3, Index=Any, Domain=Any, Default=None, Mutable=True\n"
1622+
" Key : Value\n"
1623+
" 1 : 2\n"
1624+
" a : 3\n"
1625+
" bb : 4\n",
1626+
)
1627+
15641628

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

0 commit comments

Comments
 (0)