13
13
Iterator ,
14
14
Mapping ,
15
15
TypeVar ,
16
+ Union ,
16
17
overload ,
17
18
)
18
19
19
20
import numpy as np
20
21
import pandas as pd
21
22
22
23
from . import dtypes , duck_array_ops , formatting , formatting_html , ops
23
- from .npcompat import DTypeLike
24
+ from .npcompat import DTypeLike , DTypeLikeSave
24
25
from .options import OPTIONS , _get_keep_attrs
25
26
from .pycompat import is_duck_dask_array
26
27
from .rolling_exp import RollingExp
@@ -1577,26 +1578,45 @@ def __getitem__(self, value):
1577
1578
raise NotImplementedError ()
1578
1579
1579
1580
1581
+ DTypeMaybeMapping = Union [DTypeLikeSave , Mapping [Any , DTypeLikeSave ]]
1582
+
1583
+
1580
1584
@overload
1581
- def full_like (
1582
- other : Dataset ,
1583
- fill_value ,
1584
- dtype : DTypeLike | Mapping [Any , DTypeLike ] = None ,
1585
- ) -> Dataset :
1585
+ def full_like (other : DataArray , fill_value : Any , dtype : DTypeLikeSave ) -> DataArray :
1586
+ ...
1587
+
1588
+
1589
+ @overload
1590
+ def full_like (other : Dataset , fill_value : Any , dtype : DTypeMaybeMapping ) -> Dataset :
1586
1591
...
1587
1592
1588
1593
1589
1594
@overload
1590
- def full_like (other : DataArray , fill_value , dtype : DTypeLike = None ) -> DataArray :
1595
+ def full_like (other : Variable , fill_value : Any , dtype : DTypeLikeSave ) -> Variable :
1591
1596
...
1592
1597
1593
1598
1594
1599
@overload
1595
- def full_like (other : Variable , fill_value , dtype : DTypeLike = None ) -> Variable :
1600
+ def full_like (
1601
+ other : Dataset | DataArray , fill_value : Any , dtype : DTypeMaybeMapping = None
1602
+ ) -> Dataset | DataArray :
1596
1603
...
1597
1604
1598
1605
1599
- def full_like (other , fill_value , dtype = None ):
1606
+ @overload
1607
+ def full_like (
1608
+ other : Dataset | DataArray | Variable ,
1609
+ fill_value : Any ,
1610
+ dtype : DTypeMaybeMapping = None ,
1611
+ ) -> Dataset | DataArray | Variable :
1612
+ ...
1613
+
1614
+
1615
+ def full_like (
1616
+ other : Dataset | DataArray | Variable ,
1617
+ fill_value : Any ,
1618
+ dtype : DTypeMaybeMapping = None ,
1619
+ ) -> Dataset | DataArray | Variable :
1600
1620
"""Return a new object with the same shape and type as a given object.
1601
1621
1602
1622
Parameters
@@ -1711,26 +1731,26 @@ def full_like(other, fill_value, dtype=None):
1711
1731
f"fill_value must be scalar or, for datasets, a dict-like. Received { fill_value } instead."
1712
1732
)
1713
1733
1714
- if not isinstance (other , Dataset ) and isinstance (dtype , Mapping ):
1715
- raise ValueError (
1716
- "'dtype' cannot be dict-like when passing a DataArray or Variable"
1717
- )
1718
-
1719
1734
if isinstance (other , Dataset ):
1720
1735
if not isinstance (fill_value , dict ):
1721
1736
fill_value = {k : fill_value for k in other .data_vars .keys ()}
1722
1737
1738
+ dtype_ : Mapping [Any , DTypeLikeSave ]
1723
1739
if not isinstance (dtype , Mapping ):
1724
1740
dtype_ = {k : dtype for k in other .data_vars .keys ()}
1725
1741
else :
1726
1742
dtype_ = dtype
1727
1743
1728
1744
data_vars = {
1729
- k : _full_like_variable (v , fill_value .get (k , dtypes .NA ), dtype_ .get (k , None ))
1745
+ k : _full_like_variable (
1746
+ v .variable , fill_value .get (k , dtypes .NA ), dtype_ .get (k , None )
1747
+ )
1730
1748
for k , v in other .data_vars .items ()
1731
1749
}
1732
1750
return Dataset (data_vars , coords = other .coords , attrs = other .attrs )
1733
1751
elif isinstance (other , DataArray ):
1752
+ if isinstance (dtype , Mapping ):
1753
+ raise ValueError ("'dtype' cannot be dict-like when passing a DataArray" )
1734
1754
return DataArray (
1735
1755
_full_like_variable (other .variable , fill_value , dtype ),
1736
1756
dims = other .dims ,
@@ -1739,12 +1759,16 @@ def full_like(other, fill_value, dtype=None):
1739
1759
name = other .name ,
1740
1760
)
1741
1761
elif isinstance (other , Variable ):
1762
+ if isinstance (dtype , Mapping ):
1763
+ raise ValueError ("'dtype' cannot be dict-like when passing a Variable" )
1742
1764
return _full_like_variable (other , fill_value , dtype )
1743
1765
else :
1744
1766
raise TypeError ("Expected DataArray, Dataset, or Variable" )
1745
1767
1746
1768
1747
- def _full_like_variable (other , fill_value , dtype : DTypeLike = None ):
1769
+ def _full_like_variable (
1770
+ other : Variable , fill_value : Any , dtype : DTypeLike = None
1771
+ ) -> Variable :
1748
1772
"""Inner function of full_like, where other must be a variable"""
1749
1773
from .variable import Variable
1750
1774
@@ -1765,7 +1789,38 @@ def _full_like_variable(other, fill_value, dtype: DTypeLike = None):
1765
1789
return Variable (dims = other .dims , data = data , attrs = other .attrs )
1766
1790
1767
1791
1768
- def zeros_like (other , dtype : DTypeLike = None ):
1792
+ @overload
1793
+ def zeros_like (other : DataArray , dtype : DTypeLikeSave ) -> DataArray :
1794
+ ...
1795
+
1796
+
1797
+ @overload
1798
+ def zeros_like (other : Dataset , dtype : DTypeMaybeMapping ) -> Dataset :
1799
+ ...
1800
+
1801
+
1802
+ @overload
1803
+ def zeros_like (other : Variable , dtype : DTypeLikeSave ) -> Variable :
1804
+ ...
1805
+
1806
+
1807
+ @overload
1808
+ def zeros_like (
1809
+ other : Dataset | DataArray , dtype : DTypeMaybeMapping = None
1810
+ ) -> Dataset | DataArray :
1811
+ ...
1812
+
1813
+
1814
+ @overload
1815
+ def zeros_like (
1816
+ other : Dataset | DataArray | Variable , dtype : DTypeMaybeMapping = None
1817
+ ) -> Dataset | DataArray | Variable :
1818
+ ...
1819
+
1820
+
1821
+ def zeros_like (
1822
+ other : Dataset | DataArray | Variable , dtype : DTypeMaybeMapping = None
1823
+ ) -> Dataset | DataArray | Variable :
1769
1824
"""Return a new object of zeros with the same shape and
1770
1825
type as a given dataarray or dataset.
1771
1826
@@ -1821,7 +1876,38 @@ def zeros_like(other, dtype: DTypeLike = None):
1821
1876
return full_like (other , 0 , dtype )
1822
1877
1823
1878
1824
- def ones_like (other , dtype : DTypeLike = None ):
1879
+ @overload
1880
+ def ones_like (other : DataArray , dtype : DTypeLikeSave ) -> DataArray :
1881
+ ...
1882
+
1883
+
1884
+ @overload
1885
+ def ones_like (other : Dataset , dtype : DTypeMaybeMapping ) -> Dataset :
1886
+ ...
1887
+
1888
+
1889
+ @overload
1890
+ def ones_like (other : Variable , dtype : DTypeLikeSave ) -> Variable :
1891
+ ...
1892
+
1893
+
1894
+ @overload
1895
+ def ones_like (
1896
+ other : Dataset | DataArray , dtype : DTypeMaybeMapping = None
1897
+ ) -> Dataset | DataArray :
1898
+ ...
1899
+
1900
+
1901
+ @overload
1902
+ def ones_like (
1903
+ other : Dataset | DataArray | Variable , dtype : DTypeMaybeMapping = None
1904
+ ) -> Dataset | DataArray | Variable :
1905
+ ...
1906
+
1907
+
1908
+ def ones_like (
1909
+ other : Dataset | DataArray | Variable , dtype : DTypeMaybeMapping = None
1910
+ ) -> Dataset | DataArray | Variable :
1825
1911
"""Return a new object of ones with the same shape and
1826
1912
type as a given dataarray or dataset.
1827
1913
0 commit comments