diff --git a/syft/__init__.py b/syft/__init__.py
index a172d04425..39d8074ab4 100644
--- a/syft/__init__.py
+++ b/syft/__init__.py
@@ -6,7 +6,7 @@ from syft import test
 from syft.tensor import equal, TensorBase
 from syft.math import cumprod, cumsum, ceil, dot, matmul, addmm, addcmul
 from syft.math import addcdiv, addmv, addbmm, baddbmm, transpose
-from syft.math import unsqueeze, zeros, ones, rand, randn
+from syft.math import unsqueeze, zeros, ones, rand, randn, mm
 
 s = str(he)
 s += str(nn)
@@ -17,3 +17,4 @@ s += str(dot) + str(matmul) + str(addmm) + str(addcmul) + str(addcdiv)
 s += str(addmv) + str(addbmm) + str(baddbmm)
 s += str(transpose) + str(rand) + str(randn) + str(ones) + str(zeros)
 s += str(unsqueeze)
+s += str(mm)
diff --git a/syft/math.py b/syft/math.py
index 4969a9a256..99e36958f3 100644
--- a/syft/math.py
+++ b/syft/math.py
@@ -9,7 +9,7 @@ from .tensor import _ensure_tensorbase
 __all__ = [
     'cumprod', 'cumsum', 'ceil', 'dot', 'floor', 'matmul', 'addmm', 'addcmul',
     'addcdiv', 'addmv', 'addbmm', 'baddbmm', 'sigmoid', 'unsqueeze', 'tanh', 'relu',
-    'zeros', 'ones', 'rand', 'randn'
+    'zeros', 'ones', 'rand', 'randn', 'mm'
 ]
 
 
@@ -341,3 +341,23 @@ def unsqueeze(tensor1, dim):
         raise NotImplemented
     else:
         return TensorBase(np.expand_dims(tensor1.data, dim))
+
+
+def mm(tensor1, tensor2):
+    """
+    Performs a matrix multiplication of :attr:`tensor1` and :attr:`tensor2`.
+
+    If :attr:`tensor1` is a `n x m` Tensor, :attr:`tensor2` is a `m x p` Tensor,
+    output will be a `n x p` Tensor.
+
+    Args:
+        tensor1 (Tensor): First Tensor to be multiplied
+        tensor2 (Tensor): Second Tensor to be multiplied"""
+
+    _ensure_tensorbase(tensor1)
+    _ensure_tensorbase(tensor2)
+
+    if tensor1.encrypted or tensor2.encrypted:
+        return NotImplemented
+    else:
+        return TensorBase(np.array(np.matmul(tensor1.data, tensor2.data)))
diff --git a/syft/tensor.py b/syft/tensor.py
index 9117e74a13..7e4560fcf4 100644
--- a/syft/tensor.py
+++ b/syft/tensor.py
@@ -1067,11 +1067,13 @@ class TensorBase(object):
         else:
             if tensor.shape() == self.shape():
 
-                tensor2 = np.array([1 if x else 0 for x in np.equal(tensor.data.flatten(), self.data.flatten()).tolist()])
+                tensor2 = np.array([1 if x else 0 for x in np.equal(
+                    tensor.data.flatten(), self.data.flatten()).tolist()])
                 result = tensor2.reshape(self.data.shape)
                 return TensorBase(result)
             else:
-                raise ValueError('inconsistent dimensions {} and {}'.format(self.shape(), tensor.shape()))
+                raise ValueError('inconsistent dimensions {} and {}'.format(
+                    self.shape(), tensor.shape()))
 
     def ne_(self, tensor):
         """
@@ -1118,7 +1120,8 @@ class TensorBase(object):
         """Computes the histogram of a tensor and Returns it"""
         if self.encrypted:
             return NotImplemented
-        hist, edges = np.histogram(np.array(self.data), bins=bins, range=(min, max))
+        hist, edges = np.histogram(
+            np.array(self.data), bins=bins, range=(min, max))
         return TensorBase(hist)
 
     def scatter_(self, dim, index, src):
@@ -1136,19 +1139,22 @@ class TensorBase(object):
         if index.data.dtype != np.dtype('int_'):
             raise TypeError("The values of index must be integers")
         if self.data.ndim != index.data.ndim:
-            raise ValueError("Index should have the same number of dimensions as output")
+            raise ValueError(
+                "Index should have the same number of dimensions as output")
         if dim >= self.data.ndim or dim < -self.data.ndim:
             raise IndexError("dim is out of range")
         if dim < 0:
             # Not sure why scatter should accept dim < 0, but that is the behavior in PyTorch's scatter
             dim = self.data.ndim + dim
-        idx_xsection_shape = index.data.shape[:dim] + index.data.shape[dim + 1:]
+        idx_xsection_shape = index.data.shape[:dim] + \
+            index.data.shape[dim + 1:]
         self_xsection_shape = self.data.shape[:dim] + self.data.shape[dim + 1:]
         if idx_xsection_shape != self_xsection_shape:
             raise ValueError("Except for dimension " + str(dim) +
                              ", all dimensions of index and output should be the same size")
         if (index.data >= self.data.shape[dim]).any() or (index.data < 0).any():
-            raise IndexError("The values of index must be between 0 and (self.data.shape[dim] -1)")
+            raise IndexError(
+                "The values of index must be between 0 and (self.data.shape[dim] -1)")
 
         def make_slice(arr, dim, i):
             slc = [slice(None)] * arr.ndim
@@ -1165,7 +1171,8 @@ class TensorBase(object):
         if not np.isscalar(src):
             src = _ensure_tensorbase(src)
             if index.data.shape[dim] > src.data.shape[dim]:
-                raise IndexError("Dimension " + str(dim) + "of index can not be bigger than that of src ")
+                raise IndexError("Dimension " + str(dim) +
+                                 "of index can not be bigger than that of src ")
             src_shape = src.data.shape[:dim] + src.data.shape[dim + 1:]
             if idx_xsection_shape != src_shape:
                 raise ValueError("Except for dimension " +
@@ -1173,7 +1180,8 @@ class TensorBase(object):
             # src_idx is a NumPy advanced index for indexing of elements in the src
             src_idx = list(idx)
             src_idx.pop(dim)
-            src_idx.insert(dim, np.repeat(np.arange(index.data.shape[dim]), np.prod(idx_xsection_shape)))
+            src_idx.insert(dim, np.repeat(
+                np.arange(index.data.shape[dim]), np.prod(idx_xsection_shape)))
             self.data[idx] = src.data[src_idx]
 
         else:
@@ -1195,7 +1203,8 @@ class TensorBase(object):
         index = _ensure_tensorbase(index)
         if self.encrypted or index.encrypted:
             return NotImplemented
-        idx_xsection_shape = index.data.shape[:dim] + index.data.shape[dim + 1:]
+        idx_xsection_shape = index.data.shape[:dim] + \
+            index.data.shape[dim + 1:]
         self_xsection_shape = self.data.shape[:dim] + self.data.shape[dim + 1:]
         if idx_xsection_shape != self_xsection_shape:
             raise ValueError("Except for dimension " + str(dim) +
@@ -1281,7 +1290,8 @@ class TensorBase(object):
             return NotImplemented
         mask_self_iter = np.nditer([mask.data, self.data])
         source_iter = np.nditer(source.data)
-        out_flat = [s if m == 0 else source_iter.__next__().item() for m, s in mask_self_iter]
+        out_flat = [s if m == 0 else source_iter.__next__().item()
+                    for m, s in mask_self_iter]
         self.data = np.reshape(out_flat, self.data.shape)
         return self
 
@@ -1325,13 +1335,26 @@ class TensorBase(object):
         self.data = np.equal(self.data, _ensure_tensorbase(t).data)
         return self
 
+    def mm(self, tensor2):
+        """Performs a matrix multiplication of :attr:`tensor1` and :attr:`tensor2`.
+
+        If :attr:`tensor1` is a `n x m` Tensor, :attr:`tensor2` is a `m x p` Tensor,
+        output will be a `n x p` Tensor.
+
+        Args:
+            tensor1 (Tensor): First Tensor to be multiplied
+            tensor2 (Tensor): Second Tensor to be multiplied"""
+
+        return syft.mm(self, tensor2)
+
 
 def mv(tensormat, tensorvector):
     """ matrix and vector multiplication """
     if tensormat.encrypted or tensorvector.encrypted:
         raise NotImplemented
     elif not len(tensorvector.data.shape) == 1:
-        raise ValueError('Vector dimensions not correct {}'.format(tensorvector.data.shape))
+        raise ValueError('Vector dimensions not correct {}'.format(
+            tensorvector.data.shape))
     elif tensorvector.data.shape[0] != tensormat.data.shape[1]:
         raise ValueError('vector dimensions {} not  \
             compatible with matrix {} '.format(tensorvector.data.shape, tensormat.data.shape))
@@ -1352,6 +1375,7 @@ def masked_select(tensor, mask):
     tensor = _ensure_tensorbase(tensor)
     if tensor.encrypted or mask.encrypted:
         raise NotImplemented
-    mask_broadcasted, data_broadcasted = np.broadcast_arrays(mask.data, tensor.data)
+    mask_broadcasted, data_broadcasted = np.broadcast_arrays(
+        mask.data, tensor.data)
     indices = np.where(mask_broadcasted)
     return TensorBase(data_broadcasted[indices])

Implement Default mm Functionality for Base Tensor Type
**User Story A:** As a Data Scientist using Syft's Base Tensor type, we want to implement a default method for computing operations on a Tensor of arbitrary type. For this ticket to be complete, mm() should return a new tensor. For a reference on the operation this performs check out [PyTorch](http://pytorch.org/docs/master/tensors.html)'s documentation.

**Acceptance Criteria:**
- If the Base Tensor type's attribute "encrypted" is set to True, it should return a NotImplemented error.
- a unit test demonstrating the correct operation on the Base Tensor type implemented over int and float Tensors.
- inline documentation in the python code. For inspiration on inline documentation, please check out [PyTorch](http://pytorch.org/docs/master/tensors.html)'s documentation for this operator. 
diff --git a/tests/test_math.py b/tests/test_math.py
index 1d66568765..56fc48a1d3 100644
--- a/tests/test_math.py
+++ b/tests/test_math.py
@@ -207,3 +207,23 @@ class unsqueezeTests(unittest.TestCase):
             expected_shape.insert(i, 1)
 
             self.assertTrue(np.array_equal(out.data.shape, expected_shape))
+
+
+class mmtest(unittest.TestCase):
+    def testmm1d(self):
+        t1 = TensorBase(np.array([2, 3, 4]))
+        t2 = TensorBase(np.array([3, 4, 5]))
+        out = syft.mm(t1, t2)
+        self.assertTrue(np.alltrue(out.data == [38]))
+
+    def testmm2d(self):
+        t1 = TensorBase(np.array([[1, 2], [1, 2]]))
+        t2 = TensorBase(np.array([[2, 3], [2, 3]]))
+        out = syft.mm(t1, t2)
+        self.assertTrue(np.alltrue(out.data == [[6, 9], [6, 9]]))
+
+    def testmm3d(self):
+        t1 = TensorBase(np.array([[1, 2], [2, 3], [3, 4]]))
+        t2 = TensorBase(np.array([[1, 2, 3], [2, 3, 4]]))
+        out = syft.mm(t1, t2)
+        self.assertTrue(np.alltrue(out.data == [[5, 8, 11], [8, 13, 18], [11, 18, 25]]))
diff --git a/tests/test_tensor.py b/tests/test_tensor.py
index fe66a1ff28..363f04380d 100644
--- a/tests/test_tensor.py
+++ b/tests/test_tensor.py
@@ -1066,5 +1066,25 @@ class eqTests(unittest.TestCase):
         self.assertEqual(t1, [False, True, False, False, False])
 
 
+class mm_test(unittest.TestCase):
+    def testmm1d(self):
+        t1 = TensorBase(np.array([2, 3, 4]))
+        t2 = TensorBase(np.array([3, 4, 5]))
+        out = t1.mm(t2)
+        self.assertTrue(np.alltrue(out.data == [38]))
+
+    def testmm2d(self):
+        t1 = TensorBase(np.array([[1, 2], [1, 2]]))
+        t2 = TensorBase(np.array([[2, 3], [2, 3]]))
+        out = t1.mm(t2)
+        self.assertTrue(np.alltrue(out.data == [[6, 9], [6, 9]]))
+
+    def testmm3d(self):
+        t1 = TensorBase(np.array([[1, 2], [2, 3], [3, 4]]))
+        t2 = TensorBase(np.array([[1, 2, 3], [2, 3, 4]]))
+        out = t1.mm(t2)
+        self.assertTrue(np.alltrue(out.data == [[5, 8, 11], [8, 13, 18], [11, 18, 25]]))
+
+
 if __name__ == "__main__":
     unittest.main()

pip install -e .
parse_log_pytest
requirements.txt
line_profiler pytest pytest-flake8
apt-get update apt-get install -y musl-dev g++ libgmp3-dev libmpfr-dev ca-certificates libmpc-dev
3.6
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
args==0.1.0
attrs==22.2.0
certifi==2021.5.30
clint==0.5.1
flake8==5.0.4
importlib-metadata==4.2.0
iniconfig==1.1.1
joblib==1.1.1
line-profiler==4.1.3
mccabe==0.7.0
numpy==1.19.5
packaging==21.3
phe==1.5.0
pluggy==1.0.0
py==1.11.0
pycodestyle==2.9.1
pyflakes==2.5.0
pyparsing==3.1.4
pyRserve==1.0.4
pytest==7.0.1
pytest-flake8==1.1.1
scikit-learn==0.24.2
scipy==1.5.4
sklearn==0.0
-e git+https://github.com/OpenMined/PySyft.git@b0d646922b7529f5198dcc21fc856c7e9e598976#egg=syft
threadpoolctl==3.1.0
tomli==1.2.3
typing_extensions==4.1.1
zipp==3.6.0

name: PySyft
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - args==0.1.0
      - attrs==22.2.0
      - clint==0.5.1
      - flake8==5.0.4
      - importlib-metadata==4.2.0
      - iniconfig==1.1.1
      - joblib==1.1.1
      - line-profiler==4.1.3
      - mccabe==0.7.0
      - numpy==1.19.5
      - packaging==21.3
      - phe==1.5.0
      - pluggy==1.0.0
      - py==1.11.0
      - pycodestyle==2.9.1
      - pyflakes==2.5.0
      - pyparsing==3.1.4
      - pyrserve==1.0.4
      - pytest==7.0.1
      - pytest-flake8==1.1.1
      - scikit-learn==0.24.2
      - scipy==1.5.4
      - sklearn==0.0
      - threadpoolctl==3.1.0
      - tomli==1.2.3
      - typing-extensions==4.1.1
      - zipp==3.6.0
prefix: /opt/conda/envs/PySyft

tests/test_math.py::mmtest::testmm1d tests/test_math.py::mmtest::testmm2d tests/test_math.py::mmtest::testmm3d tests/test_tensor.py::mm_test::testmm1d tests/test_tensor.py::mm_test::testmm2d tests/test_tensor.py::mm_test::testmm3d
tests/test_math.py::ConvenienceTests::testOnes tests/test_math.py::ConvenienceTests::testRand tests/test_math.py::ConvenienceTests::testZeros tests/test_math.py::DotTests::testDotFloat tests/test_math.py::DotTests::testDotInt tests/test_math.py::CeilTests::testCeil tests/test_math.py::FloorTests::testFloor tests/test_math.py::CumsumTests::testCumsum tests/test_math.py::CumprodTests::testCumprod tests/test_math.py::SigmoidTests::testSigmoid tests/test_math.py::MatmulTests::testMatmul1DFloat tests/test_math.py::MatmulTests::testMatmul1DInt tests/test_math.py::MatmulTests::testMatmul2DFloat tests/test_math.py::MatmulTests::testMatmul2DIdentity tests/test_math.py::MatmulTests::testMatmul2DInt tests/test_math.py::admmTests::testaddmm1d tests/test_math.py::admmTests::testaddmm2d tests/test_math.py::addcmulTests::testaddcmul1d tests/test_math.py::addcmulTests::testaddcmul2d tests/test_math.py::addcdivTests::testaddcdiv1d tests/test_math.py::addcdivTests::testaddcdiv2d tests/test_math.py::addmv::testaddmv tests/test_math.py::addbmmTests::testaddbmm tests/test_math.py::baddbmmTests::testbaddbmm tests/test_math.py::transposeTests::testTranspose tests/test_math.py::unsqueezeTests::testUnsqueeze tests/test_tensor.py::DimTests::testAsView tests/test_tensor.py::DimTests::testDimOne tests/test_tensor.py::DimTests::testResize tests/test_tensor.py::DimTests::testResizeAs tests/test_tensor.py::DimTests::testSize tests/test_tensor.py::DimTests::testView tests/test_tensor.py::AddTests::testInplace tests/test_tensor.py::AddTests::testScalar tests/test_tensor.py::AddTests::testSimple tests/test_tensor.py::CeilTests::testCeil tests/test_tensor.py::CeilTests::testCeil_ tests/test_tensor.py::ZeroTests::testZero tests/test_tensor.py::FloorTests::testFloor_ tests/test_tensor.py::SubTests::testInplace tests/test_tensor.py::SubTests::testScalar tests/test_tensor.py::SubTests::testSimple tests/test_tensor.py::MaxTests::testAxis tests/test_tensor.py::MaxTests::testNoDim tests/test_tensor.py::MultTests::testInplace tests/test_tensor.py::MultTests::testScalar tests/test_tensor.py::MultTests::testSimple tests/test_tensor.py::DivTests::testInplace tests/test_tensor.py::DivTests::testScalar tests/test_tensor.py::DivTests::testSimple tests/test_tensor.py::AbsTests::testabs tests/test_tensor.py::AbsTests::testabs_ tests/test_tensor.py::ShapeTests::testShape tests/test_tensor.py::SqrtTests::testSqrt tests/test_tensor.py::SqrtTests::testSqrt_ tests/test_tensor.py::SumTests::testDimIsNotNoneInt tests/test_tensor.py::SumTests::testDimNoneInt tests/test_tensor.py::EqualTests::testEqOp tests/test_tensor.py::EqualTests::testEqual tests/test_tensor.py::EqualTests::testIneqOp tests/test_tensor.py::EqualTests::testNotEqual tests/test_tensor.py::IndexTests::testIndexing tests/test_tensor.py::sigmoidTests::testSigmoid tests/test_tensor.py::addmm::testaddmm1d tests/test_tensor.py::addmm::testaddmm2d tests/test_tensor.py::addmm::testaddmm_1d tests/test_tensor.py::addmm::testaddmm_2d tests/test_tensor.py::addcmulTests::testaddcmul1d tests/test_tensor.py::addcmulTests::testaddcmul2d tests/test_tensor.py::addcmulTests::testaddcmul_1d tests/test_tensor.py::addcmulTests::testaddcmul_2d tests/test_tensor.py::addcdivTests::testaddcdiv1d tests/test_tensor.py::addcdivTests::testaddcdiv2d tests/test_tensor.py::addcdivTests::testaddcdiv_1d tests/test_tensor.py::addcdivTests::testaddcdiv_2d tests/test_tensor.py::addmvTests::testaddmv tests/test_tensor.py::addmvTests::testaddmv_ tests/test_tensor.py::addbmmTests::testaddbmm tests/test_tensor.py::addbmmTests::testaddbmm_ tests/test_tensor.py::baddbmmTests::testbaddbmm tests/test_tensor.py::baddbmmTests::testbaddbmm_ tests/test_tensor.py::transposeTests::testT tests/test_tensor.py::transposeTests::testT_ tests/test_tensor.py::transposeTests::testTranspose tests/test_tensor.py::transposeTests::testTranspose_ tests/test_tensor.py::unsqueezeTests::testUnsqueeze tests/test_tensor.py::unsqueezeTests::testUnsqueeze_ tests/test_tensor.py::expTests::testexp tests/test_tensor.py::expTests::testexp_ tests/test_tensor.py::fracTests::testfrac tests/test_tensor.py::fracTests::testfrac_ tests/test_tensor.py::rsqrtTests::testrsqrt tests/test_tensor.py::rsqrtTests::testrsqrt_ tests/test_tensor.py::signTests::testsign tests/test_tensor.py::signTests::testsign_ tests/test_tensor.py::numpyTests::testnumpy tests/test_tensor.py::reciprocalTests::testreciprocal tests/test_tensor.py::reciprocalTests::testrsqrt_ tests/test_tensor.py::logTests::testLog tests/test_tensor.py::logTests::testLog1p tests/test_tensor.py::logTests::testLog1p_ tests/test_tensor.py::logTests::testLog_ tests/test_tensor.py::clampTests::testClampFloat tests/test_tensor.py::clampTests::testClampFloatInPlace tests/test_tensor.py::clampTests::testClampInt tests/test_tensor.py::clampTests::testClampIntInPlace tests/test_tensor.py::cloneTests::testClone tests/test_tensor.py::chunkTests::testChunk tests/test_tensor.py::chunkTests::testChunkSameSize tests/test_tensor.py::gtTests::testGtInPlaceWithNumber tests/test_tensor.py::gtTests::testGtInPlaceWithTensor tests/test_tensor.py::gtTests::testGtWithNumber tests/test_tensor.py::gtTests::testGtWithTensor tests/test_tensor.py::gtTests::testWithEncrypted tests/test_tensor.py::geTests::testGeInPlaceWithNumber tests/test_tensor.py::geTests::testGeInPlaceWithTensor tests/test_tensor.py::geTests::testGeWithNumber tests/test_tensor.py::geTests::testGeWithTensor tests/test_tensor.py::geTests::testWithEncrypted tests/test_tensor.py::ltTests::testLtInPlaceWithNumber tests/test_tensor.py::ltTests::testLtInPlaceWithTensor tests/test_tensor.py::ltTests::testLtWithNumber tests/test_tensor.py::ltTests::testLtWithTensor tests/test_tensor.py::ltTests::testWithEncrypted tests/test_tensor.py::leTests::testLeInPlaceWithNumber tests/test_tensor.py::leTests::testLeInPlaceWithTensor tests/test_tensor.py::leTests::testLeWithNumber tests/test_tensor.py::leTests::testLeWithTensor tests/test_tensor.py::leTests::testWithEncrypted tests/test_tensor.py::bernoulliTests::testBernoulli tests/test_tensor.py::bernoulliTests::testBernoulli_ tests/test_tensor.py::uniformTests::testUniform tests/test_tensor.py::uniformTests::testUniform_ tests/test_tensor.py::fillTests::testFill_ tests/test_tensor.py::topkTests::testTopK tests/test_tensor.py::tolistTests::testToList tests/test_tensor.py::traceTests::testTrace tests/test_tensor.py::roundTests::testRound tests/test_tensor.py::roundTests::testRound_ tests/test_tensor.py::repeatTests::testRepeat tests/test_tensor.py::powTests::testPow tests/test_tensor.py::powTests::testPow_ tests/test_tensor.py::prodTests::testProd tests/test_tensor.py::randomTests::testRandom_ tests/test_tensor.py::nonzeroTests::testNonZero tests/test_tensor.py::cumprodTest::testCumprod tests/test_tensor.py::cumprodTest::testCumprod_ tests/test_tensor.py::splitTests::testSplit tests/test_tensor.py::squeezeTests::testSqueeze tests/test_tensor.py::expandAsTests::testExpandAs tests/test_tensor.py::meanTests::testMean tests/test_tensor.py::notEqualTests::testNe tests/test_tensor.py::notEqualTests::testNe_ tests/test_tensor.py::index_selectTests::testIndex_select tests/test_tensor.py::gatherTests::testGatherNumerical1 tests/test_tensor.py::gatherTests::testGatherNumerical2 tests/test_tensor.py::scatterTests::testScatter_DimOutOfRange tests/test_tensor.py::scatterTests::testScatter_IndexOutOfRange tests/test_tensor.py::scatterTests::testScatter_IndexType tests/test_tensor.py::scatterTests::testScatter_Numerical0 tests/test_tensor.py::scatterTests::testScatter_Numerical1 tests/test_tensor.py::scatterTests::testScatter_Numerical2 tests/test_tensor.py::scatterTests::testScatter_Numerical3 tests/test_tensor.py::scatterTests::testScatter_Numerical4 tests/test_tensor.py::scatterTests::testScatter_Numerical5 tests/test_tensor.py::scatterTests::testScatter_Numerical6 tests/test_tensor.py::scatterTests::testScatter_index_src_dimension_mismatch tests/test_tensor.py::remainderTests::testRemainder tests/test_tensor.py::remainderTests::testRemainder_ tests/test_tensor.py::remainderTests::testRemainder_broadcasting tests/test_tensor.py::masked_scatter_Tests::testMasked_scatter_1 tests/test_tensor.py::masked_scatter_Tests::testMasked_scatter_braodcasting1 tests/test_tensor.py::masked_scatter_Tests::testMasked_scatter_braodcasting2 tests/test_tensor.py::masked_fill_Tests::testMasked_fill_ tests/test_tensor.py::masked_fill_Tests::testMasked_fill_broadcasting tests/test_tensor.py::masked_select_Tests::testMasked_select tests/test_tensor.py::masked_select_Tests::testMasked_select_broadcasting1 tests/test_tensor.py::masked_select_Tests::testMasked_select_broadcasting2 tests/test_tensor.py::masked_select_Tests::testTensorBase_Masked_select tests/test_tensor.py::eqTests::testEqInPlaceWithNumber tests/test_tensor.py::eqTests::testEqInPlaceWithTensor tests/test_tensor.py::eqTests::testEqWithNumber tests/test_tensor.py::eqTests::testEqWithTensor
syft/tensor.py syft/__init__.py syft/math.py
syft/tensor.py syft/__init__.py syft/math.py