docs: def give_dots_yield(R, r, r_, resolution=2*PI/1000, spins=50):
      '''Generate Spirograph dots without numpy using yield.
      '''
      def x(theta):
          return (R-r) * math.cos(theta) + r_*math.cos((R-r) / r * theta)
  
      def y(theta):
          return (R-r) * math.sin(theta) - r_*math.sin((R-r) / r * theta)
  
      theta = 0.0
      while theta < 2*PI*spins:
          yield (x(theta), y(theta))
          theta += resolution