def isApplicable()

in src/main/scala/com/amazon/deequ/analyzers/applicability/Applicability.scala [180:214]


  def isApplicable(check: Check, schema: StructType): CheckApplicability = {

    val data = generateRandomData(schema, 1000)

    val namedMetrics = check.constraints
      .map { constraint => constraint.toString -> constraint }
      .map {
        case (name, nc: ConstraintDecorator) => name -> nc.inner
        case (name, c: Constraint) => name -> c
      }
      .collect { case (name, constraint: AnalysisBasedConstraint[_, _, _]) =>
        val metric = constraint.analyzer.calculate(data).value
        name -> metric
      }

    val constraintApplicabilities = check.constraints.zip(namedMetrics).map {
      case (constraint, (_, metric)) =>
        constraint -> metric.isSuccess
    }
    .toMap

    val failures = namedMetrics
      .flatMap { case (name, metric) =>

        metric match {
          // An exception occurred during analysis
          case Failure(exception: Exception) => Some(name -> exception)
          // Analysis done successfully and result metric is there
          case _ => None
        }
      }


    CheckApplicability(failures.isEmpty, failures, constraintApplicabilities)
  }