class_docstr: Class for processing data without transforming encoded features.
  Encoded features - features after OneHot encoding operation, when one
  feature (with categorical values) can be represented as several boolean
  vectors
class_docstr_tok: ["Class","for","processing","data","without","transforming","encoded","features",".","Encoded","features","-","features","after","OneHot","encoding","operation",",","when","one","feature","(","with","categorical","values",")","can","be","represented","as","several","boolean","vectors"]
docstr: Method for checking which columns contain boolean data
  
  :param features: tabular data for check
  :return bool_ids: indices of boolean columns in table
  :return non_bool_ids: indices of non boolean columns in table
docstr_tok: ["Method","for","checking","which","columns","contain","boolean","data",":","param","features",":","tabular","data","for","check",":","return","bool_ids",":","indices","of","boolean","columns","in","table",":","return","non_bool_ids",":","indices","of","non","boolean","columns","in","table"]
code: def _reasonability_check(features):
      """
      Method for checking which columns contain boolean data
  
      :param features: tabular data for check
      :return bool_ids: indices of boolean columns in table
      :return non_bool_ids: indices of non boolean columns in table
      """
      # TODO perhaps there is a more effective way to do this
      source_shape = features.shape
  
      columns_amount = source_shape[1] if len(source_shape) > 1 else 1
  
      # Indices of boolean columns in features table
      bool_ids = []
      non_bool_ids = []
  
      # For every column in table make check
      for column_id in range(0, columns_amount):
          column = (
              features[:, column_id]
              if columns_amount > 1
              else features.copy()
          )
          if len(np.unique(column)) > 2:
              non_bool_ids.append(column_id)
          else:
              bool_ids.append(column_id)
  
      return bool_ids, non_bool_ids
  
imports: from abc import ABC, abstractmethod
  from copy import deepcopy
  from typing import Optional
  import numpy
  from golem.core.log import default_log
  from fedot.core.data.data import InputData, OutputData
  from fedot.core.operations.operation_parameters import OperationParameters
  from fedot.core.repository.dataset_types import DataTypesEnum
  from fedot.utilities.custom_errors import AbstractMethodNotImplementError
label_desc: Use image node_id 6 for calling the EncodedInvariantImplementation obj's underlying member method code with example usage: obj._reasonability_check(features) and returns: bool_ids,  non_bool_ids