On Tue, 2022-02-15 at 10:21 +0200, Matti Picus wrote:
> 
> On 15/2/22 09:53, Stefan van der Walt wrote:
> > On Mon, Feb 14, 2022, at 12:45, Sebastian Berg wrote:
> > > But this is currently *not* consistently the case.  I wish to
> > > make this
> > > consistent.  The confusion is around object arrays, though:
> > > 
> > >      value = np.array(None, dtype=object)
> > >      arr[0] = value
> > > 
> > > Stores `value` without unpacking it currently.
> > > 
> > >      arr.fill(value)
> > > 
> > > Stores the `None` (unpacking `value`) if and only if `value` is
> > > 0-D.
> > That last behavior doesn't look right to me.  An object array
> > should be thought of as a collection of pointers, and if you happen
> > to want to point to a NumPy array, so be it.
> I think we should strive for consistency and code simplicity. In the 
> non-object case, it is clear that assignment will try to unpack an 
> ndarray. So we should do the same thing with object arrays, and
> document 
> the change in behaviour. Could we suggest a backward compatible 
> alternative (would using a record dtype fit better with Stefan's
> mental 
> model)?

A possible workaround might be `arr.itemset()`, although I am not quite
convinced that it should do that.
A structured array could behave differently maybe, but presumably:

    arr = np.array([1], "i,i")  # structured
    arr[0] = (np.array(3), np.array(3))

Should also unpack (with correct casting, not via `__int__`).

I guess we may have less special cases if we just unpack 0-D and _try_
to always pack N-D arrays with N>0 (which will often fail).

I have to admit, I don't care too much about that special case.  The
point is that if done right these special cases should be confined to
two places:

1. Discovering the dimension/dtype in `np.asarray(nested_objects)`
2. The `PyArray_Pack` that sets a single element of an array from an
   arbitrary Python object.

And in the first part, we need special paths for "object" anyway.  I
can live with a "special case", if it is confined to `PyArray_Pack`.

There are always weird things, e.g. Quantities does *never* want to be
unpacked right now even though it is a subclass so we already have
"tricky stuff" that really means we should channel all through "one
right way", no matter how that way actually looks like.

Cheers,

Sebastian


> 
> Matti
> 
> 
> _______________________________________________
> NumPy-Discussion mailing list -- numpy-discussion@python.org
> To unsubscribe send an email to numpy-discussion-le...@python.org
> https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
> Member address: sebast...@sipsolutions.net
> 

Attachment: signature.asc
Description: This is a digitally signed message part

_______________________________________________
NumPy-Discussion mailing list -- numpy-discussion@python.org
To unsubscribe send an email to numpy-discussion-le...@python.org
https://mail.python.org/mailman3/lists/numpy-discussion.python.org/
Member address: arch...@mail-archive.com

Reply via email to