Copying a null PDL implicitly reads data from the null PDL (to copy it), which 
is invalid.  The behavior is certainly allowed based on that.

That said, I think it would be more consistent and less surprising to either:
        - retain nullness across copying and severing.
        - throw an error when copying or severing a null PDL.

I think the former is more “perlish”, and therefore I agree with Diab that this 
might be an improvement over the current behavior.




> On Oct 7, 2016, at 8:54 PM, Chris Marshall <devel.chm...@gmail.com> wrote:
> 
> Hi Diab-
> 
> I generally prefer have bug tickets be for
> things that are broken while enhancements and
> new features or API changes would be added as
> feature request tickets.  That said, I'm not usually
> picky either---except when we're in feature freeze
> for a new release and adding a feature request as
> a bug means I have a new problem to report in the
> Known_Problems file for the release...  :-)
> 
> The proposed copy behavior would "do what I mean" here which
> seems appropriate---but definitely not clear from the POD.
> 
> I think that the special nature of being a placeholder for LHS
> assignment operations should be clarified w.r.t. non-LHS
> operations and behavior.  For example, I read the docs as
> stating the Null piddle value is only "possible" on the LHS
> (other use is unspecified and null->copy => Empty seems to
> be a reasonable outcome---I still like the principle of
> least surprise value above...)
> 
> Seems a simple change but I don't know enough about
> the threadI and sever operations on Null piddles to
> apply something for the release I'm planning to push
> tomorrow AM.
> 
> Cheers,
> Chris
> 
> 
> 
> 
> 
> On 10/7/2016 17:30, Diab Jerius wrote:
>> [I'm moving discussion of this here at Chris' request and top-posting,
>> which looks like is
>> the default behavior for this list]
>> 
>> Executive summary,
>> 
>>   I expect PDL->null->copy to return a null piddle, it returns an empty one.
>> ]
>> 
>> I don't read the docs in the same way. Here's the excerpt from PDL::Core
>> 
>>     PDLs on the left-hand side of assignment can have the special value
>>     "Null". A null PDL has no dim list and no set size; its shape is
>>     determined by the computed shape of the expression being assigned to it.
>>     Null PDLs contain no values and can only be assigned to. When assigned
>>     to (e.g. via the ".=" operator), they cease to be null PDLs.
>> 
>> There's nothing here which says that null's are only valid on the LHS,
>> only that they have a special behavior when assigned to.  I would like
>> to be able to count on that behavior when a null piddle is copied
>> without having to explicitly check if it is null.  For example let's
>> say I have an object which contains one or more piddles and I'd like
>> to clone it, which would involve copying the piddles to the clone.  I
>> don't believe the code should care if the source piddle is null or
>> not.  I'd rather do this:
>> 
>>   use Safe::Isa;
>>   sub clone {
>>      my $self = shift;
>>      my %new = %$self;
>>      $new{$_} = $self->{$_}->copy for $self->{$_->$_isa( 'PDL' ) };
>>      return bless  \%new, ref $self;
>>   }
>> 
>> rather than
>> 
>>   use Safe::Isa;
>>   sub clone {
>>      my $self = shift;
>>      my %new = %$self;
>>      $new{$_} = $self->{$_}->isnull ? PDL->null : $self->{$_}->copy
>>        for $self->{$_->$_isa( 'PDL' ) };
>>      return bless  \%new, ref $self;
>>   }
>> 
>> It's inconsistent for copy() to return anything other than an exact copy.
>> 
>> Could you define what you mean by "inappropriate context"?  That might
>> help me understand your argument.
>> 
>> 
>> 
>> On Fri, Oct 7, 2016 at 12:34 PM, Chris Marshall <marshal...@users.sf.net> 
>> wrote:
>>> - **Group**: normal --> feature_request
>>> - **Priority**: 5 --> 1
>>> - **Comment**:
>>> 
>>> Per the docs a Null piddle is only valid on the LHS of an assignment 
>>> statement.  Changing this to a feature request since it seems to be more of 
>>> a discussion regarding how to treat/use Null piddles in inappropriate 
>>> contexts.  Croaking might be more appropriate although, ignoring the 
>>> specialness of Null piddles and trying to do the right (wrong) thing could 
>>> be more friendly.  API discussion is needed.  Please continue discussion on 
>>> the PDL mailing lists.
>>> 
>>> 
>>> 
>>> ---
>>> 
>>> ** [bugs:#427] PDL->null->copy returns an empty (not null) piddle**
>>> 
>>> **Status:** open
>>> **Group:** feature_request
>>> **Labels:** 2.016
>>> **Created:** Thu Oct 06, 2016 06:31 PM UTC by Diab Jerius
>>> **Last Updated:** Thu Oct 06, 2016 06:31 PM UTC
>>> **Owner:** nobody
>>> 
>>> 
>>> PDL v. 2.016
>>> 
>>> Copying a null piddle returns an empty piddle:
>>> 
>>> ~~~
>>> % perl -MPDL -E 'say PDL->null->copy->info'
>>> PDL: Byte D [0]
>>> 
>>> % perl -MPDL -E 'say PDL->null->copy->isnull'
>>> 0
>>> ~~~
>>> 
>>> I expect it to return another null piddle.
>>> 
>>> 
>>> ---
>>> 
>>> Sent from sourceforge.net because you indicated interest in 
>>> <https://sourceforge.net/p/pdl/bugs/427/>
>>> 
>>> 
>>> 
>>> To unsubscribe from further messages, please visit 
>>> <https://sourceforge.net/auth/subscriptions/>
>> ------------------------------------------------------------------------------
>> Check out the vibrant tech community on one of the world's most
>> engaging tech sites, SlashDot.org! http://sdm.link/slashdot
>> _______________________________________________
>> pdl-devel mailing list
>> pdl-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/pdl-devel
> 
> 
> ------------------------------------------------------------------------------
> Check out the vibrant tech community on one of the world's most 
> engaging tech sites, SlashDot.org! http://sdm.link/slashdot
> _______________________________________________
> pdl-devel mailing list
> pdl-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/pdl-devel
> 


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most 
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
pdl-devel mailing list
pdl-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/pdl-devel

Reply via email to