diff --git a/i18n/si/msgs.jaml b/i18n/si/msgs.jaml index a5ac1c3..d3529a8 100644 --- a/i18n/si/msgs.jaml +++ b/i18n/si/msgs.jaml @@ -1,6 +1,11 @@ __init__.py: def `networks`: networks: false +utils.py: + def `items_from_distmatrix`: + label: oznaka + def `weights_from_distances`: + All distances must be positive: Vse razdalje morajo biti pozitivne network/base.py: class `Network`: def `__init__`: @@ -758,11 +763,6 @@ widgets/ownxsinglemode.py: def `main`: /Users/janez/Downloads/100_petrozavodsk_171_events_no_sqrt.net: false __main__: false -widgets/utils.py: - def `items_from_distmatrix`: - label: oznaka - def `weights_from_distances`: - All distances must be positive: Vse razdalje morajo biti pozitivne widgets/tests/utils.py: class `NetworkTest`: def `_read_network`: diff --git a/orangecontrib/network/widgets/tests/test_utils.py b/orangecontrib/network/tests/test_utils.py similarity index 96% rename from orangecontrib/network/widgets/tests/test_utils.py rename to orangecontrib/network/tests/test_utils.py index 12e344e..463c1e4 100644 --- a/orangecontrib/network/widgets/tests/test_utils.py +++ b/orangecontrib/network/tests/test_utils.py @@ -4,7 +4,7 @@ from Orange.misc import DistMatrix from Orange.data import Table, Domain, ContinuousVariable -from orangecontrib.network.widgets.utils import items_from_distmatrix, weights_from_distances +from orangecontrib.network.utils import items_from_distmatrix, weights_from_distances class TestItemsFromMatrix(unittest.TestCase): diff --git a/orangecontrib/network/utils.py b/orangecontrib/network/utils.py new file mode 100644 index 0000000..2033e51 --- /dev/null +++ b/orangecontrib/network/utils.py @@ -0,0 +1,41 @@ +import numpy as np +from Orange.data import Table, StringVariable, Domain + + +def items_from_distmatrix(matrix): + if matrix.row_items is not None: + row_items = matrix.row_items + if isinstance(row_items, Table): + if matrix.axis == 1: + items = row_items + else: + items = [[v.name] for v in row_items.domain.attributes] + else: + items = [[str(x)] for x in matrix.row_items] + else: + items = [[str(i)] for i in range(1, 1 + matrix.shape[0])] + if not isinstance(items, Table): + items = Table.from_list( + Domain([], metas=[StringVariable('label')]), + items) + return items + + +def weights_from_distances(weights): + weights = weights.astype(np.float64) + + if weights.size == 0: + return weights + + mi, ma = np.nanmin(weights), np.nanmax(weights) + assert mi >= 0, "All distances must be positive" + + if ma - mi < 1e-6: + return np.ones(weights.shape) + + weights /= ma + weights *= np.log(10) + np.exp(weights, out=weights) + np.reciprocal(weights, out=weights) + + return weights diff --git a/orangecontrib/network/widgets/OWNxFromDistances.py b/orangecontrib/network/widgets/OWNxFromDistances.py index 461f6ea..690cdbe 100644 --- a/orangecontrib/network/widgets/OWNxFromDistances.py +++ b/orangecontrib/network/widgets/OWNxFromDistances.py @@ -19,8 +19,7 @@ from orangecontrib.network.network import Network from orangecontrib.network.network.base import UndirectedEdges, DirectedEdges # This enables summarize in widget preview, pylint: disable=unused-import -import orangecontrib.network.widgets -from orangecontrib.network.widgets.utils import items_from_distmatrix, weights_from_distances +from orangecontrib.network.utils import items_from_distmatrix, weights_from_distances class QIntValidatorWithFixup(QIntValidator): diff --git a/orangecontrib/network/widgets/OWNxNeighbor.py b/orangecontrib/network/widgets/OWNxNeighbor.py index aa6c8dc..ed81c8c 100644 --- a/orangecontrib/network/widgets/OWNxNeighbor.py +++ b/orangecontrib/network/widgets/OWNxNeighbor.py @@ -1,5 +1,4 @@ import numpy as np -from numpy.lib.stride_tricks import as_strided import scipy.sparse as sp from AnyQt.QtCore import Qt @@ -15,8 +14,7 @@ from orangecontrib.network.network import Network from orangecontrib.network.network.base import UndirectedEdges, DirectedEdges # This enables summarize in widget preview, pylint: disable=unused-import -import orangecontrib.network.widgets -from orangecontrib.network.widgets.utils import items_from_distmatrix, weights_from_distances +from orangecontrib.network.utils import items_from_distmatrix, weights_from_distances class OWNxNeighbor(widget.OWWidget): diff --git a/orangecontrib/network/widgets/utils.py b/orangecontrib/network/widgets/utils.py index 2033e51..7caf89d 100644 --- a/orangecontrib/network/widgets/utils.py +++ b/orangecontrib/network/widgets/utils.py @@ -1,41 +1 @@ -import numpy as np -from Orange.data import Table, StringVariable, Domain - - -def items_from_distmatrix(matrix): - if matrix.row_items is not None: - row_items = matrix.row_items - if isinstance(row_items, Table): - if matrix.axis == 1: - items = row_items - else: - items = [[v.name] for v in row_items.domain.attributes] - else: - items = [[str(x)] for x in matrix.row_items] - else: - items = [[str(i)] for i in range(1, 1 + matrix.shape[0])] - if not isinstance(items, Table): - items = Table.from_list( - Domain([], metas=[StringVariable('label')]), - items) - return items - - -def weights_from_distances(weights): - weights = weights.astype(np.float64) - - if weights.size == 0: - return weights - - mi, ma = np.nanmin(weights), np.nanmax(weights) - assert mi >= 0, "All distances must be positive" - - if ma - mi < 1e-6: - return np.ones(weights.shape) - - weights /= ma - weights *= np.log(10) - np.exp(weights, out=weights) - np.reciprocal(weights, out=weights) - - return weights +from orangecontrib.network.utils import items_from_distmatrix, weights_from_distances \ No newline at end of file