Source code for ivy.utils.stop_criteria
# Copyright (C) 2013 ETH Zurich, Institute for Astronomy
'''
Created on Mar 4, 2014
author: jakeret
'''
from __future__ import print_function, division, absolute_import, unicode_literals
from abc import ABCMeta, abstractmethod
from ivy.context import loopCtx
from ivy.utils.struct import WorkflowState
from ivy.exceptions.exceptions import InvalidAttributeException
[docs]class StopCriteria(object):
"""
Abstract implementation of stopping criteria
"""
__metaclass__ = ABCMeta
parent = None
[docs] @abstractmethod
def isStop(self):
pass
[docs]class RangeStopCriteria(StopCriteria):
"""
Stopping criteria which stops after `maxIter` iterations
"""
def __init__(self, maxIter):
if maxIter < 1:
raise InvalidAttributeException("Minimum iteration is 1")
self.maxIter = maxIter
[docs] def isStop(self):
ctx = loopCtx(self.parent)
if(ctx.iter >= self.maxIter):
ctx.stop()
return ctx.state == WorkflowState.STOP
[docs]class SimpleStopCriteria(RangeStopCriteria):
"""
Simple implementation of a stopping criteria. Stops after `one` iteration
"""
def __init__(self):
super(SimpleStopCriteria, self).__init__(maxIter = 1)