template <typename T>
void ParseValue(const char* key, T* value) const {
std::istringstream is(GetValue(key));
- is >> *value;
- if (is.fail()) {
- LOG(FATAL) << "Wrong value format for field " << key;
+ if (is.str() == "inf") {
+ *value = std::numeric_limits<T>::infinity();
+ } else if (is.str() == "-inf") {
+ *value = -std::numeric_limits<T>::infinity();
+ } else {
+ is >> *value;
+ if (is.fail()) {
+ LOG(FATAL) << "Wrong value format for field " << key;
+ }
}
}
void Visit(const char* key, double* value) final { ParseValue(key, value); }
zz = tvm.ir.load_json(json_str)
tvm.ir.assert_structural_equal(zz, z, map_free_vars=True)
+def _test_infinity_value(value, dtype):
+ x = tvm.tir.const(value, dtype)
+ json_str = tvm.ir.save_json(x)
+ tvm.ir.assert_structural_equal(x, tvm.ir.load_json(json_str))
+
+def test_infinity_value():
+ _test_infinity_value(float("inf"), 'float64')
+ _test_infinity_value(float("-inf"), 'float64')
+ _test_infinity_value(float("inf"), 'float32')
+ _test_infinity_value(float("-inf"), 'float32')
def test_make_smap():
# save load json
test_make_sum()
test_pass_config()
test_dict()
+ test_infinity_value()