code: def data_categorical(self):
      a = self.to_data_frame(
          [
              ("col_A", self.make_categorical_3_series("col_A")),
              ("col_B", self.make_numeric_series("col_B")),
          ]
      )
      b = self.to_data_frame(
          [
              ("col_A", self.make_categorical_3_series("col_A")),
              ("col_B", self.make_numeric_series("col_B")),
          ]
      )
  
      expected = [
          (
              "col_A",
              pd.Series(
                  pd.Categorical.from_codes(
                      np.r_[
                          a.col_A.cat.codes.values,
                          b.col_A.cat.codes.values,
                      ],
                      ["C1", "C2", "C3"],
                  )
              ),
          ),
          ("col_B", np.r_[a.col_B.values, b.col_B.values]),
      ]
      expected_df = self.to_data_frame(expected)
      expected_df.index = pd.Index(a.index.tolist() + b.index.tolist())
  
      return (a, b), expected_df, does_not_raise()
  
imports: from collections import OrderedDict
  from contextlib import nullcontext
  import numpy
  from numpy.testing import assert_array_equal
  import pandas
  import pandas.testing
  import pytest
  from sksurv.testing import FixtureParameterFactory
  from sksurv.util import Surv, _PropertyAvailableIfDescriptor, property_available_if, safe_concat
label_desc: Use image node_id 1 for calling the ConcatCasesAxes0 obj's underlying member method code with example usage: obj.data_categorical() and returns: a,  b,  expected_df,  does_not_raise