[Bug] Interval constraint miscalculates bounds
# 🐛 Bug

The transform function in the Interval constraint class allows tensors to be above the upper bound.


## To reproduce

** Code snippet to reproduce **

import torch
import gpytorch

lower_bound = 0.2
upper_bound = 0.3
tensor = torch.Tensor([lower_bound + upper_bound + 0.1])

constrained_tensor = gpytorch.constraints.Interval(lower_bound = lower_bound, upper_bound=upper_bound).transform(tensor)
assert constrained_tensor >= lower_bound, 'constrained tensor smaller than lower bound'
assert constrained_tensor <= upper_bound, 'constrained tensor larger than upper bound'

** Stack trace/error message **

AssertionError: constrained tensor larger than upper bound

## Expected Behavior

We would want the constrained tensor to be between lower bound and upper bound

## System information

**Please complete the following information:**
- <!-- GPyTorch Version (run `print(gpytorch.__version__)` --> 0.3.2
- <!-- PyTorch Version (run `print(torch.__version__)` --> 1.1.0
- <!-- Computer OS --> macOS

diff --git a/gpytorch/constraints/constraints.py b/gpytorch/constraints/constraints.py
index 30b5b4af..6853f15e 100644
--- a/gpytorch/constraints/constraints.py
+++ b/gpytorch/constraints/constraints.py
@@ -94,7 +94,7 @@ class Interval(Module):
                     "GreaterThan or LessThan instead."
                 )
 
-        transformed_tensor = (self._transform(tensor) * self.upper_bound) + self.lower_bound
+        transformed_tensor = (self._transform(tensor) * (self.upper_bound - self.lower_bound)) + self.lower_bound
 
         return transformed_tensor
 
@@ -115,7 +115,7 @@ class Interval(Module):
                     "GreaterThan or LessThan instead."
                 )
 
-        tensor = self._inv_transform((transformed_tensor - self.lower_bound) / self.upper_bound)
+        tensor = self._inv_transform((transformed_tensor - self.lower_bound) / (self.upper_bound - self.lower_bound))
 
         return tensor
 
diff --git a/test/constraints/test_constraints.py b/test/constraints/test_constraints.py
index 611c0ac4..1d47a5f5 100644
--- a/test/constraints/test_constraints.py
+++ b/test/constraints/test_constraints.py
@@ -28,7 +28,7 @@ class TestInterval(unittest.TestCase, BaseTestCase):
         v = torch.tensor(-3.0)
 
         value = constraint.transform(v)
-        actual_value = (5.0 * sigmoid(v)) + 1.0
+        actual_value = ((5.0 - 1.0) * sigmoid(v)) + 1.0
 
         self.assertAllClose(value, actual_value)
 
@@ -48,8 +48,8 @@ class TestInterval(unittest.TestCase, BaseTestCase):
 
         value = constraint.transform(v)
         actual_value = v.clone()
-        actual_value[0] = 3.0 * sigmoid(v[0]) + 1.0
-        actual_value[1] = 4.0 * sigmoid(v[1]) + 2.0
+        actual_value[0] = (3.0 - 1.0) * sigmoid(v[0]) + 1.0
+        actual_value[1] = (4.0 - 2.0) * sigmoid(v[1]) + 2.0
 
         self.assertAllClose(value, actual_value)
 
['test/constraints/test_constraints.py', 'gpytorch/constraints/constraints.py']