def __mul__(self, other):
        """
        Combiner for Multiplication operation.

        >>> Interval(1, 5) * Interval(-5, -4)
        Interval(low=-25, high=-4)
        >>> Interval(-1, 5) * Interval(-5, 3)
        Interval(low=-25, high=15)
        >>> Interval(1, 5) * Interval(3, 8)
        Interval(low=3, high=40)
        """

        def all_bounds():
            return itertools.chain(self.bounds(), other.bounds())

        if any(map(isinf, all_bounds())) and any(x == 0 for x in all_bounds()):
            return UNKNOWN_RANGE

        res = [v1 * v2 for v1, v2 in
               itertools.product(self.bounds(), other.bounds())]
        return Interval(min(res), max(res))
def __mul__ ( self , other ) : def all_bounds ( ) : return itertools . chain ( self . bounds ( ) , other . bounds ( ) ) if any ( map ( isinf , all_bounds ( ) ) ) and any ( x == 0 for x in all_bounds ( ) ) : return UNKNOWN_RANGE res = [ v1 * v2 for v1 , v2 in itertools . product ( self . bounds ( ) , other . bounds ( ) ) ] return Interval ( min ( res ) , max ( res ) )
Combiner for Multiplication operation.

        >>> Interval(1, 5) * Interval(-5, -4)
        Interval(low=-25, high=-4)
        >>> Interval(-1, 5) * Interval(-5, 3)
        Interval(low=-25, high=15)
        >>> Interval(1, 5) * Interval(3, 8)
        Interval(low=3, high=40)