@@ -558,14 +558,22 @@ def nan_equal(a1, a2):
558
558
return a1 .eq (a2 , nans_equal = True )
559
559
560
560
561
- def _handle_deprecated_argument_title (meta , title ):
562
- if meta is None :
563
- meta = Metadata ()
561
+ def _handle_meta (meta , title ):
562
+ """
563
+ Make sure meta is either None or a Metadata instance
564
+ """
564
565
if title is not None :
565
- import warnings
566
- warnings .warn ("title argument is deprecated. Please use meta argument instead" , FutureWarning , stacklevel = 3 )
566
+ if meta is None :
567
+ meta = Metadata ()
568
+ warnings .warn ("title argument is deprecated. Please use meta argument instead" , FutureWarning , stacklevel = 2 )
567
569
meta ['title' ] = title
568
- return meta
570
+ if meta is None or isinstance (meta , Metadata ):
571
+ return meta
572
+ # XXX: move this test in Metadata.__init__?
573
+ if not isinstance (meta , (list , dict , OrderedDict )):
574
+ raise TypeError ("Expected None, list of pairs, dict, OrderedDict or Metadata object "
575
+ "instead of {}" .format (type (meta ).__name__ ))
576
+ return Metadata (meta )
569
577
570
578
571
579
class LArray (ABCLArray ):
@@ -685,14 +693,14 @@ def __init__(self, data, axes=None, title=None, meta=None, dtype=None):
685
693
self .data = data
686
694
self .axes = axes
687
695
688
- meta = _handle_deprecated_argument_title (meta , title )
689
- self .meta = meta
696
+ meta = _handle_meta (meta , title )
697
+ self ._meta = meta
690
698
691
699
@property
692
700
def title (self ):
693
701
import warnings
694
702
warnings .warn ("title attribute is deprecated. Please use meta.title instead" , FutureWarning , stacklevel = 2 )
695
- return self ._meta .title if 'title' in self ._meta else None
703
+ return self ._meta .title if self . _meta is not None and 'title' in self ._meta else None
696
704
697
705
@title .setter
698
706
def title (self , title ):
@@ -711,14 +719,13 @@ def meta(self):
711
719
Metadata:
712
720
Metadata of the array.
713
721
"""
722
+ if self ._meta is None :
723
+ self ._meta = Metadata ()
714
724
return self ._meta
715
725
716
726
@meta .setter
717
727
def meta (self , meta ):
718
- if not isinstance (meta , (list , dict , OrderedDict , Metadata )):
719
- raise TypeError ("Expected list of pairs or dict or OrderedDict or Metadata object "
720
- "instead of {}" .format (type (meta ).__name__ ))
721
- self ._meta = meta if isinstance (meta , Metadata ) else Metadata (meta )
728
+ self ._meta = _handle_meta (meta , None )
722
729
723
730
# TODO: rename to inonzero and implement a label version of nonzero
724
731
# TODO: implement wildcard argument to avoid producing the combined labels
@@ -7400,7 +7407,8 @@ def zeros(axes, title=None, dtype=float, order='C', meta=None):
7400
7407
BE 0.0 0.0
7401
7408
FO 0.0 0.0
7402
7409
"""
7403
- meta = _handle_deprecated_argument_title (meta , title )
7410
+ # FIXME: the error message is wrong (stackdepth is wrong) because of _check_axes_argument
7411
+ meta = _handle_meta (meta , title )
7404
7412
axes = AxisCollection (axes )
7405
7413
return LArray (np .zeros (axes .shape , dtype , order ), axes , meta = meta )
7406
7414
@@ -7436,7 +7444,7 @@ def zeros_like(array, title=None, dtype=None, order='K', meta=None):
7436
7444
a0 0 0 0
7437
7445
a1 0 0 0
7438
7446
"""
7439
- meta = _handle_deprecated_argument_title (meta , title )
7447
+ meta = _handle_meta (meta , title )
7440
7448
return LArray (np .zeros_like (array , dtype , order ), array .axes , meta = meta )
7441
7449
7442
7450
@@ -7472,7 +7480,7 @@ def ones(axes, title=None, dtype=float, order='C', meta=None):
7472
7480
BE 1.0 1.0
7473
7481
FO 1.0 1.0
7474
7482
"""
7475
- meta = _handle_deprecated_argument_title (meta , title )
7483
+ meta = _handle_meta (meta , title )
7476
7484
axes = AxisCollection (axes )
7477
7485
return LArray (np .ones (axes .shape , dtype , order ), axes , meta = meta )
7478
7486
@@ -7508,7 +7516,7 @@ def ones_like(array, title=None, dtype=None, order='K', meta=None):
7508
7516
a0 1 1 1
7509
7517
a1 1 1 1
7510
7518
"""
7511
- meta = _handle_deprecated_argument_title (meta , title )
7519
+ meta = _handle_meta (meta , title )
7512
7520
axes = array .axes
7513
7521
return LArray (np .ones_like (array , dtype , order ), axes , meta = meta )
7514
7522
@@ -7545,7 +7553,7 @@ def empty(axes, title=None, dtype=float, order='C', meta=None):
7545
7553
BE 2.47311483356e-315 2.47498446195e-315
7546
7554
FO 0.0 6.07684618082e-31
7547
7555
"""
7548
- meta = _handle_deprecated_argument_title (meta , title )
7556
+ meta = _handle_meta (meta , title )
7549
7557
axes = AxisCollection (axes )
7550
7558
return LArray (np .empty (axes .shape , dtype , order ), axes , meta = meta )
7551
7559
@@ -7582,7 +7590,7 @@ def empty_like(array, title=None, dtype=None, order='K', meta=None):
7582
7590
a1 1.06099789568e-313 1.48539705397e-313
7583
7591
a2 1.90979621226e-313 2.33419537056e-313
7584
7592
"""
7585
- meta = _handle_deprecated_argument_title (meta , title )
7593
+ meta = _handle_meta (meta , title )
7586
7594
# cannot use empty() because order == 'K' is not understood
7587
7595
return LArray (np .empty_like (array .data , dtype , order ), array .axes , meta = meta )
7588
7596
@@ -7629,7 +7637,7 @@ def full(axes, fill_value, title=None, dtype=None, order='C', meta=None):
7629
7637
BE 0 1
7630
7638
FO 0 1
7631
7639
"""
7632
- meta = _handle_deprecated_argument_title (meta , title )
7640
+ meta = _handle_meta (meta , title )
7633
7641
if isinstance (fill_value , Axis ):
7634
7642
raise ValueError ("If you want to pass several axes or dimension lengths to full, you must pass them as a "
7635
7643
"list (using []) or tuple (using())." )
@@ -7673,7 +7681,7 @@ def full_like(array, fill_value, title=None, dtype=None, order='K', meta=None):
7673
7681
a0 5 5 5
7674
7682
a1 5 5 5
7675
7683
"""
7676
- meta = _handle_deprecated_argument_title (meta , title )
7684
+ meta = _handle_meta (meta , title )
7677
7685
# cannot use full() because order == 'K' is not understood
7678
7686
# cannot use np.full_like() because it would not handle LArray fill_value
7679
7687
res = empty_like (array , dtype = dtype , meta = meta )
@@ -7787,7 +7795,7 @@ def sequence(axis, initial=0, inc=None, mult=1, func=None, axes=None, title=None
7787
7795
year 2016 2017 2018 2019
7788
7796
1.0 2.0 3.0 3.0
7789
7797
"""
7790
- meta = _handle_deprecated_argument_title (meta , title )
7798
+ meta = _handle_meta (meta , title )
7791
7799
7792
7800
if inc is None :
7793
7801
inc = 1 if mult is 1 else 0
@@ -7984,7 +7992,7 @@ def ndtest(shape_or_axes, start=0, label_start=0, title=None, dtype=int, meta=No
7984
7992
BE 0 1
7985
7993
FO 2 3
7986
7994
"""
7987
- meta = _handle_deprecated_argument_title (meta , title )
7995
+ meta = _handle_meta (meta , title )
7988
7996
# XXX: try to come up with a syntax where start is before "end".
7989
7997
# For ndim > 1, I cannot think of anything nice.
7990
7998
if isinstance (shape_or_axes , int ):
@@ -8135,7 +8143,7 @@ def labels_array(axes, title=None, meta=None):
8135
8143
# nat\\sex M F
8136
8144
# BE BE,M BE,F
8137
8145
# FO FO,M FO,F
8138
- meta = _handle_deprecated_argument_title (meta , title )
8146
+ meta = _handle_meta (meta , title )
8139
8147
axes = AxisCollection (axes )
8140
8148
if len (axes ) > 1 :
8141
8149
res_axes = axes + Axis (axes .names , 'axis' )
@@ -8205,7 +8213,7 @@ def eye(rows, columns=None, k=0, title=None, dtype=None, meta=None):
8205
8213
1 0.0 0.0 1.0
8206
8214
2 0.0 0.0 0.0
8207
8215
"""
8208
- meta = _handle_deprecated_argument_title (meta , title )
8216
+ meta = _handle_meta (meta , title )
8209
8217
if columns is None :
8210
8218
columns = rows .copy () if isinstance (rows , Axis ) else rows
8211
8219
axes = AxisCollection ([rows , columns ])
@@ -8404,7 +8412,7 @@ def stack(elements=None, axis=None, title=None, meta=None, dtype=None, **kwargs)
8404
8412
M 0.0 0.5
8405
8413
F 0.0 0.5
8406
8414
"""
8407
- meta = _handle_deprecated_argument_title (meta , title )
8415
+ meta = _handle_meta (meta , title )
8408
8416
8409
8417
from larray import Session
8410
8418
0 commit comments