@@ -927,10 +927,11 @@ def backfill_2d_inplace_bool(ndarray[uint8_t, ndim=2] values,
927
927
@ cython.wraparound (False )
928
928
@ cython.boundscheck (False )
929
929
def take_1d_float64 (ndarray[float64_t] values , ndarray[int32_t] indexer ,
930
- out = None ):
930
+ out = None , fill_value = np.nan ):
931
931
cdef:
932
932
Py_ssize_t i, n, idx
933
933
ndarray[float64_t] outbuf
934
+ float64_t fv
934
935
935
936
n = len (indexer)
936
937
@@ -939,20 +940,30 @@ def take_1d_float64(ndarray[float64_t] values, ndarray[int32_t] indexer,
939
940
else :
940
941
outbuf = out
941
942
942
- for i in range (n):
943
- idx = indexer[i]
944
- if idx == - 1 :
945
- outbuf[i] = NaN
946
- else :
947
- outbuf[i] = values[idx]
943
+ if False and _checknan(fill_value):
944
+ for i in range (n):
945
+ idx = indexer[i]
946
+ if idx == - 1 :
947
+ raise ValueError (' No NA values allowed' )
948
+ else :
949
+ outbuf[i] = values[idx]
950
+ else :
951
+ fv = fill_value
952
+ for i in range (n):
953
+ idx = indexer[i]
954
+ if idx == - 1 :
955
+ outbuf[i] = fv
956
+ else :
957
+ outbuf[i] = values[idx]
948
958
949
959
@ cython.wraparound (False )
950
960
@ cython.boundscheck (False )
951
961
def take_1d_object (ndarray[object] values , ndarray[int32_t] indexer ,
952
- out = None ):
962
+ out = None , fill_value = np.nan ):
953
963
cdef:
954
964
Py_ssize_t i, n, idx
955
965
ndarray[object ] outbuf
966
+ object fv
956
967
957
968
n = len (indexer)
958
969
@@ -961,20 +972,30 @@ def take_1d_object(ndarray[object] values, ndarray[int32_t] indexer,
961
972
else :
962
973
outbuf = out
963
974
964
- for i in range (n):
965
- idx = indexer[i]
966
- if idx == - 1 :
967
- outbuf[i] = NaN
968
- else :
969
- outbuf[i] = values[idx]
975
+ if False and _checknan(fill_value):
976
+ for i in range (n):
977
+ idx = indexer[i]
978
+ if idx == - 1 :
979
+ raise ValueError (' No NA values allowed' )
980
+ else :
981
+ outbuf[i] = values[idx]
982
+ else :
983
+ fv = fill_value
984
+ for i in range (n):
985
+ idx = indexer[i]
986
+ if idx == - 1 :
987
+ outbuf[i] = fv
988
+ else :
989
+ outbuf[i] = values[idx]
970
990
971
991
@ cython.wraparound (False )
972
992
@ cython.boundscheck (False )
973
993
def take_1d_int32 (ndarray[int32_t] values , ndarray[int32_t] indexer ,
974
- out = None ):
994
+ out = None , fill_value = np.nan ):
975
995
cdef:
976
996
Py_ssize_t i, n, idx
977
997
ndarray[int32_t] outbuf
998
+ int32_t fv
978
999
979
1000
n = len (indexer)
980
1001
@@ -983,20 +1004,30 @@ def take_1d_int32(ndarray[int32_t] values, ndarray[int32_t] indexer,
983
1004
else :
984
1005
outbuf = out
985
1006
986
- for i in range (n):
987
- idx = indexer[i]
988
- if idx == - 1 :
989
- raise ValueError (' No NA values allowed' )
990
- else :
991
- outbuf[i] = values[idx]
1007
+ if True and _checknan(fill_value):
1008
+ for i in range (n):
1009
+ idx = indexer[i]
1010
+ if idx == - 1 :
1011
+ raise ValueError (' No NA values allowed' )
1012
+ else :
1013
+ outbuf[i] = values[idx]
1014
+ else :
1015
+ fv = fill_value
1016
+ for i in range (n):
1017
+ idx = indexer[i]
1018
+ if idx == - 1 :
1019
+ outbuf[i] = fv
1020
+ else :
1021
+ outbuf[i] = values[idx]
992
1022
993
1023
@ cython.wraparound (False )
994
1024
@ cython.boundscheck (False )
995
1025
def take_1d_int64 (ndarray[int64_t] values , ndarray[int32_t] indexer ,
996
- out = None ):
1026
+ out = None , fill_value = np.nan ):
997
1027
cdef:
998
1028
Py_ssize_t i, n, idx
999
1029
ndarray[int64_t] outbuf
1030
+ int64_t fv
1000
1031
1001
1032
n = len (indexer)
1002
1033
@@ -1005,20 +1036,30 @@ def take_1d_int64(ndarray[int64_t] values, ndarray[int32_t] indexer,
1005
1036
else :
1006
1037
outbuf = out
1007
1038
1008
- for i in range (n):
1009
- idx = indexer[i]
1010
- if idx == - 1 :
1011
- raise ValueError (' No NA values allowed' )
1012
- else :
1013
- outbuf[i] = values[idx]
1039
+ if True and _checknan(fill_value):
1040
+ for i in range (n):
1041
+ idx = indexer[i]
1042
+ if idx == - 1 :
1043
+ raise ValueError (' No NA values allowed' )
1044
+ else :
1045
+ outbuf[i] = values[idx]
1046
+ else :
1047
+ fv = fill_value
1048
+ for i in range (n):
1049
+ idx = indexer[i]
1050
+ if idx == - 1 :
1051
+ outbuf[i] = fv
1052
+ else :
1053
+ outbuf[i] = values[idx]
1014
1054
1015
1055
@ cython.wraparound (False )
1016
1056
@ cython.boundscheck (False )
1017
1057
def take_1d_bool (ndarray[uint8_t] values , ndarray[int32_t] indexer ,
1018
- out = None ):
1058
+ out = None , fill_value = np.nan ):
1019
1059
cdef:
1020
1060
Py_ssize_t i, n, idx
1021
1061
ndarray[uint8_t] outbuf
1062
+ uint8_t fv
1022
1063
1023
1064
n = len (indexer)
1024
1065
@@ -1027,12 +1068,21 @@ def take_1d_bool(ndarray[uint8_t] values, ndarray[int32_t] indexer,
1027
1068
else :
1028
1069
outbuf = out
1029
1070
1030
- for i in range (n):
1031
- idx = indexer[i]
1032
- if idx == - 1 :
1033
- raise ValueError (' No NA values allowed' )
1034
- else :
1035
- outbuf[i] = values[idx]
1071
+ if True and _checknan(fill_value):
1072
+ for i in range (n):
1073
+ idx = indexer[i]
1074
+ if idx == - 1 :
1075
+ raise ValueError (' No NA values allowed' )
1076
+ else :
1077
+ outbuf[i] = values[idx]
1078
+ else :
1079
+ fv = fill_value
1080
+ for i in range (n):
1081
+ idx = indexer[i]
1082
+ if idx == - 1 :
1083
+ outbuf[i] = fv
1084
+ else :
1085
+ outbuf[i] = values[idx]
1036
1086
1037
1087
1038
1088
@ cython.boundscheck (False )
@@ -1404,7 +1454,7 @@ def take_2d_axis0_int32(ndarray[int32_t, ndim=2] values,
1404
1454
1405
1455
if idx == - 1 :
1406
1456
for j from 0 <= j < k:
1407
- raise ValueError ( ' No NA values allowed ' )
1457
+ True
1408
1458
else :
1409
1459
for j from 0 <= j < k:
1410
1460
outbuf[i, j] = values[idx, j]
@@ -1431,7 +1481,7 @@ def take_2d_axis0_int64(ndarray[int64_t, ndim=2] values,
1431
1481
1432
1482
if idx == - 1 :
1433
1483
for j from 0 <= j < k:
1434
- raise ValueError ( ' No NA values allowed ' )
1484
+ True
1435
1485
else :
1436
1486
for j from 0 <= j < k:
1437
1487
outbuf[i, j] = values[idx, j]
@@ -1458,7 +1508,7 @@ def take_2d_axis0_bool(ndarray[uint8_t, ndim=2] values,
1458
1508
1459
1509
if idx == - 1 :
1460
1510
for j from 0 <= j < k:
1461
- raise ValueError ( ' No NA values allowed ' )
1511
+ True
1462
1512
else :
1463
1513
for j from 0 <= j < k:
1464
1514
outbuf[i, j] = values[idx, j]
@@ -1540,7 +1590,7 @@ def take_2d_axis1_int32(ndarray[int32_t, ndim=2] values,
1540
1590
1541
1591
if idx == - 1 :
1542
1592
for i in range (n):
1543
- raise ValueError ( ' No NA values allowed ' )
1593
+ True
1544
1594
else :
1545
1595
for i in range (n):
1546
1596
outbuf[i, j] = values[i, idx]
@@ -1567,7 +1617,7 @@ def take_2d_axis1_int64(ndarray[int64_t, ndim=2] values,
1567
1617
1568
1618
if idx == - 1 :
1569
1619
for i in range (n):
1570
- raise ValueError ( ' No NA values allowed ' )
1620
+ True
1571
1621
else :
1572
1622
for i in range (n):
1573
1623
outbuf[i, j] = values[i, idx]
@@ -1594,7 +1644,7 @@ def take_2d_axis1_bool(ndarray[uint8_t, ndim=2] values,
1594
1644
1595
1645
if idx == - 1 :
1596
1646
for i in range (n):
1597
- raise ValueError ( ' No NA values allowed ' )
1647
+ True
1598
1648
else :
1599
1649
for i in range (n):
1600
1650
outbuf[i, j] = values[i, idx]
0 commit comments