@@ -542,19 +542,28 @@ def test_bfill_dataset(ds):
542
542
543
543
@requires_bottleneck
544
544
@pytest .mark .parametrize (
545
- "y, lengths " ,
545
+ "y, lengths_expected " ,
546
546
[
547
- [np .arange (9 ), [[3 , 3 , 3 , 0 , 3 , 3 , 0 , 2 , 2 ]]],
548
- [np .arange (9 ) * 3 , [[9 , 9 , 9 , 0 , 9 , 9 , 0 , 6 , 6 ]]],
549
- [[0 , 2 , 5 , 6 , 7 , 8 , 10 , 12 , 14 ], [[6 , 6 , 6 , 0 , 4 , 4 , 0 , 4 , 4 ]]],
547
+ [np .arange (9 ), [[1 , 0 , 7 , 7 , 7 , 7 , 7 , 7 , 0 ], [3 , 3 , 3 , 0 , 3 , 3 , 0 , 2 , 2 ]]],
548
+ [
549
+ np .arange (9 ) * 3 ,
550
+ [[3 , 0 , 21 , 21 , 21 , 21 , 21 , 21 , 0 ], [9 , 9 , 9 , 0 , 9 , 9 , 0 , 6 , 6 ]],
551
+ ],
552
+ [
553
+ [0 , 2 , 5 , 6 , 7 , 8 , 10 , 12 , 14 ],
554
+ [[2 , 0 , 12 , 12 , 12 , 12 , 12 , 12 , 0 ], [6 , 6 , 6 , 0 , 4 , 4 , 0 , 4 , 4 ]],
555
+ ],
550
556
],
551
557
)
552
- def test_interpolate_na_nan_block_lengths (y , lengths ):
553
- arr = [[np .nan , np .nan , np .nan , 1 , np .nan , np .nan , 4 , np .nan , np .nan ]]
554
- da = xr .DataArray (arr * 2 , dims = ["x" , "y" ], coords = {"x" : [0 , 1 ], "y" : y })
558
+ def test_interpolate_na_nan_block_lengths (y , lengths_expected ):
559
+ arr = [
560
+ [np .nan , 1 , np .nan , np .nan , np .nan , np .nan , np .nan , np .nan , 4 ],
561
+ [np .nan , np .nan , np .nan , 1 , np .nan , np .nan , 4 , np .nan , np .nan ],
562
+ ]
563
+ da = xr .DataArray (arr , dims = ["x" , "y" ], coords = {"x" : [0 , 1 ], "y" : y })
555
564
index = get_clean_interp_index (da , dim = "y" , use_coordinate = True )
556
565
actual = _get_nan_block_lengths (da , dim = "y" , index = index )
557
- expected = da .copy (data = lengths * 2 )
566
+ expected = da .copy (data = lengths_expected )
558
567
assert_equal (actual , expected )
559
568
560
569
@@ -660,16 +669,17 @@ def test_interpolate_na_max_gap_time_specifier(
660
669
"coords" ,
661
670
[
662
671
pytest .param (None , marks = pytest .mark .xfail ()),
663
- {"x" : np .arange (4 ), "y" : np .arange (11 )},
672
+ {"x" : np .arange (4 ), "y" : np .arange (12 )},
664
673
],
665
674
)
666
675
def test_interpolate_na_2d (coords ):
676
+ n = np .nan
667
677
da = xr .DataArray (
668
678
[
669
- [1 , 2 , 3 , 4 , np . nan , 6 , 7 , np . nan , np . nan , np . nan , 11 ],
670
- [1 , 2 , 3 , np . nan , np . nan , 6 , 7 , np . nan , np . nan , np . nan , 11 ],
671
- [1 , 2 , 3 , np . nan , np . nan , 6 , 7 , np . nan , np . nan , np . nan , 11 ],
672
- [1 , 2 , 3 , 4 , np . nan , 6 , 7 , np . nan , np . nan , np . nan , 11 ],
679
+ [1 , 2 , 3 , 4 , n , 6 , n , n , n , 10 , 11 , n ],
680
+ [n , n , 3 , n , n , 6 , n , n , n , 10 , n , n ],
681
+ [n , n , 3 , n , n , 6 , n , n , n , 10 , n , n ],
682
+ [n , 2 , 3 , 4 , n , 6 , n , n , n , 10 , 11 , n ],
673
683
],
674
684
dims = ["x" , "y" ],
675
685
coords = coords ,
@@ -678,21 +688,32 @@ def test_interpolate_na_2d(coords):
678
688
actual = da .interpolate_na ("y" , max_gap = 2 )
679
689
expected_y = da .copy (
680
690
data = [
681
- [1 , 2 , 3 , 4 , 5 , 6 , 7 , np . nan , np . nan , np . nan , 11 ],
682
- [1 , 2 , 3 , np . nan , np . nan , 6 , 7 , np . nan , np . nan , np . nan , 11 ],
683
- [1 , 2 , 3 , np . nan , np . nan , 6 , 7 , np . nan , np . nan , np . nan , 11 ],
684
- [1 , 2 , 3 , 4 , 5 , 6 , 7 , np . nan , np . nan , np . nan , 11 ],
691
+ [1 , 2 , 3 , 4 , 5 , 6 , n , n , n , 10 , 11 , n ],
692
+ [n , n , 3 , n , n , 6 , n , n , n , 10 , n , n ],
693
+ [n , n , 3 , n , n , 6 , n , n , n , 10 , n , n ],
694
+ [n , 2 , 3 , 4 , 5 , 6 , n , n , n , 10 , 11 , n ],
685
695
]
686
696
)
687
697
assert_equal (actual , expected_y )
688
698
699
+ actual = da .interpolate_na ("y" , max_gap = 1 , fill_value = "extrapolate" )
700
+ expected_y_extra = da .copy (
701
+ data = [
702
+ [1 , 2 , 3 , 4 , n , 6 , n , n , n , 10 , 11 , 12 ],
703
+ [n , n , 3 , n , n , 6 , n , n , n , 10 , n , n ],
704
+ [n , n , 3 , n , n , 6 , n , n , n , 10 , n , n ],
705
+ [1 , 2 , 3 , 4 , n , 6 , n , n , n , 10 , 11 , 12 ],
706
+ ]
707
+ )
708
+ assert_equal (actual , expected_y_extra )
709
+
689
710
actual = da .interpolate_na ("x" , max_gap = 3 )
690
711
expected_x = xr .DataArray (
691
712
[
692
- [1 , 2 , 3 , 4 , np . nan , 6 , 7 , np . nan , np . nan , np . nan , 11 ],
693
- [1 , 2 , 3 , 4 , np . nan , 6 , 7 , np . nan , np . nan , np . nan , 11 ],
694
- [1 , 2 , 3 , 4 , np . nan , 6 , 7 , np . nan , np . nan , np . nan , 11 ],
695
- [1 , 2 , 3 , 4 , np . nan , 6 , 7 , np . nan , np . nan , np . nan , 11 ],
713
+ [1 , 2 , 3 , 4 , n , 6 , n , n , n , 10 , 11 , n ],
714
+ [n , 2 , 3 , 4 , n , 6 , n , n , n , 10 , 11 , n ],
715
+ [n , 2 , 3 , 4 , n , 6 , n , n , n , 10 , 11 , n ],
716
+ [n , 2 , 3 , 4 , n , 6 , n , n , n , 10 , 11 , n ],
696
717
],
697
718
dims = ["x" , "y" ],
698
719
coords = coords ,
0 commit comments