docs: def func(f, xmin, xmax, step=None):
      """Create sample points from function <f>, which must be a
      single-parameter function that returns a number (e.g., math.sin).
      Parameters <xmin> and <xmax> specify the first and last X values, and
      <step> specifies the sampling interval.
  
  >>> chart_data.func(math.sin, 0, math.pi * 4, math.pi / 2)
  [(0, 0.0), (1.5707963267948966, 1.0), (3.1415926535897931, 1.2246063538223773e-16), (4.7123889803846897, -1.0), (6.2831853071795862, -2.4492127076447545e-16), (7.8539816339744828, 1.0), (9.4247779607693793, 3.6738190614671318e-16), (10.995574287564276, -1.0)]
  
  """
  
      data = []
      x = xmin
      if not step:
          step = (xmax - xmin) / 100.0
      while x < xmax:
          data.append((x, f(x)))
          x += step
      return data