diff --git a/doc/pyplots/annotate_transform.py b/doc/pyplots/annotate_transform.py index 1d39970e3f58..c3abd2369852 100644 --- a/doc/pyplots/annotate_transform.py +++ b/doc/pyplots/annotate_transform.py @@ -11,7 +11,7 @@ ax.set_ylim(-1, 1) xdata, ydata = 5, 0 -xdisplay, ydisplay = ax.transData.transform((xdata, ydata)) +xdisplay, ydisplay = ax.transData.transform_point((xdata, ydata)) bbox = dict(boxstyle="round", fc="0.8") arrowprops = dict( diff --git a/lib/matplotlib/backends/backend_pdf.py b/lib/matplotlib/backends/backend_pdf.py index 329cde787f92..da970286e0cb 100644 --- a/lib/matplotlib/backends/backend_pdf.py +++ b/lib/matplotlib/backends/backend_pdf.py @@ -1865,7 +1865,7 @@ def draw_tex(self, gc, x, y, s, prop, angle, ismath='TeX!', mtext=None): if elt[0] == 'font': self.file.output(elt[1], elt[2], Op.selectfont) elif elt[0] == 'text': - curx, cury = mytrans.transform((elt[1], elt[2])) + curx, cury = mytrans.transform_point((elt[1], elt[2])) self._setup_textpos(curx, cury, angle, oldx, oldy) oldx, oldy = curx, cury if len(elt[3]) == 1: diff --git a/lib/matplotlib/sankey.py b/lib/matplotlib/sankey.py index 653d6f377966..d915fa034ba8 100755 --- a/lib/matplotlib/sankey.py +++ b/lib/matplotlib/sankey.py @@ -728,7 +728,7 @@ def _get_angle(a, r): if prior is None: if rotation != 0: # By default, none of this is needed. angles = [_get_angle(angle, rotation) for angle in angles] - rotate = Affine2D().rotate_deg(rotation * 90).transform_point + rotate = Affine2D().rotate_deg(rotation * 90).transform_affine tips = rotate(tips) label_locations = rotate(label_locations) vertices = rotate(vertices) @@ -737,10 +737,10 @@ def _get_angle(a, r): rotation = (self.diagrams[prior].angles[connect[0]] - angles[connect[1]]) angles = [_get_angle(angle, rotation) for angle in angles] - rotate = Affine2D().rotate_deg(rotation * 90).transform_point + rotate = Affine2D().rotate_deg(rotation * 90).transform_affine tips = rotate(tips) offset = self.diagrams[prior].tips[connect[0]] - tips[connect[1]] - translate = Affine2D().translate(*offset).transform_point + translate = Affine2D().translate(*offset).transform_affine tips = translate(tips) label_locations = translate(rotate(label_locations)) vertices = translate(rotate(vertices)) diff --git a/src/py_converters.cpp b/src/py_converters.cpp index 81cbb1e849a9..a843911bd874 100644 --- a/src/py_converters.cpp +++ b/src/py_converters.cpp @@ -9,6 +9,47 @@ extern "C" { +static int convert_string_enum(PyObject *obj, const char *name, const char **names, int *values, int *result) +{ + PyObject *bytesobj; + char *str; + + if (obj == NULL || obj == Py_None) { + return 1; + } + + if (PyUnicode_Check(obj)) { + bytesobj = PyUnicode_AsASCIIString(obj); + if (bytesobj == NULL) { + return 0; + } + } else if (PyBytes_Check(obj)) { + Py_INCREF(obj); + bytesobj = obj; + } else { + PyErr_Format(PyExc_TypeError, "%s must be bytes or unicode", name); + return 0; + } + + str = PyBytes_AsString(bytesobj); + if (str == NULL) { + Py_DECREF(bytesobj); + return 0; + } + + for ( ; *names != NULL; names++, values++) { + if (strncmp(str, *names, 64) == 0) { + *result = *values; + Py_DECREF(bytesobj); + return 1; + } + } + + PyErr_Format(PyExc_ValueError, "invalid %s value", name); + Py_DECREF(bytesobj); + return 0; +} + int convert_from_method(PyObject *obj, const char *name, converter func, void *p) { PyObject *value; @@ -76,76 +117,29 @@ int convert_bool(PyObject *obj, void *p) int convert_cap(PyObject *capobj, void *capp) { - PyObject *capstrobj; - char *capstr; - agg::line_cap_e *cap = (agg::line_cap_e *)capp; - - if (capobj == NULL || capobj == Py_None) { - return 1; - } - - capstrobj = PyUnicode_AsASCIIString(capobj); - if (capstrobj == NULL) { - return 0; - } + const char *names[] = {"butt", "round", "projecting", NULL}; + int values[] = {agg::butt_cap, agg::round_cap, agg::square_cap}; + int result; - capstr = PyBytes_AsString(capstrobj); - if (capstr == NULL) { - Py_DECREF(capstrobj); + if (!convert_string_enum(capobj, "capstyle", names, values, &result)) { return 0; } - if (strncmp(capstr, "butt", 5) == 0) { - *cap = agg::butt_cap; - } else if (strncmp(capstr, "round", 6) == 0) { - *cap = agg::round_cap; - } else if (strncmp(capstr, "projecting", 11) == 0) { - *cap = agg::square_cap; - } else { - PyErr_Format(PyExc_ValueError, "Unknown capstyle '%s'", capstr); - Py_DECREF(capstrobj); - return 0; - } - - Py_DECREF(capstrobj); - + *(agg::line_cap_e *)capp = (agg::line_cap_e)result; return 1; } int convert_join(PyObject *joinobj, void *joinp) { - PyObject *joinstrobj; - char *joinstr; - agg::line_join_e *join = (agg::line_join_e *)joinp; - - if (joinobj == NULL || joinobj == Py_None) { - return 1; - } - - joinstrobj = PyUnicode_AsASCIIString(joinobj); - if (joinstrobj == NULL) { - return 0; - } + const char *names[] = {"miter", "round", "bevel", NULL}; + int values[] = {agg::miter_join_revert, agg::round_join, agg::bevel_join}; + int result; - joinstr = PyBytes_AsString(joinstrobj); - if (joinstr == NULL) { - Py_DECREF(joinstrobj); + if (!convert_string_enum(joinobj, "joinstyle", names, values, &result)) { return 0; } - if (strncmp(joinstr, "miter", 6) == 0) { - *join = agg::miter_join_revert; - } else if (strncmp(joinstr, "round", 6) == 0) { - *join = agg::round_join; - } else if (strncmp(joinstr, "bevel", 6) == 0) { - *join = agg::bevel_join; - } else { - PyErr_Format(PyExc_ValueError, "Unknown joinstyle '%s'", joinstr); - Py_DECREF(joinstrobj); - return 0; - } - - Py_DECREF(joinstrobj); + *(agg::line_join_e *)joinp = (agg::line_join_e)result; return 1; } @@ -497,32 +491,18 @@ int convert_gcagg(PyObject *pygc, void *gcp) int convert_offset_position(PyObject *obj, void *offsetp) { e_offset_position *offset = (e_offset_position *)offsetp; - PyObject *offsetstrobj; - char *offsetstr; + const char *names[] = {"data", NULL}; + int values[] = {OFFSET_POSITION_DATA}; + int result; *offset = OFFSET_POSITION_FIGURE; - if (obj == NULL || obj == Py_None) { - return 1; - } - - offsetstrobj = PyUnicode_AsASCIIString(obj); - if (offsetstrobj == NULL) { - return 0; - } - - offsetstr = PyBytes_AsString(offsetstrobj); - if (offsetstr == NULL) { - Py_DECREF(offsetstrobj); - return 0; - } - - if (strncmp(offsetstr, "data", 5) == 0) { - *offset = OFFSET_POSITION_DATA; + if (convert_string_enum(obj, "offset_position", names, values, &result)) { + *offset = (e_offset_position)result; + } else { + PyErr_Clear(); } - Py_DECREF(offsetstrobj); - return 1; } pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy