[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: numpy boolean subtract, the `-` operator, is deprecated, use the bitwise_xor, the `^` operator, or the logical_xor function instead (Was: Bug#899205: python-cogent: Test suite fails with latest matplotlib)



On 05/06/2018 01:00, Andreas Tille wrote:

> ======================================================================
> ERROR: test_consistent_gap_degen_handling (test_core.test_sequence.ModelSequenceTests)
> gap degen character should be treated consistently
> ----------------------------------------------------------------------
> Traceback (most recent call last):
>   File "/tmp/autopkgtest-lxc.5a99fnj6/downtmp/autopkgtest_tmp/tests/test_core/test_sequence.py", line 660, in test_consistent_gap_degen_handling
>     self.assertEqual(dna.stripBadAndGaps(), raw_ungapped)
>   File "/usr/lib/python2.7/dist-packages/cogent/core/sequence.py", line 1251, in stripBadAndGaps
>     valid_indices -= self._data == i
> TypeError: numpy boolean subtract, the `-` operator, is deprecated, use the bitwise_xor, the `^` operator, or the logical_xor function instead.
> 
> ======================================================================
> 
> 
> I would be happy for some suggested patch how to solve this.  The line
> in question is
> 
>    https://salsa.debian.org/med-team/python-cogent/blob/master/cogent/core/sequence.py
> 
>    Line 1251
> 
> If my feeling is not totally wrong the correct patch would be 
> 
>    valid_indices -= (self._data == i)
> 
> since the left value is rather an integer than boolean.
> 
> What do you think?

Without analyzing the code in the fine details, and assuming self._data
is a numpy array or a subclass, I think the name of the variable is
misleading.  Looking at the whole function it seems to be a bool array.
It should be easy to confirm this with pdb or simply inserting a print()
statement in the right place.

    def stripBadAndGaps(self):
        """Returns copy of self with bad chars and gaps excised."""
        gap_indices = map(self.Alphabet.index, self.MolType.Gaps)
        valid_indices = self._data < len(self.Alphabet)
        for i in gap_indices:
            valid_indices -= self._data == i
        result = compress(valid_indices, self._data)
        return self.__class__(result, Info=self.Info)

The fix should be to replace the subtraction with:

    valid_indices ^= self._data == i

Cheers,
Dan


Reply to: