| 1818 | "Side effects: updates stringzillas.__capabilities__ and __capabilities_str__."; |
| 1819 | |
| 1820 | static PyObject *module_reset_capabilities(PyObject *self, PyObject *args) { |
| 1821 | PyObject *caps_obj = NULL; |
| 1822 | if (!PyArg_ParseTuple(args, "O", &caps_obj)) return NULL; |
| 1823 | |
| 1824 | sz_capability_t caps = 0; |
| 1825 | if (parse_and_intersect_capabilities(caps_obj, &caps) != 0) return NULL; |
| 1826 | |
| 1827 | // Update the default hardware capabilities |
| 1828 | default_hardware_capabilities = caps; |
| 1829 | |
| 1830 | // Recompute and set module-level capability exports |
| 1831 | sz_cptr_t cap_strings[SZ_CAPABILITIES_COUNT]; |
| 1832 | sz_size_t cap_count = sz_capabilities_to_strings_implementation_(caps, cap_strings, SZ_CAPABILITIES_COUNT); |
| 1833 | PyObject *caps_tuple = PyTuple_New(cap_count); |
| 1834 | if (!caps_tuple) return NULL; |
| 1835 | for (sz_size_t i = 0; i < cap_count; i++) { |
| 1836 | PyObject *cap_str = PyUnicode_FromString(cap_strings[i]); |
| 1837 | if (!cap_str) { |
| 1838 | Py_DECREF(caps_tuple); |
| 1839 | return NULL; |
| 1840 | } |
| 1841 | PyTuple_SET_ITEM(caps_tuple, i, cap_str); |
| 1842 | } |
| 1843 | if (PyObject_SetAttrString(self, "__capabilities__", caps_tuple) != 0) { |
| 1844 | Py_DECREF(caps_tuple); |
| 1845 | return NULL; |
| 1846 | } |
| 1847 | Py_DECREF(caps_tuple); |
| 1848 | |
| 1849 | sz_cptr_t caps_str = sz_capabilities_to_string_implementation_(caps); |
| 1850 | if (PyObject_SetAttrString(self, "__capabilities_str__", PyUnicode_FromString(caps_str)) != 0) { return NULL; } |
| 1851 | |
| 1852 | Py_RETURN_NONE; |
| 1853 | } |
| 1854 | |
| 1855 | static char const doc_to_device[] = // |
| 1856 | "to_device(strs: sz.Strs) -> sz.Strs\n\n" |
nothing calls this directly
no test coverage detected
searching dependent graphs…