codecov[bot]: # [Codecov](https://codecov.io/gh/OpenMined/PySyft/pull/391?src=pr&el=h1) Report
> Merging [#391](https://codecov.io/gh/OpenMined/PySyft/pull/391?src=pr&el=desc) into [master](https://codecov.io/gh/OpenMined/PySyft/commit/f1f230c45e29abce37f83a2ed4606c8a6512d3fa?src=pr&el=desc) will **increase** coverage by `<.01%`.
> The diff coverage is `n/a`.

[![Impacted file tree graph](https://codecov.io/gh/OpenMined/PySyft/pull/391/graphs/tree.svg?height=150&width=650&src=pr&token=W0kQS1vaXB)](https://codecov.io/gh/OpenMined/PySyft/pull/391?src=pr&el=tree)

```diff
@@            Coverage Diff             @@
##           master     #391      +/-   ##
==========================================
+ Coverage   99.52%   99.52%   +<.01%     
==========================================
  Files           4        4              
  Lines        1682     1695      +13     
==========================================
+ Hits         1674     1687      +13     
  Misses          8        8
```


| [Impacted Files](https://codecov.io/gh/OpenMined/PySyft/pull/391?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [PySyft/tests/test\_tensor.py](https://codecov.io/gh/OpenMined/PySyft/pull/391?src=pr&el=tree#diff-UHlTeWZ0L3Rlc3RzL3Rlc3RfdGVuc29yLnB5) | `99.35% <0%> (ø)` | :arrow_up: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/OpenMined/PySyft/pull/391?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/OpenMined/PySyft/pull/391?src=pr&el=footer). Last update [f1f230c...f714e87](https://codecov.io/gh/OpenMined/PySyft/pull/391?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).

bharathgs: looks like few test are missing.
divyanshj16: Earlier I confused `split_size` variable to be the number of splits. But In the new commit, I changed this!
Actually, split size is chunk size.
If there is an array [0,1,2,3,4,5,6,7,8,9] then if `split_size` is 3 then the array will get divided into subarrays of size 3 and last one with size one as [[0,1,2],[3,4,5],[6,7,8],[9]].
In my earlier implementation the above array would have divided into 3 subarrays [[0,1,2,3],[4,5,6,7],[8,9]]. This has been resolved by this last commit.
bharathgs: your code does not produce the results that you mention in the comment above.
also, please try out the code before a PR.
divyanshj16: I'll do the changes! I did not understand your second point, `2. in place version of this function is not necessary, however, a split method is(in tensor module)`
bharathgs: change `split_` -> `split`
divyanshj16: There is already a `split` method in `tensor.py` at line 3041 and `SplitTests` are also there in `test_tensor.py` at line 977. Its tests are not exhaustive. Also, they are not implemented as PyTorch's implementation. 
This was the reason I had to name my test class as `SplitTests2` and my function as `split_`. 
My functions are working good in accordance with the PyTorch's implementation. See the image below.

![image](https://user-images.githubusercontent.com/16683472/32266444-76c3dc2e-bf0d-11e7-92f1-2dd50b7fd32f.png)

I'll add tests in test_math for the split function and will create a PR!
Should I  remove the earlier implementation(i.e implementation on the specified lines)?
bharathgs: ahh, now I see, I missed that. yes remove the earlier implementation
divyanshj16: Naming conventions are not specific as `axis`(numpy's) and `dim`(pytorch's) are interchangeably used in the whole code. What should I use?
divyanshj16: I have used `axis` for naming the axis of the tensor. However, we should raise an issue to make it consistent.
diff --git a/syft/math.py b/syft/math.py
index e880c85ed9..4d395a6a0d 100644
--- a/syft/math.py
+++ b/syft/math.py
@@ -968,3 +968,43 @@ def zeros(dim):
         Output Tensor
     """
     return TensorBase(np.zeros(dim))
+
+
+def split(tensor, split_size, axis=0):
+    """
+    Splits the tensor into multiple equally sized chunks (if possible).
+
+    Last chunk will be smaller if the tensor size along a given axis
+    is not divisible by `split_size`.
+
+    Returns a list of the split tensors
+
+    Parameters
+    ----------
+    tensor: TensorBase
+        array to be divided into sub-arrays.
+
+    split_size: int
+        size of single chunk
+
+    axis: int, optional
+        The axis along which to split, default is 0.
+
+    Returns
+    -------
+    list: list of divided arrays
+    """
+    if axis < 0:
+        axis += len(tensor.shape())
+
+    length_along_axis = tensor.shape()[axis]
+
+    # calculate number of splits!
+    num_splits = (length_along_axis + split_size - 1) // split_size
+
+    # make array to pass to numpy array_split function
+    split_according = [split_size * i for i in range(1, num_splits)]
+
+    list_ = np.array_split(tensor.data, split_according, axis)
+
+    return list(map(lambda x: TensorBase(x), list_))
diff --git a/syft/tensor.py b/syft/tensor.py
index f774b294e1..89f23c3b05 100644
--- a/syft/tensor.py
+++ b/syft/tensor.py
@@ -3038,29 +3038,6 @@ class TensorBase(object):
         else:
             return self.data.shape
 
-    def split(self, split_size, dim=0):
-        """
-        Returns tuple of tensors of equally sized tensor/chunks (if possible)
-
-        Parameters
-        ----------
-        split_size:
-
-        dim:
-
-        Returns
-        -------
-        Tuple of Tensors
-        """
-        if self.encrypted:
-            return NotImplemented
-        splits = np.array_split(self.data, split_size, axis=0)
-        tensors = list()
-        for s in splits:
-            tensors.append(TensorBase(s))
-        tensors_tuple = tuple(tensors)
-        return tensors_tuple
-
     def stride(self, dim=None):
         """
         Returns the jump necessary to go from one element to the next one in the specified dimension dim.
@@ -3601,3 +3578,30 @@ class TensorBase(object):
 
         self.data.fill(0)
         return self
+
+    def split(self, split_size, axis=0):
+        """
+        Splits the tensor into multiple equally sized chunks (if possible).
+
+        Last chunk will be smaller if the tensor size along a given axis
+        is not divisible by `split_size`.
+
+        Returns a list of the split tensors
+
+        Parameters
+        ----------
+
+        split_size: int
+            size of single chunk
+
+        axis: int, optional
+            The axis along which to split, default is 0.
+
+        Returns
+        -------
+        list: list of divided arrays
+        """
+        if self.encrypted:
+            return NotImplemented
+
+        return syft.math.split(self, split_size, axis)

Implement Default split Functionality for Base Tensor Type.
<!-- Please make sure that you review this: https://github.com/OpenMined/Docs/blob/master/contributing/guidelines.md  -->
<!-- If you are looking to file a bug make sure to look at the .github/BUG_ISSUE_TEMPLATE.md -->


#### User story: 
As a Data Scientist using Syft's Base Tensor type, I want to leverage a default method for computing operations on a Tensor of arbitrary type. For this ticket to be complete `split` should return a new tensor. For a reference on the operation these perform check out [PyTorch's](http://pytorch.org/docs/master/torch.html#torch.split) documentation.

<!-- Provide a detailed explaination about the proposed feature, you can draw inspiration from something like this: 
https://github.com/OpenMined/PySyft/issues/227 or https://github.com/OpenMined/PySyft/issues/12 -->

#### Acceptance Criteria: 

<!-- Provide an outline af all the things that needs to be addressed in order to close this Issue,
be as descriptive as possible -->
  - [x] If the Base Tensor type's attribute "encrypted" is set to True, it should return a NotImplemented error.
- [ ] corresponding unit tests demonstrating the correct operation on the Base Tensor type implemented over int and float Tensors.
 - [ ] inline documentation as described over [here](https://github.com/OpenMined/PySyft/blob/85bc68e81a2f4bfc0f0bf6c4252b88d6d7b54004/syft/math.py#L5). 


<!-- Thanks for your contributions! -->

diff --git a/tests/test_math.py b/tests/test_math.py
index 83b590f47b..09aad0a9f7 100644
--- a/tests/test_math.py
+++ b/tests/test_math.py
@@ -427,3 +427,17 @@ class MultinomialTests(unittest.TestCase):
         t2 = syft.math.multinomial(t1, len(t1))
         self.assertTupleEqual((len(t1),), t2.shape())
         self.assertTrue(np.all(t2.data >= 0) and np.all(t2.data <= len(t1)))
+
+
+class SplitTests(unittest.TestCase):
+    def test_split(self):
+        t = TensorBase(np.random.rand(7, 4))
+        split_size = 3
+        axis = 0
+        target_shapes = [(3, 4), (3, 4), (1, 4)]
+        splits = syft.math.split(t, split_size, axis)
+        start = 0
+        for target_shape, split in zip(target_shapes, splits):
+            self.assertTrue(syft.equal(split.shape(), target_shape))
+            self.assertTrue(syft.equal(t.narrow(axis, start, target_shape[axis]), split))
+            start += target_shape[axis]
diff --git a/tests/test_tensor.py b/tests/test_tensor.py
index c34b4cebc6..3c9052c3bf 100644
--- a/tests/test_tensor.py
+++ b/tests/test_tensor.py
@@ -974,13 +974,6 @@ class CumprodTest(unittest.TestCase):
         self.assertTrue(np.equal(t1.cumprod_(dim=1), t3).all())
 
 
-class SplitTests(unittest.TestCase):
-    def test_split(self):
-        t1 = TensorBase(np.arange(8.0))
-        t2 = t1.split(4)
-        self.assertTrue(np.array_equal(t2, tuple((np.array([0., 1.]), np.array([2., 3.]), np.array([4., 5.]), np.array([6., 7.])))))
-
-
 class SqueezeTests(unittest.TestCase):
     def test_squeeze(self):
         t1 = TensorBase(np.zeros((2, 1, 2, 1, 2)))
@@ -1628,6 +1621,20 @@ class UnfoldTest(unittest.TestCase):
                                        t1_unfolded_actual_2))
 
 
+class SplitTests(unittest.TestCase):
+    def test_split(self):
+        t = TensorBase(np.random.rand(10, 5))
+        split_size = 3
+        axis = 0
+        target_shapes = [(3, 5), (3, 5), (3, 5), (1, 5)]
+        splits = t.split(split_size, axis)
+        start = 0
+        for target_shape, split in zip(target_shapes, splits):
+            self.assertTrue(syft.equal(split.shape(), target_shape))
+            self.assertTrue(syft.equal(t.narrow(axis, start, target_shape[axis]), split))
+            start += target_shape[axis]
+
+
 if __name__ == "__main__":
 
     unittest.main()

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest flake8
apt-get update apt-get install -y musl-dev g++ libgmp3-dev libmpfr-dev ca-certificates libmpc-dev
3.6
requirements.txt dev-requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
anyio==3.6.2
argon2-cffi==21.3.0
argon2-cffi-bindings==21.2.0
args==0.1.0
async-generator==1.10
attrs==22.2.0
Babel==2.11.0
backcall==0.2.0
bleach==4.1.0
certifi==2021.5.30
cffi==1.15.1
charset-normalizer==2.0.12
clint==0.5.1
comm==0.1.4
contextvars==2.4
coverage==6.2
dataclasses==0.8
decorator==5.1.1
defusedxml==0.7.1
entrypoints==0.4
flake8==5.0.4
idna==3.10
immutables==0.19
importlib-metadata==4.2.0
iniconfig==1.1.1
ipykernel==5.5.6
ipython==7.16.3
ipython-genutils==0.2.0
ipywidgets==7.8.5
jedi==0.17.2
Jinja2==3.0.3
joblib==1.1.1
json5==0.9.16
jsonschema==3.2.0
jupyter==1.1.1
jupyter-client==7.1.2
jupyter-console==6.4.3
jupyter-core==4.9.2
jupyter-server==1.13.1
jupyterlab==3.2.9
jupyterlab-pygments==0.1.2
jupyterlab-server==2.10.3
jupyterlab_widgets==1.1.11
line-profiler==4.1.3
MarkupSafe==2.0.1
mccabe==0.7.0
mistune==0.8.4
nbclassic==0.3.5
nbclient==0.5.9
nbconvert==6.0.7
nbformat==5.1.3
nest-asyncio==1.6.0
notebook==6.4.10
numpy==1.19.5
packaging==21.3
pandocfilters==1.5.1
parso==0.7.1
pexpect==4.9.0
phe==1.5.0
pickleshare==0.7.5
pluggy==1.0.0
prometheus-client==0.17.1
prompt-toolkit==3.0.36
ptyprocess==0.7.0
py==1.11.0
pycodestyle==2.9.1
pycparser==2.21
pyflakes==2.5.0
Pygments==2.14.0
pyparsing==3.1.4
pyRserve==1.0.4
pyrsistent==0.18.0
pytest==7.0.1
pytest-flake8==1.1.1
python-dateutil==2.9.0.post0
pytz==2025.2
pyzmq==25.1.2
requests==2.27.1
scikit-learn==0.24.2
scipy==1.5.4
Send2Trash==1.8.3
six==1.17.0
sklearn==0.0
sniffio==1.2.0
-e git+https://github.com/OpenMined/PySyft.git@f1f230c45e29abce37f83a2ed4606c8a6512d3fa#egg=syft
terminado==0.12.1
testpath==0.6.0
threadpoolctl==3.1.0
tomli==1.2.3
tornado==6.1
traitlets==4.3.3
typing_extensions==4.1.1
urllib3==1.26.20
wcwidth==0.2.13
webencodings==0.5.1
websocket-client==1.3.1
widgetsnbextension==3.6.10
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:
      - anyio==3.6.2
      - argon2-cffi==21.3.0
      - argon2-cffi-bindings==21.2.0
      - args==0.1.0
      - async-generator==1.10
      - attrs==22.2.0
      - babel==2.11.0
      - backcall==0.2.0
      - bleach==4.1.0
      - cffi==1.15.1
      - charset-normalizer==2.0.12
      - clint==0.5.1
      - comm==0.1.4
      - contextvars==2.4
      - coverage==6.2
      - dataclasses==0.8
      - decorator==5.1.1
      - defusedxml==0.7.1
      - entrypoints==0.4
      - flake8==5.0.4
      - idna==3.10
      - immutables==0.19
      - importlib-metadata==4.2.0
      - iniconfig==1.1.1
      - ipykernel==5.5.6
      - ipython==7.16.3
      - ipython-genutils==0.2.0
      - ipywidgets==7.8.5
      - jedi==0.17.2
      - jinja2==3.0.3
      - joblib==1.1.1
      - json5==0.9.16
      - jsonschema==3.2.0
      - jupyter==1.1.1
      - jupyter-client==7.1.2
      - jupyter-console==6.4.3
      - jupyter-core==4.9.2
      - jupyter-server==1.13.1
      - jupyterlab==3.2.9
      - jupyterlab-pygments==0.1.2
      - jupyterlab-server==2.10.3
      - jupyterlab-widgets==1.1.11
      - line-profiler==4.1.3
      - markupsafe==2.0.1
      - mccabe==0.7.0
      - mistune==0.8.4
      - nbclassic==0.3.5
      - nbclient==0.5.9
      - nbconvert==6.0.7
      - nbformat==5.1.3
      - nest-asyncio==1.6.0
      - notebook==6.4.10
      - numpy==1.19.5
      - packaging==21.3
      - pandocfilters==1.5.1
      - parso==0.7.1
      - pexpect==4.9.0
      - phe==1.5.0
      - pickleshare==0.7.5
      - pluggy==1.0.0
      - prometheus-client==0.17.1
      - prompt-toolkit==3.0.36
      - ptyprocess==0.7.0
      - py==1.11.0
      - pycodestyle==2.9.1
      - pycparser==2.21
      - pyflakes==2.5.0
      - pygments==2.14.0
      - pyparsing==3.1.4
      - pyrserve==1.0.4
      - pyrsistent==0.18.0
      - pytest==7.0.1
      - pytest-flake8==1.1.1
      - python-dateutil==2.9.0.post0
      - pytz==2025.2
      - pyzmq==25.1.2
      - requests==2.27.1
      - scikit-learn==0.24.2
      - scipy==1.5.4
      - send2trash==1.8.3
      - six==1.17.0
      - sklearn==0.0
      - sniffio==1.2.0
      - terminado==0.12.1
      - testpath==0.6.0
      - threadpoolctl==3.1.0
      - tomli==1.2.3
      - tornado==6.1
      - traitlets==4.3.3
      - typing-extensions==4.1.1
      - urllib3==1.26.20
      - wcwidth==0.2.13
      - webencodings==0.5.1
      - websocket-client==1.3.1
      - widgetsnbextension==3.6.10
      - zipp==3.6.0
prefix: /opt/conda/envs/PySyft

tests/test_math.py::SplitTests::test_split tests/test_tensor.py::SplitTests::test_split
tests/test_math.py::ConvenienceTests::test_ones tests/test_math.py::ConvenienceTests::test_rand tests/test_math.py::ConvenienceTests::test_zeros tests/test_math.py::DotTests::test_dot_float tests/test_math.py::DotTests::test_dot_int tests/test_math.py::DiagTests::test_one_dim_tensor_below_diag tests/test_math.py::DiagTests::test_one_dim_tensor_main_diag tests/test_math.py::DiagTests::test_one_dim_tensor_upper_diag tests/test_math.py::DiagTests::test_two_dim_tensor_below_diag tests/test_math.py::DiagTests::test_two_dim_tensor_main_diag tests/test_math.py::DiagTests::test_two_dim_tensor_upper_diag tests/test_math.py::CeilTests::test_ceil tests/test_math.py::FloorTests::test_floor tests/test_math.py::SinTests::test_sin tests/test_math.py::SinhTests::test_sinh tests/test_math.py::CosTests::test_cos tests/test_math.py::CoshTests::test_cosh tests/test_math.py::TanTests::test_tan tests/test_math.py::TanhTests::test_tanh tests/test_math.py::CumsumTests::test_cumsum tests/test_math.py::CumprodTests::test_cumprod tests/test_math.py::SigmoidTests::test_sigmoid tests/test_math.py::MatmulTests::test_matmul_1d_float tests/test_math.py::MatmulTests::test_matmul_1d_int tests/test_math.py::MatmulTests::test_matmul_2d_float tests/test_math.py::MatmulTests::test_matmul_2d_identity tests/test_math.py::MatmulTests::test_matmul_2d_int tests/test_math.py::AddmmTests::test_addmm_1d tests/test_math.py::AddmmTests::test_addmm_2d tests/test_math.py::AddcmulTests::test_addcmul_1d tests/test_math.py::AddcmulTests::test_addcmul_2d tests/test_math.py::AddcdivTests::test_addcdiv_1d tests/test_math.py::AddcdivTests::test_addcdiv_2d tests/test_math.py::AddmvTests::test_addmv tests/test_math.py::BmmTests::test_bmm tests/test_math.py::BmmTests::test_bmm_for_correct_size_output tests/test_math.py::AddbmmTests::test_addbmm tests/test_math.py::BaddbmmTests::test_baddbmm tests/test_math.py::TransposeTests::test_transpose tests/test_math.py::UnsqueezeTests::test_unsqueeze tests/test_math.py::MmTests::test_mm_1d tests/test_math.py::MmTests::test_mm_2d tests/test_math.py::MmTests::test_mm_3d tests/test_math.py::FmodTests::test_fmod_number tests/test_math.py::FmodTests::test_fmod_tensor tests/test_math.py::LerpTests::test_lerp tests/test_math.py::NumelTests::test_numel_float tests/test_math.py::NumelTests::test_numel_int tests/test_math.py::RenormTests::test_3d_tensor_renorm tests/test_math.py::RenormTests::test_float_renorm tests/test_math.py::RenormTests::test_int_renorm tests/test_math.py::MultinomialTests::test_multinomial tests/test_tensor.py::DimTests::test_as_view tests/test_tensor.py::DimTests::test_dim_one tests/test_tensor.py::DimTests::test_resize tests/test_tensor.py::DimTests::test_resize_as tests/test_tensor.py::DimTests::test_view tests/test_tensor.py::DiagTests::test_one_dim_tensor_below_diag tests/test_tensor.py::DiagTests::test_one_dim_tensor_main_diag tests/test_tensor.py::DiagTests::test_one_dim_tensor_upper_diag tests/test_tensor.py::DiagTests::test_two_dim_tensor_below_diag tests/test_tensor.py::DiagTests::test_two_dim_tensor_main_diag tests/test_tensor.py::DiagTests::test_two_dim_tensor_upper_diag tests/test_tensor.py::AddTests::test_inplace tests/test_tensor.py::AddTests::test_scalar tests/test_tensor.py::AddTests::test_simple tests/test_tensor.py::CeilTests::test_ceil tests/test_tensor.py::CeilTests::test_ceil_ tests/test_tensor.py::ZeroTests::test_zero tests/test_tensor.py::FloorTests::test_floor tests/test_tensor.py::SubTests::test_inplace tests/test_tensor.py::SubTests::test_scalar tests/test_tensor.py::SubTests::test_simple tests/test_tensor.py::MaxTests::test_axis tests/test_tensor.py::MaxTests::test_no_dim tests/test_tensor.py::MultTests::test_inplace tests/test_tensor.py::MultTests::test_scalar tests/test_tensor.py::MultTests::test_simple tests/test_tensor.py::DivTests::test_inplace tests/test_tensor.py::DivTests::test_scalar tests/test_tensor.py::DivTests::test_simple tests/test_tensor.py::AbsTests::test_abs tests/test_tensor.py::AbsTests::test_abs_ tests/test_tensor.py::ShapeTests::test_shape tests/test_tensor.py::SqrtTests::test_sqrt tests/test_tensor.py::SqrtTests::test_sqrt_ tests/test_tensor.py::SumTests::test_dim_is_not_none_int tests/test_tensor.py::SumTests::test_dim_none_int tests/test_tensor.py::EqualTests::test_equal tests/test_tensor.py::EqualTests::test_equal_operation tests/test_tensor.py::EqualTests::test_inequality_operation tests/test_tensor.py::EqualTests::test_not_equal tests/test_tensor.py::EqualTests::test_shape_inequality_operation tests/test_tensor.py::EqualTests::test_shape_not_equal tests/test_tensor.py::SigmoidTests::test_sigmoid tests/test_tensor.py::AddmmTests::test_addmm_1d tests/test_tensor.py::AddmmTests::test_addmm_1d_ tests/test_tensor.py::AddmmTests::test_addmm_2d tests/test_tensor.py::AddmmTests::test_addmm_2d_ tests/test_tensor.py::AddcmulTests::test_addcmul_1d tests/test_tensor.py::AddcmulTests::test_addcmul_1d_ tests/test_tensor.py::AddcmulTests::test_addcmul_2d tests/test_tensor.py::AddcmulTests::test_addcmul_2d_ tests/test_tensor.py::AddcdivTests::test_addcdiv_1d tests/test_tensor.py::AddcdivTests::test_addcdiv_1d_ tests/test_tensor.py::AddcdivTests::test_addcdiv_2d tests/test_tensor.py::AddcdivTests::test_addcdiv_2d_ tests/test_tensor.py::AddmvTests::test_addmv tests/test_tensor.py::AddmvTests::test_addmv_ tests/test_tensor.py::BmmTests::test_bmm tests/test_tensor.py::BmmTests::test_bmm_size tests/test_tensor.py::AddbmmTests::test_addbmm tests/test_tensor.py::AddbmmTests::test_addbmm_ tests/test_tensor.py::BaddbmmTests::test_baddbmm tests/test_tensor.py::BaddbmmTests::test_baddbmm_ tests/test_tensor.py::TransposeTests::test_t tests/test_tensor.py::TransposeTests::test_transpose tests/test_tensor.py::TransposeTests::test_transpose_ tests/test_tensor.py::UnsqueezeTests::test_unsqueeze tests/test_tensor.py::UnsqueezeTests::test_unsqueeze_ tests/test_tensor.py::ExpTests::test_exp tests/test_tensor.py::ExpTests::test_exp_ tests/test_tensor.py::FracTests::test_frac tests/test_tensor.py::FracTests::test_frac_ tests/test_tensor.py::RsqrtTests::test_rsqrt tests/test_tensor.py::RsqrtTests::test_rsqrt_ tests/test_tensor.py::SignTests::test_sign tests/test_tensor.py::SignTests::test_sign_ tests/test_tensor.py::NumpyTests::test_numpy tests/test_tensor.py::ReciprocalTests::test_reciprocal tests/test_tensor.py::ReciprocalTests::test_reciprocal_ tests/test_tensor.py::LogTests::test_log tests/test_tensor.py::LogTests::test_log_ tests/test_tensor.py::LogTests::test_log_1p tests/test_tensor.py::LogTests::test_log_1p_ tests/test_tensor.py::ClampTests::test_clamp_float tests/test_tensor.py::ClampTests::test_clamp_float_in_place tests/test_tensor.py::ClampTests::test_clamp_int tests/test_tensor.py::ClampTests::test_clamp_int_in_place tests/test_tensor.py::CloneTests::test_clone tests/test_tensor.py::ChunkTests::test_chunk tests/test_tensor.py::ChunkTests::test_chunk_same_size tests/test_tensor.py::GtTests::test_gt__in_place_with_number tests/test_tensor.py::GtTests::test_gt__in_place_with_tensor tests/test_tensor.py::GtTests::test_gt_with_encrypted tests/test_tensor.py::GtTests::test_gt_with_number tests/test_tensor.py::GtTests::test_gt_with_tensor tests/test_tensor.py::GeTests::test_ge__in_place_with_number tests/test_tensor.py::GeTests::test_ge__in_place_with_tensor tests/test_tensor.py::GeTests::test_ge_with_encrypted tests/test_tensor.py::GeTests::test_ge_with_number tests/test_tensor.py::GeTests::test_ge_with_tensor tests/test_tensor.py::LtTests::test_lt__in_place_with_number tests/test_tensor.py::LtTests::test_lt__in_place_with_tensor tests/test_tensor.py::LtTests::test_lt_with_encrypted tests/test_tensor.py::LtTests::test_lt_with_number tests/test_tensor.py::LtTests::test_lt_with_tensor tests/test_tensor.py::LeTests::test_le__in_place_with_number tests/test_tensor.py::LeTests::test_le__in_place_with_tensor tests/test_tensor.py::LeTests::test_le_with_encrypted tests/test_tensor.py::LeTests::test_le_with_number tests/test_tensor.py::LeTests::test_le_with_tensor tests/test_tensor.py::BernoulliTests::test_bernoulli tests/test_tensor.py::BernoulliTests::test_bernoulli_ tests/test_tensor.py::MultinomialTests::test_multinomial tests/test_tensor.py::CauchyTests::test_cauchy_ tests/test_tensor.py::UniformTests::test_uniform tests/test_tensor.py::UniformTests::test_uniform_ tests/test_tensor.py::GeometricTests::test_geometric_ tests/test_tensor.py::NormalTests::test_normal tests/test_tensor.py::NormalTests::test_normal_ tests/test_tensor.py::FillTests::test_fill_ tests/test_tensor.py::TopkTests::test_topK tests/test_tensor.py::TolistTests::test_to_list tests/test_tensor.py::TraceTests::test_trace tests/test_tensor.py::RoundTests::test_round tests/test_tensor.py::RoundTests::test_round_ tests/test_tensor.py::RepeatTests::test_repeat tests/test_tensor.py::PowTests::test_pow tests/test_tensor.py::PowTests::test_pow_ tests/test_tensor.py::NegTests::test_neg tests/test_tensor.py::NegTests::test_neg_ tests/test_tensor.py::SinTests::test_sin tests/test_tensor.py::SinhTests::test_sinh tests/test_tensor.py::CosTests::test_cos tests/test_tensor.py::CoshTests::test_cosh tests/test_tensor.py::TanTests::test_tan tests/test_tensor.py::TanhTests::test_tanh_ tests/test_tensor.py::ProdTests::test_prod tests/test_tensor.py::RandomTests::test_random_ tests/test_tensor.py::NonzeroTests::test_non_zero tests/test_tensor.py::CumprodTest::test_cumprod tests/test_tensor.py::CumprodTest::test_cumprod_ tests/test_tensor.py::SqueezeTests::test_squeeze tests/test_tensor.py::ExpandAsTests::test_expand_as tests/test_tensor.py::MeanTests::test_mean tests/test_tensor.py::NotEqualTests::test_ne tests/test_tensor.py::NotEqualTests::test_ne_ tests/test_tensor.py::IndexTests::test_index tests/test_tensor.py::IndexTests::test_index_add_ tests/test_tensor.py::IndexTests::test_index_copy_ tests/test_tensor.py::IndexTests::test_index_fill_ tests/test_tensor.py::IndexTests::test_index_select tests/test_tensor.py::IndexTests::test_index_slice_notation tests/test_tensor.py::IndexTests::test_indexing tests/test_tensor.py::GatherTests::test_gather_numerical_1 tests/test_tensor.py::GatherTests::test_gather_numerical_2 tests/test_tensor.py::ScatterTests::test_scatter_dim_out_Of_range tests/test_tensor.py::ScatterTests::test_scatter_index_out_of_range tests/test_tensor.py::ScatterTests::test_scatter_index_src_dimension_mismatch tests/test_tensor.py::ScatterTests::test_scatter_index_type tests/test_tensor.py::ScatterTests::test_scatter_numerical_0 tests/test_tensor.py::ScatterTests::test_scatter_numerical_1 tests/test_tensor.py::ScatterTests::test_scatter_numerical_2 tests/test_tensor.py::ScatterTests::test_scatter_numerical_3 tests/test_tensor.py::ScatterTests::test_scatter_numerical_4 tests/test_tensor.py::ScatterTests::test_scatter_numerical_5 tests/test_tensor.py::ScatterTests::test_scatter_numerical_6 tests/test_tensor.py::RemainderTests::test_remainder_ tests/test_tensor.py::RemainderTests::test_remainder_broadcasting tests/test_tensor.py::MvTests::test_mv tests/test_tensor.py::MvTests::test_mv_tensor tests/test_tensor.py::NarrowTests::test_narrow_float tests/test_tensor.py::NarrowTests::test_narrow_int tests/test_tensor.py::MaskedScatterTests::test_masked_scatter_1 tests/test_tensor.py::MaskedScatterTests::test_masked_scatter_braodcasting_1 tests/test_tensor.py::MaskedScatterTests::test_masked_scatter_braodcasting_2 tests/test_tensor.py::MaskedFillTests::test_masked_fill_ tests/test_tensor.py::MaskedFillTests::test_masked_fill_broadcasting tests/test_tensor.py::MaskedSelectTests::test_masked_select tests/test_tensor.py::MaskedSelectTests::test_masked_select_broadcasting_1 tests/test_tensor.py::MaskedSelectTests::test_masked_select_broadcasting_2 tests/test_tensor.py::MaskedSelectTests::test_tensor_base_masked_select tests/test_tensor.py::EqTests::test_eq_in_place_with_number tests/test_tensor.py::EqTests::test_eq_in_place_with_tensor tests/test_tensor.py::EqTests::test_eq_with_number tests/test_tensor.py::EqTests::test_eq_with_tensor tests/test_tensor.py::MmTests::test_mm_1d tests/test_tensor.py::MmTests::test_mm_2d tests/test_tensor.py::MmTests::test_mm_3d tests/test_tensor.py::NewTensorTests::test_encrypted_error tests/test_tensor.py::NewTensorTests::test_return_new_float_tensor tests/test_tensor.py::NewTensorTests::test_return_new_int_tensor tests/test_tensor.py::HalfTests::test_half_1 tests/test_tensor.py::HalfTests::test_half_2 tests/test_tensor.py::FmodTests::test_fmod_number tests/test_tensor.py::FmodTests::test_fmod_tensor tests/test_tensor.py::FmodTestsBis::test_fmod_number tests/test_tensor.py::FmodTestsBis::test_fmod_tensor tests/test_tensor.py::NumelTests::test_numel_2d tests/test_tensor.py::NumelTests::test_numel_3d tests/test_tensor.py::NumelTests::test_numel_encrypted tests/test_tensor.py::NumelTests::test_numel_float tests/test_tensor.py::NumelTests::test_numel_int tests/test_tensor.py::NumelTests::test_numel_str tests/test_tensor.py::NelementTests::test_nelement_2d tests/test_tensor.py::NelementTests::test_nelement_3d tests/test_tensor.py::NelementTests::test_nelement_encrypted tests/test_tensor.py::NelementTests::test_nelement_float tests/test_tensor.py::NelementTests::test_nelement_int tests/test_tensor.py::NelementTests::test_nelement_str tests/test_tensor.py::SizeTests::test_size_2d tests/test_tensor.py::SizeTests::test_size_3d tests/test_tensor.py::SizeTests::test_size_float tests/test_tensor.py::SizeTests::test_size_int tests/test_tensor.py::SizeTests::test_size_str tests/test_tensor.py::LerpTests::test_lerp tests/test_tensor.py::LerpTests::test_lerp_ tests/test_tensor.py::ModeTests::testMode_axis_None tests/test_tensor.py::ModeTests::testMode_axis_col tests/test_tensor.py::ModeTests::testMode_axis_row tests/test_tensor.py::RenormTests::testRenorm tests/test_tensor.py::RenormTests::testRenorm_ tests/test_tensor.py::StrideTests::test_stride tests/test_tensor.py::UnfoldTest::test_unfold_big tests/test_tensor.py::UnfoldTest::test_unfold_small
syft/tensor.py syft/math.py
syft/tensor.py syft/math.py