code: def inputColsValidation(self, value):
      actual_columns = len(value)
      if type(value[0]) == list:
          actual_columns = len(value[0])
  
      expected_columns = len(self.inputAnnotatorTypes)
  
      if len(self.optionalInputAnnotatorTypes) == 0:
          if actual_columns != expected_columns:
              raise TypeError(
                  f"setInputCols in {self.uid} expecting {expected_columns} columns. "
                  f"Provided column amount: {actual_columns}. "
                  f"Which should be columns from the following annotators: {self.inputAnnotatorTypes}"
              )
      else:
          expected_columns = expected_columns + len(
              self.optionalInputAnnotatorTypes
          )
          if not (
              actual_columns == len(self.inputAnnotatorTypes)
              or actual_columns == expected_columns
          ):
              raise TypeError(
                  f"setInputCols in {self.uid} expecting at least {len(self.inputAnnotatorTypes)} columns. "
                  f"Provided column amount: {actual_columns}. "
                  f"Which should be columns from at least the following annotators: {self.inputAnnotatorTypes}"
              )
  
file_path: spark-nlp/python/sparknlp/common/annotator_properties.py
imports: from pyspark.ml.param import TypeConverters, Params, Param
label_desc: Use image node_id 2 for calling the AnnotatorProperties obj's underlying member method code with example usage: obj.inputColsValidation(value) without return types