code: def circle_pattern(pattern_radius,
                     circle_radius,
                     count,
                     center=[0.0, 0.0],
                     angle=None,
                     **kwargs):
      
      from .path import Path2D
  
      if angle is None:
          angles = np.linspace(0.0, np.pi * 2.0, count + 1)[:-1]
      elif isinstance(angle, float) or isinstance(angle, int):
          angles = np.linspace(0.0, angle, count)
      else:
          raise ValueError('angle must be float or int!')
  
      # centers of circles
      centers = np.column_stack((
          np.cos(angles), np.sin(angles))) * pattern_radius
  
      vert = []
      ents = []
      for circle_center in centers:
          # (3,3) center points of arc
          three = arc.to_threepoint(angles=[0, np.pi],
                                    center=circle_center,
                                    radius=circle_radius)
          # add a single circle entity
          ents.append(
              entities.Arc(
                  points=np.arange(3) + len(vert),
                  closed=True))
          # keep flat array by extend instead of append
          vert.extend(three)
  
      # translate vertices to pattern center
      vert = np.array(vert) + center
      pattern = Path2D(entities=ents,
                       vertices=vert,
                       **kwargs)
      return pattern
docs: Create a Path2D representing a circle pattern.
  
      Parameters
      ------------
      pattern_radius : float
        Radius of circle centers
      circle_radius : float
        The radius of each circle
      count : int
        Number of circles in the pattern
      center : (2,) float
        Center of pattern
      angle :  float
        If defined pattern will span this angle
        If None, pattern will be evenly spaced
  
      Returns
      -------------
      pattern : trimesh.path.Path2D
        Path containing circular pattern