def value_to_constant(self, val, constant_type): if (abstract_utils.is_concrete(val) and isinstance(val.pyval, constant_type or object)): return val.pyval name = self.constant_name(constant_type) raise abstract_utils.ConversionError("%s is not of type %s" % (val, name))
def _print_as_expected_type(self, t: abstract.BaseValue, instance=None): """Print abstract value t as a pytd type.""" if t.is_late_annotation(): return t.expr elif isinstance(t, (abstract.Unknown, abstract.Unsolvable, class_mixin.Class, abstract.Union)): with t.vm.convert.pytd_convert.set_output_mode( t.vm.convert.pytd_convert.OutputMode.DETAILED): return self._pytd_print(t.get_instance_type(instance=instance)) elif abstract_utils.is_concrete(t): return re.sub(r"(\\n|\s)+", " ", t.str_of_constant(self._print_as_expected_type)) elif isinstance(t, abstract.AnnotationClass) or not t.cls: return t.name else: return "<instance of %s>" % self._print_as_expected_type(t.cls, t)