public IntegrationResult integrate(Function integrand, StopCondition condition, List<Visualizer> visualizers) throws IntegrationFailedException {
int dimension = integrand.inputDimension();
ProductResult result = new ProductResult();
Visualizers.submitToList(visualizers, new Integrand(integrand));
Visualizers.submitToList(visualizers, new StartIntegration());
while (! condition.stop(result)) {
int[] nodes = getNodesForEvals(dimension, result.points * 2 + 1);
result.value = integrator.integrateWithNodes(integrand, nodes);