<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def applySettings(self, axisMin=None, axisMax=None, axisLimit=None):
 """Apply the specified settings to this axis. Set self.minValue, self.minValueSource, self.maxValue, self.maxValueSource, and self.axisLimit reasonably based on the parameters provided. Arguments: axisMin -- a finite number, or None to choose a round minimum limit that includes all of the data. axisMax -- a finite number, 'max' to use the maximum value contained in the data, or None to choose a round maximum limit that includes all of the data. axisLimit -- a finite number to use as an upper limit on maxValue, or None to impose no upper limit. """

        if axisMin is not None and not math.isnan(axisMin):
            self.minValueSource = 'min'
            self.minValue = self.checkFinite(axisMin, 'axis min')

        if axisMax == 'max':
            self.maxValueSource = 'extremum'
        elif axisMax is not None and not math.isnan(axisMax):
            self.maxValueSource = 'max'
            self.maxValue = self.checkFinite(axisMax, 'axis max')

        if axisLimit is None or math.isnan(axisLimit):
            self.axisLimit = None
        elif axisLimit < self.maxValue:
            self.maxValue = self.checkFinite(axisLimit, 'axis limit')
            self.maxValueSource = 'limit'
            # The limit has already been imposed, so there is no need to
            # remember it:
            self.axisLimit = None
        elif math.isinf(axisLimit):
            # It must be positive infinity, which is the same as no limit:
            self.axisLimit = None
        else:
            # We still need to remember axisLimit to avoid rounding top to
            # a value larger than axisLimit:
            self.axisLimit = axisLimit

        self.reconcileLimits()