code: def _wrap_execute_data_source_usecols(usecols, op_cls):
      def _execute_data_source(ctx, op):  # pragma: no cover
          op_cls.execute(ctx, op)
          result = ctx[op.outputs[0].key]
          if not isinstance(usecols, list):
              if not isinstance(result, pd.Series):
                  raise RuntimeError(
                      f"Out data should be a Series, got {type(result)}"
                  )
          elif len(result.columns) > len(usecols):
              params = dict(
                  (k, getattr(op, k, None))
                  for k in op._keys_
                  if k not in op._no_copy_attrs_
              )
              raise RuntimeError(
                  f"have data more than expected, got {result.columns}, "
                  f"result {result}, op params {params}"
              )
  
      return _execute_data_source
  
imports: import os
  import tempfile
  import mars
  import numpy
  import pandas
  import pytest
  from ....None import dataframe
  from ....None import tensor
  from ....utils import pd_release_version
  from ...datasource.read_csv import DataFrameReadCSV
  from ...datasource.read_sql import DataFrameReadSQL
  from ...datasource.read_parquet import DataFrameReadParquet
label_desc: Use image node_id 19 for calling a global function with example usage: _wrap_execute_data_source_usecols(usecols, op_cls) and returns: _execute_data_source