gh-141510: support frozendict's in the C decimal module (gh-145165)

This commit is contained in:
Sergey B Kirpichev 2026-02-27 01:02:39 +03:00 committed by GitHub
parent c2d3d6b0dd
commit f3a381e54f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 8 additions and 2 deletions

View file

@ -3963,15 +3963,21 @@ def test_flag_comparisons(self):
d.update(c.flags)
self.assertEqual(d, c.flags)
self.assertEqual(c.flags, d)
self.assertEqual(frozendict(d), c.flags)
self.assertEqual(c.flags, frozendict(d))
d[Inexact] = True
self.assertNotEqual(d, c.flags)
self.assertNotEqual(c.flags, d)
self.assertNotEqual(frozendict(d), c.flags)
self.assertNotEqual(c.flags, frozendict(d))
# Invalid SignalDict
d = {Inexact:False}
self.assertNotEqual(d, c.flags)
self.assertNotEqual(c.flags, d)
self.assertNotEqual(frozendict(d), c.flags)
self.assertNotEqual(c.flags, frozendict(d))
d = ["xyz"]
self.assertNotEqual(d, c.flags)

View file

@ -552,7 +552,7 @@ dict_as_flags(decimal_state *state, PyObject *val)
uint32_t flags = 0;
int x;
if (!PyDict_Check(val)) {
if (!PyAnyDict_Check(val)) {
PyErr_SetString(PyExc_TypeError,
"argument must be a signal dict");
return DEC_INVALID_SIGNALS;
@ -802,7 +802,7 @@ signaldict_richcompare(PyObject *v, PyObject *w, int op)
if (PyDecSignalDict_Check(state, w)) {
res = (SdFlags(v)==SdFlags(w)) ^ (op==Py_NE) ? Py_True : Py_False;
}
else if (PyDict_Check(w)) {
else if (PyAnyDict_Check(w)) {
uint32_t flags = dict_as_flags(state, w);
if (flags & DEC_ERRORS) {
if (flags & DEC_INVALID_SIGNALS) {