# Path: pyconll/conllable.py
# class Conllable(metaclass=abc.ABCMeta):
#     """
#     A Conllable mixin to indicate that the component can be converted into a
#     CoNLL representation.
#     """
#     @abc.abstractmethod
#     def conll(self) -> str:
#         """
#         Provides a conll representation of the component.
# 
#         Returns:
#             A string conll representation of the base component.
# 
#         Raises:
#             NotImplementedError: If the child class does not implement the
#                 method.
#         """
#         raise NotImplementedError("No implementation for conll")
# 
# Path: pyconll/exception.py
# class ParseError(ValueError):
#     """
#     Error that results from an improper value into a parsing routine.
#     """
# 
# class FormatError(ValueError):
#     """
#     Error that results from trying to format a CoNLL object to a string.
#     """


import functools
import math
from typing import Callable, ClassVar, Dict, Optional, Set, Tuple
from pyconll.conllable import Conllable
from pyconll.exception import ParseError, FormatError
            Usual copysign result unless sign indicator is 0.
        """
        if not b:
            return b

        return math.copysign(a, b)

    def __lt__(self, other):
        """
        Compares if other is less than the currently wrapped id.

        Args:
            other: The wrapped id to compare against.

        Returns:
            True if the current id is less than the id wrapped by other.
        """
        self_split_1, self_split_2 = _TokenIdComparer._split_token_id_as_range(
            self.token_id)
        other_split_1, other_split_2 = _TokenIdComparer._split_token_id_as_range(
            other.token_id)

        first_cmp = _TokenIdComparer._cmp_individual_ids(
            self_split_1, other_split_1)

        return first_cmp < 0 or (first_cmp == 0
                                 and _TokenIdComparer._cmp_individual_ids(
                                     self_split_2, other_split_2))



# Path: pyconll/conllable.py
# class Conllable(metaclass=abc.ABCMeta):
#     """
#     A Conllable mixin to indicate that the component can be converted into a
#     CoNLL representation.
#     """
#     @abc.abstractmethod
#     def conll(self) -> str:
#         """
#         Provides a conll representation of the component.
# 
#         Returns:
#             A string conll representation of the base component.
# 
#         Raises:
#             NotImplementedError: If the child class does not implement the
#                 method.
#         """
#         raise NotImplementedError("No implementation for conll")
# 
# Path: pyconll/exception.py
# class ParseError(ValueError):
#     """
#     Error that results from an improper value into a parsing routine.
#     """
# 
# class FormatError(ValueError):
#     """
#     Error that results from trying to format a CoNLL object to a string.
#     """


# Path: pyconll/unit/token.py
import functools
import math
from typing import Callable, ClassVar, Dict, Optional, Set, Tuple
from pyconll.conllable import Conllable
from pyconll.exception import ParseError, FormatError

            Usual copysign result unless sign indicator is 0.
        """
        if not b:
            return b

        return math.copysign(a, b)

    def __lt__(self, other):
        """
        Compares if other is less than the currently wrapped id.

        Args:
            other: The wrapped id to compare against.

        Returns:
            True if the current id is less than the id wrapped by other.
        """
        self_split_1, self_split_2 = _TokenIdComparer._split_token_id_as_range(
            self.token_id)
        other_split_1, other_split_2 = _TokenIdComparer._split_token_id_as_range(
            other.token_id)

        first_cmp = _TokenIdComparer._cmp_individual_ids(
            self_split_1, other_split_1)

        return first_cmp < 0 or (first_cmp == 0
                                 and _TokenIdComparer._cmp_individual_ids(
                                     self_split_2, other_split_2))



class Token(Conllable):