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)
}