template<typename Candidate>
const std::remove_cvref_t<Candidate> &preparedExtension,
const mfem::Vector& surfaceDisplacement,
const mfem::Vector& surfaceDisplacementDirection,
const mfem::Vector& vacuumDisplacementDual,
mfem::Vector& vacuumDisplacement,
mfem::Vector& surfaceDisplacementDual
) {
{ preparedExtension.descriptor() } noexcept -> std::same_as<VacuumDeformationExtensionDescriptor>;
{ preparedExtension.surfaceDisplacementSize() } noexcept -> std::same_as<int>;
{ preparedExtension.vacuumDisplacementSize() } noexcept -> std::same_as<int>;
{ preparedExtension.scalarTrueDofCount() } noexcept -> std::same_as<int>;
{ preparedExtension.hasVacuumSupport(0) } -> std::same_as<bool>;
{ preparedExtension.buildVacuumDisplacement(surfaceDisplacement, vacuumDisplacement) } -> std::same_as<void>;
{ preparedExtension.applyJacobian(surfaceDisplacement, surfaceDisplacementDirection, vacuumDisplacement) } -> std::same_as<void>;
{ preparedExtension.applyJacobianTranspose(surfaceDisplacement, vacuumDisplacementDual, surfaceDisplacementDual) } -> std::same_as<void>;
{ preparedExtension.applyPullbackDerivative(surfaceDisplacement, surfaceDisplacementDirection, vacuumDisplacementDual, surfaceDisplacementDual) } -> std::same_as<void>;
}