"""Module for Location class."""

from abc import ABCMeta, abstractmethod


class Location(metaclass=ABCMeta):
    """
    Abstract Location class.
    Any geometry entity should inherit from this class.
    """

    @abstractmethod
    def sample(self):
        """
        Abstract method for sampling a point from the location. To be
        implemented in the child class.
        """
        pass

    @abstractmethod
    def is_inside(self, point, check_border=False):
        """
        Abstract method for checking if a point is inside the location. To be
        implemented in the child class.

        :param torch.Tensor point: A tensor point to be checked.
        :param bool check_border: A boolean that determines whether the border
            of the location is considered checked to be considered inside or
            not. Defaults to ``False``.
        """
        pass
