code: def check_all_bc(self, x, y, axis):
      deriv_shape = list(y.shape)
      del deriv_shape[axis]
      first_deriv = np.empty(deriv_shape)
      first_deriv.fill(2)
      second_deriv = np.empty(deriv_shape)
      second_deriv.fill(-1)
      bc_all = [
          "not-a-knot",
          "natural",
          "clamped",
          (1, first_deriv),
          (2, second_deriv),
      ]
      for bc in bc_all[:3]:
          S = CubicSpline(x, y, axis=axis, bc_type=bc)
          self.check_correctness(S, bc, bc)
  
      for bc_start in bc_all:
          for bc_end in bc_all:
              S = CubicSpline(
                  x, y, axis=axis, bc_type=(bc_start, bc_end)
              )
              self.check_correctness(S, bc_start, bc_end, tol=2e-14)
  
imports: import warnings
  import io
  import numpy
  from numpy.testing import assert_almost_equal, assert_array_equal, assert_array_almost_equal, assert_allclose, assert_equal, assert_
  from pytest import raises
  from scipy.interpolate import KroghInterpolator, krogh_interpolate, BarycentricInterpolator, barycentric_interpolate, approximate_taylor_polynomial, CubicHermiteSpline, pchip, PchipInterpolator, pchip_interpolate, Akima1DInterpolator, CubicSpline, make_interp_spline
label_desc: Use image node_id 2 for calling the TestCubicSpline obj's underlying member method code with example usage: obj.check_all_bc(x, y, axis) without return types