from sympy.printing.codeprinter import CodePrinter from sympy.core import symbols from sympy.core.symbol import Dummy from sympy.testing.pytest import raises def setup_test_printer(**kwargs): p = CodePrinter(settings=kwargs) p._not_supported = set() p._number_symbols = set() return p def test_print_Dummy(): d = Dummy('d') p = setup_test_printer() assert p._print_Dummy(d) == "d_%i" % d.dummy_index def test_print_Symbol(): x, y = symbols('x, if') p = setup_test_printer() assert p._print(x) == 'x' assert p._print(y) == 'if' p.reserved_words.update(['if']) assert p._print(y) == 'if_' p = setup_test_printer(error_on_reserved=True) p.reserved_words.update(['if']) with raises(ValueError): p._print(y) p = setup_test_printer(reserved_word_suffix='_He_Man') p.reserved_words.update(['if']) assert p._print(y) == 'if_He_Man' def test_issue_15791(): class CrashingCodePrinter(CodePrinter): def emptyPrinter(self, obj): raise NotImplementedError from sympy.matrices import ( MutableSparseMatrix, ImmutableSparseMatrix, ) c = CrashingCodePrinter() # these should not silently succeed with raises(NotImplementedError): c.doprint(ImmutableSparseMatrix(2, 2, {})) with raises(NotImplementedError): c.doprint(MutableSparseMatrix(2, 2, {}))