class_docstr: A series of possibly disconnected, possibly closed, line and curve
  segments.
  
  The underlying storage is made up of two parallel numpy arrays:
  
  - *vertices*: an (N, 2) float array of vertices
  - *codes*: an N-length `numpy.uint8` array of path codes, or None
  
  These two arrays always have the same length in the first
  dimension.  For example, to represent a cubic curve, you must
  provide three vertices and three `CURVE4` codes.
  
  The code types are:
  
  - `STOP`   :  1 vertex (ignored)
      A marker for the end of the entire path (currently not required and
      ignored)
  
  - `MOVETO` :  1 vertex
      Pick up the pen and move to the given vertex.
  
  - `LINETO` :  1 vertex
      Draw a line from the current position to the given vertex.
  
  - `CURVE3` :  1 control point, 1 endpoint
      Draw a quadratic Bézier curve from the current position, with the given
      control point, to the given end point.
  
  - `CURVE4` :  2 control points, 1 endpoint
      Draw a cubic Bézier curve from the current position, with the given
      control points, to the given end point.
  
  - `CLOSEPOLY` : 1 vertex (ignored)
      Draw a line segment to the start point of the current polyline.
  
  If *codes* is None, it is interpreted as a `MOVETO` followed by a series
  of `LINETO`.
  
  Users of Path objects should not access the vertices and codes arrays
  directly.  Instead, they should use `iter_segments` or `cleaned` to get the
  vertex/code pairs.  This helps, in particular, to consistently handle the
  case of *codes* being None.
  
  Some behavior of Path objects can be controlled by rcParams. See the
  rcParams whose keys start with 'path.'.
  
  .. note::
  
      The vertices and codes arrays should be treated as
      immutable -- there are a number of optimizations and assumptions
      made up front in the constructor that will not change when the
      data changes.
docstr: Return a `Path` representing a circle of a given radius and center.
  
  Parameters
  ----------
  center : (float, float), default: (0, 0)
      The center of the circle.
  radius : float, default: 1
      The radius of the circle.
  readonly : bool
      Whether the created path should have the "readonly" argument
      set when creating the Path instance.
  
  Notes
  -----
  The circle is approximated using 8 cubic Bézier curves, as described in
  
    Lancaster, Don.  `Approximating a Circle or an Ellipse Using Four
    Bezier Cubic Splines <https://www.tinaja.com/glib/ellipse4.pdf>`_.
docstr_tok: ["Return","a","`","Path","`","representing","a","circle","of","a","given","radius","and","center",".","Parameters","--","--","--","--","--","center",":","(","float",",","float",")",",","default",":","(","0",",","0",")","The","center","of","the","circle",".","radius",":","float",",","default",":","1","The","radius","of","the","circle",".","readonly",":","bool","Whether","the","created","path","should","have","the","``","readonly","''","argument","set","when","creating","the","Path","instance",".","Notes","--","--","-","The","circle","is","approximated","using","8","cubic","B\u00e9zier","curves",",","as","described","in","Lancaster",",","Don",".","`","Approximating","a","Circle","or","an","Ellipse","Using","Four","Bezier","Cubic","Splines","<","https",":","\/\/www.tinaja.com\/glib\/ellipse4.pdf",">","`","_","."]
code: def circle(cls, center=(0.0, 0.0), radius=1.0, readonly=False):
      """
      Return a `Path` representing a circle of a given radius and center.
  
      Parameters
      ----------
      center : (float, float), default: (0, 0)
          The center of the circle.
      radius : float, default: 1
          The radius of the circle.
      readonly : bool
          Whether the created path should have the "readonly" argument
          set when creating the Path instance.
  
      Notes
      -----
      The circle is approximated using 8 cubic Bézier curves, as described in
  
        Lancaster, Don.  `Approximating a Circle or an Ellipse Using Four
        Bezier Cubic Splines <https://www.tinaja.com/glib/ellipse4.pdf>`_.
      """
      MAGIC = 0.2652031
      SQRTHALF = np.sqrt(0.5)
      MAGIC45 = SQRTHALF * MAGIC
  
      vertices = np.array(
          [
              [0.0, -1.0],
              [MAGIC, -1.0],
              [SQRTHALF - MAGIC45, -SQRTHALF - MAGIC45],
              [SQRTHALF, -SQRTHALF],
              [SQRTHALF + MAGIC45, -SQRTHALF + MAGIC45],
              [1.0, -MAGIC],
              [1.0, 0.0],
              [1.0, MAGIC],
              [SQRTHALF + MAGIC45, SQRTHALF - MAGIC45],
              [SQRTHALF, SQRTHALF],
              [SQRTHALF - MAGIC45, SQRTHALF + MAGIC45],
              [MAGIC, 1.0],
              [0.0, 1.0],
              [-MAGIC, 1.0],
              [-SQRTHALF + MAGIC45, SQRTHALF + MAGIC45],
              [-SQRTHALF, SQRTHALF],
              [-SQRTHALF - MAGIC45, SQRTHALF - MAGIC45],
              [-1.0, MAGIC],
              [-1.0, 0.0],
              [-1.0, -MAGIC],
              [-SQRTHALF - MAGIC45, -SQRTHALF + MAGIC45],
              [-SQRTHALF, -SQRTHALF],
              [-SQRTHALF + MAGIC45, -SQRTHALF - MAGIC45],
              [-MAGIC, -1.0],
              [0.0, -1.0],
              [0.0, -1.0],
          ],
          dtype=float,
      )
  
      codes = [cls.CURVE4] * 26
      codes[0] = cls.MOVETO
      codes[-1] = cls.CLOSEPOLY
      return Path(vertices * radius + center, codes, readonly=readonly)
  
imports: import copy
  from functools import lru_cache
  from weakref import WeakValueDictionary
  import numpy
  import matplotlib
  from .None import _api, _path
  from .cbook import _to_unmasked_float_array, simple_linear_interpolation
  from .bezier import BezierSegment
label_desc: Use image node_id 38 for calling the Path obj's underlying member method code with example usage: obj.circle(cls, center, radius, readonly) and returns: Path