orange3 icon indicating copy to clipboard operation
orange3 copied to clipboard

Table.copy() changes sparsity

Open markotoplak opened this issue 3 years ago • 0 comments

Table.copy can sometimes change sparsity, which is unexpected. It is likely needlessly complex as it goes through the constructor (Table.__new__). I found this in one of our tests:

import unittest
from Orange.data import Table
from scipy import sparse as sp

from Orange.widgets.tests.base import WidgetTest
from Orange.widgets.data.owmergedata import OWMergeData


class TestOWMergeDataBug(WidgetTest):

    def test_sparse(self):
        self.widget = self.create_widget(OWMergeData)
        data = Table("iris")[::25]
        data_ed_sparse = Table("titanic")[::300].to_sparse()
        self.send_signal("Data", data)
        self.send_signal("Extra Data", data_ed_sparse)

        output_sparse = self.get_output("Data")
        self.assertTrue(sp.issparse(output_sparse.X))

        output_sparse = output_sparse.copy()
        self.assertTrue(sp.issparse(output_sparse.X))  # FAILS


if __name__ == "__main__":
    unittest.main()

markotoplak avatar Oct 08 '21 09:10 markotoplak