Skip to content

Commit 66696b3

Browse files
committed
Add tests for native type set registration
1 parent 8977f97 commit 66696b3

File tree

1 file changed

+219
-0
lines changed

1 file changed

+219
-0
lines changed
+219
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,219 @@
1+
# ___________________________________________________________________________
2+
#
3+
# Pyomo: Python Optimization Modeling Objects
4+
# Copyright (c) 2008-2024
5+
# National Technology and Engineering Solutions of Sandia, LLC
6+
# Under the terms of Contract DE-NA0003525 with National Technology and
7+
# Engineering Solutions of Sandia, LLC, the U.S. Government retains certain
8+
# rights in this software.
9+
# This software is distributed under the 3-clause BSD License.
10+
# ___________________________________________________________________________
11+
12+
import pyomo.common.numeric_types as nt
13+
import pyomo.common.unittest as unittest
14+
15+
from pyomo.common.dependencies import numpy, numpy_available
16+
from pyomo.core.expr import LinearExpression
17+
from pyomo.environ import Var
18+
19+
_type_sets = (
20+
'native_types',
21+
'native_numeric_types',
22+
'native_logical_types',
23+
'native_integer_types',
24+
'native_complex_types',
25+
)
26+
27+
28+
class TestNativeTypes(unittest.TestCase):
29+
def setUp(self):
30+
bool(numpy_available)
31+
for s in _type_sets:
32+
setattr(self, s, set(getattr(nt, s)))
33+
getattr(nt, s).clear()
34+
35+
def tearDown(self):
36+
for s in _type_sets:
37+
getattr(nt, s).clear()
38+
getattr(nt, s).update(getattr(nt, s))
39+
40+
def test_check_if_native_type(self):
41+
self.assertEqual(nt.native_types, set())
42+
self.assertEqual(nt.native_logical_types, set())
43+
self.assertEqual(nt.native_numeric_types, set())
44+
self.assertEqual(nt.native_integer_types, set())
45+
self.assertEqual(nt.native_complex_types, set())
46+
47+
self.assertTrue(nt.check_if_native_type("a"))
48+
self.assertIn(str, nt.native_types)
49+
self.assertNotIn(str, nt.native_logical_types)
50+
self.assertNotIn(str, nt.native_numeric_types)
51+
self.assertNotIn(str, nt.native_integer_types)
52+
self.assertNotIn(str, nt.native_complex_types)
53+
54+
self.assertTrue(nt.check_if_native_type(1))
55+
self.assertIn(int, nt.native_types)
56+
self.assertNotIn(int, nt.native_logical_types)
57+
self.assertIn(int, nt.native_numeric_types)
58+
self.assertIn(int, nt.native_integer_types)
59+
self.assertNotIn(int, nt.native_complex_types)
60+
61+
self.assertTrue(nt.check_if_native_type(1.5))
62+
self.assertIn(float, nt.native_types)
63+
self.assertNotIn(float, nt.native_logical_types)
64+
self.assertIn(float, nt.native_numeric_types)
65+
self.assertNotIn(float, nt.native_integer_types)
66+
self.assertNotIn(float, nt.native_complex_types)
67+
68+
self.assertTrue(nt.check_if_native_type(True))
69+
self.assertIn(bool, nt.native_types)
70+
self.assertIn(bool, nt.native_logical_types)
71+
self.assertNotIn(bool, nt.native_numeric_types)
72+
self.assertNotIn(bool, nt.native_integer_types)
73+
self.assertNotIn(bool, nt.native_complex_types)
74+
75+
self.assertFalse(nt.check_if_native_type(slice(None, None, None)))
76+
self.assertNotIn(slice, nt.native_types)
77+
self.assertNotIn(slice, nt.native_logical_types)
78+
self.assertNotIn(slice, nt.native_numeric_types)
79+
self.assertNotIn(slice, nt.native_integer_types)
80+
self.assertNotIn(slice, nt.native_complex_types)
81+
82+
def test_check_if_logical_type(self):
83+
self.assertEqual(nt.native_types, set())
84+
self.assertEqual(nt.native_logical_types, set())
85+
self.assertEqual(nt.native_numeric_types, set())
86+
self.assertEqual(nt.native_integer_types, set())
87+
self.assertEqual(nt.native_complex_types, set())
88+
89+
self.assertFalse(nt.check_if_logical_type("a"))
90+
self.assertNotIn(str, nt.native_types)
91+
self.assertNotIn(str, nt.native_logical_types)
92+
self.assertNotIn(str, nt.native_numeric_types)
93+
self.assertNotIn(str, nt.native_integer_types)
94+
self.assertNotIn(str, nt.native_complex_types)
95+
96+
self.assertFalse(nt.check_if_logical_type("a"))
97+
98+
self.assertTrue(nt.check_if_logical_type(True))
99+
self.assertIn(bool, nt.native_types)
100+
self.assertIn(bool, nt.native_logical_types)
101+
self.assertNotIn(bool, nt.native_numeric_types)
102+
self.assertNotIn(bool, nt.native_integer_types)
103+
self.assertNotIn(bool, nt.native_complex_types)
104+
105+
self.assertTrue(nt.check_if_logical_type(True))
106+
107+
self.assertFalse(nt.check_if_logical_type(1))
108+
self.assertNotIn(int, nt.native_types)
109+
self.assertNotIn(int, nt.native_logical_types)
110+
self.assertNotIn(int, nt.native_numeric_types)
111+
self.assertNotIn(int, nt.native_integer_types)
112+
self.assertNotIn(int, nt.native_complex_types)
113+
114+
if numpy_available:
115+
self.assertTrue(nt.check_if_logical_type(numpy.bool_(1)))
116+
self.assertIn(numpy.bool_, nt.native_types)
117+
self.assertIn(numpy.bool_, nt.native_logical_types)
118+
self.assertNotIn(numpy.bool_, nt.native_numeric_types)
119+
self.assertNotIn(numpy.bool_, nt.native_integer_types)
120+
self.assertNotIn(numpy.bool_, nt.native_complex_types)
121+
122+
def test_check_if_numeric_type(self):
123+
self.assertEqual(nt.native_types, set())
124+
self.assertEqual(nt.native_logical_types, set())
125+
self.assertEqual(nt.native_numeric_types, set())
126+
self.assertEqual(nt.native_integer_types, set())
127+
self.assertEqual(nt.native_complex_types, set())
128+
129+
self.assertFalse(nt.check_if_numeric_type("a"))
130+
self.assertFalse(nt.check_if_numeric_type("a"))
131+
self.assertNotIn(str, nt.native_types)
132+
self.assertNotIn(str, nt.native_logical_types)
133+
self.assertNotIn(str, nt.native_numeric_types)
134+
self.assertNotIn(str, nt.native_integer_types)
135+
self.assertNotIn(str, nt.native_complex_types)
136+
137+
self.assertFalse(nt.check_if_numeric_type(True))
138+
self.assertFalse(nt.check_if_numeric_type(True))
139+
self.assertNotIn(bool, nt.native_types)
140+
self.assertNotIn(bool, nt.native_logical_types)
141+
self.assertNotIn(bool, nt.native_numeric_types)
142+
self.assertNotIn(bool, nt.native_integer_types)
143+
self.assertNotIn(bool, nt.native_complex_types)
144+
145+
self.assertTrue(nt.check_if_numeric_type(1))
146+
self.assertTrue(nt.check_if_numeric_type(1))
147+
self.assertIn(int, nt.native_types)
148+
self.assertNotIn(int, nt.native_logical_types)
149+
self.assertIn(int, nt.native_numeric_types)
150+
self.assertIn(int, nt.native_integer_types)
151+
self.assertNotIn(int, nt.native_complex_types)
152+
153+
self.assertTrue(nt.check_if_numeric_type(1.5))
154+
self.assertTrue(nt.check_if_numeric_type(1.5))
155+
self.assertIn(float, nt.native_types)
156+
self.assertNotIn(float, nt.native_logical_types)
157+
self.assertIn(float, nt.native_numeric_types)
158+
self.assertNotIn(float, nt.native_integer_types)
159+
self.assertNotIn(float, nt.native_complex_types)
160+
161+
self.assertFalse(nt.check_if_numeric_type(1j))
162+
self.assertIn(complex, nt.native_types)
163+
self.assertNotIn(complex, nt.native_logical_types)
164+
self.assertNotIn(complex, nt.native_numeric_types)
165+
self.assertNotIn(complex, nt.native_integer_types)
166+
self.assertIn(complex, nt.native_complex_types)
167+
168+
v = Var()
169+
v.construct()
170+
self.assertFalse(nt.check_if_numeric_type(v))
171+
self.assertNotIn(type(v), nt.native_types)
172+
self.assertNotIn(type(v), nt.native_logical_types)
173+
self.assertNotIn(type(v), nt.native_numeric_types)
174+
self.assertNotIn(type(v), nt.native_integer_types)
175+
self.assertNotIn(type(v), nt.native_complex_types)
176+
177+
e = LinearExpression([1])
178+
self.assertFalse(nt.check_if_numeric_type(e))
179+
self.assertNotIn(type(e), nt.native_types)
180+
self.assertNotIn(type(e), nt.native_logical_types)
181+
self.assertNotIn(type(e), nt.native_numeric_types)
182+
self.assertNotIn(type(e), nt.native_integer_types)
183+
self.assertNotIn(type(e), nt.native_complex_types)
184+
185+
if numpy_available:
186+
self.assertFalse(nt.check_if_numeric_type(numpy.bool_(1)))
187+
self.assertNotIn(numpy.bool_, nt.native_types)
188+
self.assertNotIn(numpy.bool_, nt.native_logical_types)
189+
self.assertNotIn(numpy.bool_, nt.native_numeric_types)
190+
self.assertNotIn(numpy.bool_, nt.native_integer_types)
191+
self.assertNotIn(numpy.bool_, nt.native_complex_types)
192+
193+
self.assertFalse(nt.check_if_numeric_type(numpy.array([1])))
194+
self.assertNotIn(numpy.ndarray, nt.native_types)
195+
self.assertNotIn(numpy.ndarray, nt.native_logical_types)
196+
self.assertNotIn(numpy.ndarray, nt.native_numeric_types)
197+
self.assertNotIn(numpy.ndarray, nt.native_integer_types)
198+
self.assertNotIn(numpy.ndarray, nt.native_complex_types)
199+
200+
self.assertTrue(nt.check_if_numeric_type(numpy.float64(1)))
201+
self.assertIn(numpy.float64, nt.native_types)
202+
self.assertNotIn(numpy.float64, nt.native_logical_types)
203+
self.assertIn(numpy.float64, nt.native_numeric_types)
204+
self.assertNotIn(numpy.float64, nt.native_integer_types)
205+
self.assertNotIn(numpy.float64, nt.native_complex_types)
206+
207+
self.assertTrue(nt.check_if_numeric_type(numpy.int64(1)))
208+
self.assertIn(numpy.int64, nt.native_types)
209+
self.assertNotIn(numpy.int64, nt.native_logical_types)
210+
self.assertIn(numpy.int64, nt.native_numeric_types)
211+
self.assertIn(numpy.int64, nt.native_integer_types)
212+
self.assertNotIn(numpy.int64, nt.native_complex_types)
213+
214+
self.assertFalse(nt.check_if_numeric_type(numpy.complex128(1)))
215+
self.assertIn(numpy.complex128, nt.native_types)
216+
self.assertNotIn(numpy.complex128, nt.native_logical_types)
217+
self.assertNotIn(numpy.complex128, nt.native_numeric_types)
218+
self.assertNotIn(numpy.complex128, nt.native_integer_types)
219+
self.assertIn(numpy.complex128, nt.native_complex_types)

0 commit comments

Comments
 (0)