<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def startsafter(self, other):
 """ Test if this range starts after `other`. `other` may be either range or scalar. This only takes the lower end of the ranges into consideration. If the scalar or the lower end of the given range is greater than or equal to this range's lower end, ``True`` is returned. True True If ``other`` has the same start as the given :param other: Range or scalar to test. :return: ``True`` if this range starts after `other`, otherwise ``False`` :raises TypeError: If `other` is of the wrong type. """


        if self.is_valid_range(other):
            if self.lower == other.lower:
                return other.lower_inc or not self.lower_inc
            elif self.lower_inf:
                return False
            elif other.lower_inf:
                return True
            else:
                return self.lower > other.lower
        elif self.is_valid_scalar(other):
            return self.lower >= other
        else:
            raise TypeError(
                "Unsupported type to test for starts after '{}'".format(
                    other.__class__.__name__))