diff --git a/.cz.toml b/.cz.toml index b8265df3..74777d5f 100644 --- a/.cz.toml +++ b/.cz.toml @@ -1,6 +1,6 @@ [tool.commitizen] name = "cz_conventional_commits" -version = "2.0.3" +version = "2.0.4" version_files = [ "setup.py", "docs/source/conf.py", diff --git a/docs/source/conf.py b/docs/source/conf.py index 433c2b18..c20cb7af 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -19,7 +19,7 @@ import os -__version__ = "2.0.3" +__version__ = "2.0.4" # If extensions (or modules to document with autodoc) are in another directory, diff --git a/hypernetx/__init__.py b/hypernetx/__init__.py index 21723aaa..5e131e5f 100644 --- a/hypernetx/__init__.py +++ b/hypernetx/__init__.py @@ -11,4 +11,4 @@ from hypernetx.utils import * from hypernetx.utils.toys import * -__version__ = "2.0.3" +__version__ = "2.0.4" diff --git a/hypernetx/classes/hypergraph.py b/hypernetx/classes/hypergraph.py index 952ab195..6c3663b7 100644 --- a/hypernetx/classes/hypergraph.py +++ b/hypernetx/classes/hypergraph.py @@ -4,6 +4,7 @@ import pickle import warnings +from copy import deepcopy from collections import defaultdict from collections.abc import Sequence, Iterable from typing import Optional, Any, TypeVar, Union, Mapping, Hashable @@ -1242,18 +1243,20 @@ def dual(self, name=None, switch_names=True): : hypergraph """ - dfp = self.edges.properties.copy() - if "level" in dfp.columns: - dfp = dfp.reset_index() - dfp.level = dfp.level.apply(lambda x: 1 * (x == 0)) - dfp = dfp.set_index(["level", "id"]) + dfp = deepcopy(self.edges.properties) + dfp = dfp.reset_index() + dfp.level = dfp.level.apply(lambda x: 1 * (x == 0)) + dfp = dfp.set_index(["level", "id"]) edge, node, wt = self._edge_col, self._node_col, self._cell_weight_col - df = self.dataframe.copy() + df = deepcopy(self.dataframe) cprops = [col for col in df.columns if not col in [edge, node, wt]] df[[edge, node]] = df[[node, edge]] - if edge != "edges" or node != "nodes": + if switch_names == True and not ( + self._edge_col == "edges" and self._node_col == "nodes" + ): + # if switch_names == False or (self._edge_col == 'edges' and self._node_col == 'nodes'): df = df.rename(columns={edge: self._node_col, node: self._edge_col}) node = self._edge_col edge = self._node_col diff --git a/hypernetx/classes/tests/conftest.py b/hypernetx/classes/tests/conftest.py index a4c7eae8..ddfdb22e 100644 --- a/hypernetx/classes/tests/conftest.py +++ b/hypernetx/classes/tests/conftest.py @@ -173,7 +173,7 @@ def triloop2(): @pytest.fixture def sbs_hypergraph(sbs): - return Hypergraph(sbs.edgedict, name="sbsh") + return Hypergraph(sbs.edgedict, name="sbsh", edge_col="edges", node_col="nodes") @pytest.fixture diff --git a/hypernetx/classes/tests/test_hypergraph.py b/hypernetx/classes/tests/test_hypergraph.py index 3f8f5228..5f21d5a7 100644 --- a/hypernetx/classes/tests/test_hypergraph.py +++ b/hypernetx/classes/tests/test_hypergraph.py @@ -308,6 +308,17 @@ def test_dual(sbs_hypergraph): HD = H.dual() assert set(H.nodes) == set(HD.edges) assert set(H.edges) == set(HD.nodes) + assert list(H.dataframe.columns) == list(HD.dataframe.columns) + + +def test_dual_again(sbs_edgedict): + H = Hypergraph(sbs_edgedict, edge_col="Types", node_col="Values") + assert list(H.dataframe.columns[0:2]) == ["Types", "Values"] + assert list(H.dual().dataframe.columns[0:2]) == ["Values", "Types"] + assert list(H.dual(switch_names=False).dataframe.columns[0:2]) == [ + "Types", + "Values", + ] @pytest.mark.filterwarnings("ignore:No 3-path between ME and FN") diff --git a/setup.py b/setup.py index edea8c23..d9697e1a 100644 --- a/setup.py +++ b/setup.py @@ -1,5 +1,5 @@ from setuptools import setup -__version__ = "2.0.3" +__version__ = "2.0.4" setup(version=__version__)