On 2015-06-17 at 21:10:31 +0100, Ed wrote:
> Please please please could one of you turn the example into a *.t file which 
> we can use to permanently constrain PDL behaviour going forward?

I have written some tests and commented further on the SF bug tracker.
Hopefully the SF bug tracker accepts my e-mail (SF is slow at
responding). :-(

In the meantime, I've mirrored my comments on to GitHub
<https://github.com/PDLPorters/pdl/issues/124#issuecomment-113960704> so
they don't get lost.

Cheers,
- Zaki Mughal

> 
> Ed
> 
> From: Marek Gierliński 
> Sent: Tuesday, June 16, 2015 5:12 PM
> To: Chris Marshall ; pdl-devel@lists.sourceforge.net 
> Subject: Re: [Pdl-devel] Fwd: Re: [Pdl-general] Weird behaviour of stats with 
> bad values
> 
> 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 mailto:devel.chm...@gmail.com 
>                 To:  Derek Lamb mailto:de...@boulder.swri.edu, Marek 
> Gierliński mailto: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

> ------------------------------------------------------------------------------

> _______________________________________________
> 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