From d7f24dc2b767f2b639a9152cdcbb8677d0657e9e Mon Sep 17 00:00:00 2001 From: Davis Lazowski Date: Tue, 13 Aug 2019 09:50:32 -0400 Subject: [PATCH 1/4] Added slice notation for node edge access + test Added spacing to match existing test file style Fixed type signatures Added refactored slice notation. --- tensornetwork/network_components.py | 9 ++++++++- tensornetwork/network_components_test.py | 13 +++++++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/tensornetwork/network_components.py b/tensornetwork/network_components.py index da3e1f3c0..f4ac1eeb3 100644 --- a/tensornetwork/network_components.py +++ b/tensornetwork/network_components.py @@ -16,7 +16,8 @@ from __future__ import absolute_import from __future__ import division from __future__ import print_function -from typing import Any, Dict, List, Optional, Set, Text, Tuple, Type, Union +from typing import Any, Dict, List, Optional, Set, Text, Tuple, Type, Union, \ + overload import typing import numpy as np from tensornetwork.backends import base_backend @@ -256,7 +257,13 @@ def has_nondangling_edge(self): return True return False + @overload + def __getitem__(self, key: slice) -> List["Edge"]: + return self.edges[key] + def __getitem__(self, key: Union[int, Text]) -> "Edge": + if isinstance(key, slice): + return self.edges[key] return self.get_edge(key) def __str__(self) -> Text: diff --git a/tensornetwork/network_components_test.py b/tensornetwork/network_components_test.py index 88a51ff1c..ddbb1b02a 100644 --- a/tensornetwork/network_components_test.py +++ b/tensornetwork/network_components_test.py @@ -201,8 +201,17 @@ def test_node_magic_getitem(single_node_edge): edge = single_node_edge.edge node.add_edge(edge, axis=0) assert node[0] == edge - - + + +def test_node_magic_getslice(single_node_edge): + node = single_node_edge.node + edge = single_node_edge.edge + node.add_edge(edge, axis=0) + assert node[:1][0] is edge + assert len(node[None:None]) == 3 + assert len(node[0:3:2]) == 2 + + def test_node_magic_str(single_node_edge): node = single_node_edge.node assert str(node) == node.name From 9ffff5f02369f8c4e9d2d089d9b24e7ffea15940 Mon Sep 17 00:00:00 2001 From: Davis Lazowski Date: Tue, 13 Aug 2019 13:32:25 -0400 Subject: [PATCH 2/4] Added recent pytype requirement for Travis This ensures that Travis accepts the recent pytype addition of @overload syntax --- requirements_travis.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements_travis.txt b/requirements_travis.txt index 5bc90a4bc..ac073ab34 100644 --- a/requirements_travis.txt +++ b/requirements_travis.txt @@ -1,5 +1,5 @@ jax jaxlib -pytype +pytype>=2019.06.21 pytest -torch>=1.1 \ No newline at end of file +torch>=1.1 From ba0542b6f5c16a11e5f67491fd6a05740900ba3f Mon Sep 17 00:00:00 2001 From: Davis Lazowski Date: Tue, 13 Aug 2019 13:53:36 -0400 Subject: [PATCH 3/4] Fixed @overload syntax --- tensornetwork/network_components.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tensornetwork/network_components.py b/tensornetwork/network_components.py index f4ac1eeb3..083c3f5ed 100644 --- a/tensornetwork/network_components.py +++ b/tensornetwork/network_components.py @@ -260,8 +260,13 @@ def has_nondangling_edge(self): @overload def __getitem__(self, key: slice) -> List["Edge"]: return self.edges[key] - + + @overload def __getitem__(self, key: Union[int, Text]) -> "Edge": + return self.get_edge(key) + + def __getitem__(self, key: Union[int, Text, slice] + ) -> Union["Edge", List["Edge"]]: if isinstance(key, slice): return self.edges[key] return self.get_edge(key) From e35a12477260d9443c5f82f56d008c13014cf95e Mon Sep 17 00:00:00 2001 From: Davis Lazowski Date: Tue, 13 Aug 2019 14:36:47 -0400 Subject: [PATCH 4/4] Update network_components.py Made overload code less redundant --- tensornetwork/network_components.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tensornetwork/network_components.py b/tensornetwork/network_components.py index 083c3f5ed..e0ddfb7bf 100644 --- a/tensornetwork/network_components.py +++ b/tensornetwork/network_components.py @@ -259,11 +259,11 @@ def has_nondangling_edge(self): @overload def __getitem__(self, key: slice) -> List["Edge"]: - return self.edges[key] - + pass + @overload def __getitem__(self, key: Union[int, Text]) -> "Edge": - return self.get_edge(key) + pass def __getitem__(self, key: Union[int, Text, slice] ) -> Union["Edge", List["Edge"]]: