<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def FromString(cls, range_string):
 """Parse a version range string into a SemanticVersionRange Currently, the only possible range strings are: ^X.Y.Z - matches all versions with the same leading nonzero digit greater than or equal the given range. * - matches everything =X.Y.Z - matches only the exact version given Args: range_string (string):
 A string specifying the version range Returns: SemanticVersionRange: The resulting version range object Raises: ArgumentError: if the range string does not define a valid range. """


        disjuncts = None

        range_string = range_string.strip()

        if len(range_string) == 0:
            raise ArgumentError("You must pass a finite string to SemanticVersionRange.FromString",
                                range_string=range_string)

        # Check for *
        if len(range_string) == 1 and range_string[0] == '*':
            conj = (None, None, True, True)
            disjuncts = [[conj]]

        # Check for ^X.Y.Z
        elif range_string[0] == '^':
            ver = range_string[1:]

            try:
                ver = SemanticVersion.FromString(ver)
            except DataError as err:
                raise ArgumentError("Could not parse ^X.Y.Z version", parse_error=str(err), range_string=range_string)

            lower = ver
            upper = ver.inc_first_nonzero()

            conj = (lower, upper, True, False)
            disjuncts = [[conj]]

        elif range_string[0] == '=':
            ver = range_string[1:]

            try:
                ver = SemanticVersion.FromString(ver)
            except DataError as err:
                raise ArgumentError("Could not parse =X.Y.Z version", parse_error=str(err), range_string=range_string)

            conj = (ver, ver, True, True)
            disjuncts = [[conj]]

        if disjuncts is None:
            raise ArgumentError("Invalid range specification that could not be parsed", range_string=range_string)

        return SemanticVersionRange(disjuncts)