Thanks a lot, Chris!

Marek

On Tue, 16 Jun 2015 at 15:57 Chris Marshall <devel.chm...@gmail.com> wrote:

>  Marek-
>
> I've opened a highest priority bug report based on your information:
>
>   http://sourceforge.net/p/pdl/bugs/390
>
> Could you add information on your system specifics to the ticket
> for reference (the output of perldl -V has the main information)?
> We'll be updating the ticket as information becomes available.
>
> Thanks for reporting the problem!
>
> Chris
>
>
>
>
> On 6/16/2015 09:49, Marek Gierliński wrote:
>
> This is very bad news for me. I just searched through my scripts and found
> 586 instances of 'stats'. If this is not corrected, I have to assume that
> all of them might potentially produce incorrect results, without even
> failing (like in the if($s > 0) example).
>
>  We've been using 2.007 for a couple of months now. I'm not even sure if
> my recent results are correct.
>
>  Marek
>
>  On Tue, 16 Jun 2015 at 14:43 Chris Marshall <devel.chm...@gmail.com>
> wrote:
>
>>  That definitely seems like a bug to me.  Thanks for the cross-check,
>> Marek.
>> Devels, I see the same in the latest PDL release so it is not a PDL-2.007
>> only issue.
>>
>>
>> --Chris
>>
>>
>> On 6/16/2015 09:36, Marek Gierliński wrote:
>>
>> OK, thank you for your explanations. I'm not sure if all of this makes
>> sense. If you try
>>
>>  print $s > 5;
>>
>>  in the above example, you will get 'BAD'. 5 is just a scalar and not a
>> bad value. And $s is a one-dimensional piddle with a value different from
>> the bad value. Neither of the values in this conditional expression is bad.
>> Why does it return a string 'BAD'?
>>
>>  Marek
>>
>>  On Tue, 16 Jun 2015 at 14:24 Chris Marshall <devel.chm...@gmail.com>
>> wrote:
>>
>>>  This result seems to violate the principle of least surprise.
>>> On the LHS we have a PDL with badvalue(0) and on the RHS we
>>> have a perl scalar with value 0 (which happens to be the bad
>>> value for the PDL).
>>>
>>> It seems surprising that $pdl > 0 is actually $pdl > pdl(0)->badvalue(0)
>>>
>>> Thoughts?
>>> Chris
>>>
>>>
>>> -------- Forwarded Message --------  Subject: Re: [Pdl-general] Weird
>>> behaviour of stats with bad values  Date: Tue, 16 Jun 2015 09:18:29
>>> -0400  From: Chris Marshall <devel.chm...@gmail.com>
>>> <devel.chm...@gmail.com>  To: Derek Lamb <de...@boulder.swri.edu>
>>> <de...@boulder.swri.edu>, Marek Gierliński <marek.gierlin...@gmail.com>
>>> <marek.gierlin...@gmail.com>  CC: pdl-gene...@lists.sourceforge.net
>>>
>>>
>>>  I think the problem is that if $s is a badvalue piddle with the
>>> badvalue=0
>>>  then $s>0 is $s>BAD which is BAD.  If you use a value for badvalue that
>>> is
>>>  not in the comparison, you should be good.
>>>
>>>  --Chris
>>>
>>>  On 6/16/2015 09:11, Derek Lamb wrote:
>>>
>>> Thanks for the simple example.  That helps a lot.
>>>
>>>  The actual problem is that piddles with the badflags set always
>>> evaluate to BAD when element-wise logical operations are performed on them.
>>>
>>>   "print $s<0" prints BAD instead of 0 or 1.  "print $x>0" also prints
>>> [BAD BAD BAD BAD].
>>>
>>>  $m and $s have their badflags set (as they should, since they were
>>> made from partially-bad data).  You can check if they can be safely
>>> cleared, and clear them if so, with $s->check_badflag, etc.  Since $m and
>>> $s are 1-element piddles, you can also just set them directly to their
>>> scalar values, for example
>>>
>>>  map{$_=$_->sclr} ($m,$s)=stats($x); #if you know they are only going
>>> to be 1 element piddles
>>> OR
>>> map{$_=$_->((0))} ($m,$s)=stats($x); #if you just want the first value
>>>
>>>  The fact that $m and $s are 1-element piddles is likely what is
>>> causing your problem.  My guess is that this behavior has changed (perhaps
>>> intentionally, perhaps not) between your old version and more recent
>>> versions, and if you were getting $m and $s as simple perl scalars before
>>> you would not have seen this problem.  I can verify that stats() has
>>> returned 1-piddles and not perl scalars at least as far back as PDL-2.4.11.
>>>
>>>  cheers,
>>> Derek
>>>
>>>   On Jun 16, 2015, at 6:29 AM, Marek Gierliński <
>>> marek.gierlin...@gmail.com> wrote:
>>>
>>>  Oops, sorry, I missed a line when copying the text. Here is the code
>>> again.
>>>
>>>  use PDL;
>>> use PDL::NiceSlice;
>>>
>>>
>>>  my $x = pdl(1, 2, 3, 0);
>>> $x->badflag(1);
>>> $x->badvalue(0);
>>>
>>>  print "x = $x\n";
>>>
>>>  my ($m, $s) = stats($x);
>>>
>>>  print "m = $m, s = $s\n";
>>> print "s greater than zero\n" if $s > 0;
>>> print "s less than zero\n" if $s < 0;
>>> print "s equals zero\n" if $s == 0;
>>>
>>>
>>>  On Tue, 16 Jun 2015 at 12:20 Chris Marshall <devel.chm...@gmail.com>
>>> wrote:
>>>
>>>>  Hi Marek-
>>>>
>>>>  Do you have a complete example showing the problem?
>>>>  You don't show where $m and $s are being set below.
>>>>
>>>>  Thanks,
>>>>  Chris
>>>>
>>>>
>>>>  On 6/16/2015 07:04, Marek Gierliński wrote:
>>>>
>>>> I have recently encountered a weird problem with stats (or statsover)
>>>> using bad values. The resulting numbers have a strange property, they
>>>> always return true in comparisons. This code:
>>>>
>>>>   use PDL;
>>>> use PDL::NiceSlice;
>>>>
>>>>  my $x = pdl(1, 2, 3, 0);
>>>> $x->badflag(1); $x->badvalue(0);
>>>>
>>>>   print "m = $m, s = $s\n";
>>>> print "s greater than zero\n" if $s > 0;
>>>> print "s less than zero\n" if $s < 0;
>>>> print "s equals zero\n" if $s == 0;
>>>>
>>>>  returns the following output:
>>>>
>>>>  x = [1 2 3 BAD]
>>>> m = 2, s = 1
>>>> s greater than zero
>>>> s less than zero
>>>> s equals zero
>>>>
>>>>  which doesn't make any sense. Can anyone explain this? I always
>>>> assumed that 'stats' returned ordinary Perl scalars, but this must be
>>>> something different.
>>>>
>>>>  I'm using PDL version 2.007. We had an older version installed for a
>>>> long time and I think this problem appeared when we upgraded to 2.007.
>>>>
>>>>  Marek
>>>>
>>>>
>>> ------------------------------------------------------------------------------
>>> _______________________________________________
>>> pdl-devel mailing list
>>> pdl-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/pdl-devel
>>>
>>
>>
>
------------------------------------------------------------------------------
_______________________________________________
pdl-devel mailing list
pdl-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/pdl-devel

Reply via email to