Skip to content

Commit ae45a84

Browse files
committed
release 1.30.22.5
1 parent 139dedb commit ae45a84

File tree

3 files changed

+76
-48
lines changed

3 files changed

+76
-48
lines changed

core/src/DdbPythonUtil.cpp

Lines changed: 36 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,11 @@ void throwExceptionAboutNumpyVersion(int row_index, const string &value, const s
347347
}
348348
}
349349

350+
static inline void createAllNullVector(VectorSP &ddbVec, DATA_TYPE type, INDEX size, int exparam=0) {
351+
ddbVec = Util::createVector(type, size, size, true, exparam);
352+
ddbVec->fill(0, size, Constant::void_);
353+
}
354+
350355
bool addBoolVector(const py::array &pyVec, size_t size, size_t offset, char nullValue, const Type &type,
351356
std::function<void(char *, int)> f, const TableVectorInfo &info) {
352357
int bufsize = std::min(65535, (int)size);
@@ -1145,35 +1150,35 @@ ConstantSP toDolphinDB_NDArray(py::array obj, Type typeIndicator, const CHILD_VE
11451150
switch (typeInfer) {
11461151
case DT_BOOL:
11471152
case DT_CHAR: {
1148-
py::array_t<int8_t> series_array = py::cast<py::array_t<int8_t>>(obj);
1153+
py::array_t<int8_t> series_array = py::cast<py::array_t<int8_t, py::array::f_style | py::array::forcecast>>(obj);
11491154
size_t size = series_array.size();
11501155
ddbVec = Util::createVector(typeInfer, 0, size);
11511156
ddbVec->appendChar(reinterpret_cast<char*>(const_cast<int8_t*>(series_array.data())), size);
11521157
break;
11531158
}
11541159
case DT_SHORT: {
1155-
py::array_t<int16_t> series_array = py::cast<py::array_t<int16_t>>(obj);
1160+
py::array_t<int16_t> series_array = py::cast<py::array_t<int16_t, py::array::f_style | py::array::forcecast>>(obj);
11561161
size_t size = series_array.size();
11571162
ddbVec = Util::createVector(typeInfer, 0, size);
11581163
ddbVec->appendShort(reinterpret_cast<short*>(const_cast<int16_t*>(series_array.data())), size);
11591164
break;
11601165
}
11611166
case DT_INT: {
1162-
py::array_t<int32_t> series_array = py::cast<py::array_t<int32_t>>(obj);
1167+
py::array_t<int32_t> series_array = py::cast<py::array_t<int32_t, py::array::f_style | py::array::forcecast>>(obj);
11631168
size_t size = series_array.size();
11641169
ddbVec = Util::createVector(typeInfer, 0, size);
11651170
ddbVec->appendInt(reinterpret_cast<int*>(const_cast<int32_t*>(series_array.data())), size);
11661171
break;
11671172
}
11681173
case DT_LONG: {
1169-
py::array_t<int64_t> series_array = py::cast<py::array_t<int64_t>>(obj);
1174+
py::array_t<int64_t> series_array = py::cast<py::array_t<int64_t, py::array::f_style | py::array::forcecast>>(obj);
11701175
size_t size = series_array.size();
11711176
ddbVec = Util::createVector(typeInfer, 0, size);
11721177
ddbVec->appendLong(reinterpret_cast<long long*>(const_cast<int64_t*>(series_array.data())), size);
11731178
break;
11741179
}
11751180
case DT_MONTH: {
1176-
py::array_t<int64_t> series_array = py::cast<py::array_t<int64_t>>(obj);
1181+
py::array_t<int64_t> series_array = py::cast<py::array_t<int64_t, py::array::f_style | py::array::forcecast>>(obj);
11771182
size_t size = series_array.size();
11781183
int64_t* buf = series_array.mutable_data();
11791184
for (int i = 0; i < size; ++i) {
@@ -1194,14 +1199,14 @@ ConstantSP toDolphinDB_NDArray(py::array obj, Type typeIndicator, const CHILD_VE
11941199
case DT_TIMESTAMP:
11951200
case DT_NANOTIME:
11961201
case DT_NANOTIMESTAMP: {
1197-
py::array_t<int64_t> series_array = py::cast<py::array_t<int64_t>>(obj);
1202+
py::array_t<int64_t> series_array = py::cast<py::array_t<int64_t, py::array::f_style | py::array::forcecast>>(obj);
11981203
size_t size = series_array.size();
11991204
ddbVec = Util::createVector(typeInfer, 0, size);
12001205
ddbVec->appendLong(reinterpret_cast<long long*>(const_cast<int64_t*>(series_array.data())), size);
12011206
break;
12021207
}
12031208
case DT_FLOAT: {
1204-
py::array_t<float_t> series_array = py::cast<py::array_t<float_t>>(obj);
1209+
py::array_t<float_t> series_array = py::cast<py::array_t<float_t, py::array::f_style | py::array::forcecast>>(obj);
12051210
size_t size = series_array.size();
12061211
ddbVec = Util::createVector(typeInfer, 0, size);
12071212
bool hasNull = false;
@@ -1218,7 +1223,7 @@ ConstantSP toDolphinDB_NDArray(py::array obj, Type typeIndicator, const CHILD_VE
12181223
break;
12191224
}
12201225
case DT_DOUBLE: {
1221-
py::array_t<double_t> series_array = py::cast<py::array_t<double_t>>(obj);
1226+
py::array_t<double_t> series_array = py::cast<py::array_t<double_t, py::array::f_style | py::array::forcecast>>(obj);
12221227
size_t size = series_array.size();
12231228
ddbVec = Util::createVector(typeInfer, 0, size);
12241229
bool hasNull = false;
@@ -1304,8 +1309,8 @@ ConstantSP toDolphinDB_NDArray(py::array obj, Type typeIndicator, const CHILD_VE
13041309
}
13051310
if (all_Null) {
13061311
DLOG("nullType: ", Util::getDataTypeString(nullType.first), nullType.second);
1307-
ddbVec = Util::createVector(typeInfer == DT_UNK || typeInfer == DT_OBJECT ? DT_DOUBLE : typeInfer, size, size);
1308-
ddbVec->fill(0, size, Constant::void_);
1312+
DATA_TYPE finalType = typeInfer == DT_UNK || typeInfer == DT_OBJECT ? DT_DOUBLE : typeInfer;
1313+
createAllNullVector(ddbVec, finalType, size);
13091314
return ddbVec;
13101315
}
13111316
py::array &series_array = obj;
@@ -1444,8 +1449,7 @@ ConstantSP toDolphinDB_NDArray(py::array obj, Type typeIndicator, const CHILD_VE
14441449
}
14451450
}
14461451
if (index == size) { // All None
1447-
ddbVec = Util::createVector(typeInfer, size, size, true, 0);
1448-
ddbVec->fill(0, size, Constant::void_);
1452+
createAllNullVector(ddbVec, typeInfer, size, 0);
14491453
break;
14501454
}
14511455
if (exparam != -1) { // Infer exparam
@@ -1535,8 +1539,8 @@ toDolphinDB_Vector_TupleOrList(T obj,
15351539
typeIndicator = nullType;
15361540
}
15371541
if (all_Null) {
1538-
ddbVec = Util::createVector(typeInfer == DT_UNK ? DT_DOUBLE : typeInfer, size, size);
1539-
ddbVec->fill(0, size, Constant::void_);
1542+
DATA_TYPE finalType = typeInfer == DT_UNK ? DT_DOUBLE : typeInfer;
1543+
createAllNullVector(ddbVec, finalType, size);
15401544
return ddbVec;
15411545
}
15421546
DLOG("typeInfer: ", typeInfer);
@@ -2009,28 +2013,28 @@ ConstantSP toDolphinDB_Vector_SeriesOrIndex(py::object obj, Type typeIndicator,
20092013
switch (typeInfer) {
20102014
case DT_BOOL:
20112015
case DT_CHAR: {
2012-
py::array_t<int8_t> series_array = py::cast<py::array_t<int8_t>>(obj);
2016+
py::array_t<int8_t> series_array = py::cast<py::array_t<int8_t, py::array::f_style | py::array::forcecast>>(obj);
20132017
size_t size = series_array.size();
20142018
ddbVec = Util::createVector(typeInfer, 0, size);
20152019
ddbVec->appendChar(reinterpret_cast<char*>(const_cast<int8_t*>(series_array.data())), size);
20162020
break;
20172021
}
20182022
case DT_SHORT: {
2019-
py::array_t<int16_t> series_array = py::cast<py::array_t<int16_t>>(obj);
2023+
py::array_t<int16_t> series_array = py::cast<py::array_t<int16_t, py::array::f_style | py::array::forcecast>>(obj);
20202024
size_t size = series_array.size();
20212025
ddbVec = Util::createVector(typeInfer, 0, size);
20222026
ddbVec->appendShort(reinterpret_cast<short*>(const_cast<int16_t*>(series_array.data())), size);
20232027
break;
20242028
}
20252029
case DT_INT: {
2026-
py::array_t<int32_t> series_array = py::cast<py::array_t<int32_t>>(obj);
2030+
py::array_t<int32_t> series_array = py::cast<py::array_t<int32_t, py::array::f_style | py::array::forcecast>>(obj);
20272031
size_t size = series_array.size();
20282032
ddbVec = Util::createVector(typeInfer, 0, size);
20292033
ddbVec->appendInt(reinterpret_cast<int*>(const_cast<int32_t*>(series_array.data())), size);
20302034
break;
20312035
}
20322036
case DT_LONG: {
2033-
py::array_t<int64_t> series_array = py::cast<py::array_t<int64_t>>(obj);
2037+
py::array_t<int64_t> series_array = py::cast<py::array_t<int64_t, py::array::f_style | py::array::forcecast>>(obj);
20342038
size_t size = series_array.size();
20352039
ddbVec = Util::createVector(typeInfer, 0, size);
20362040
ddbVec->appendLong(reinterpret_cast<long long*>(const_cast<int64_t*>(series_array.data())), size);
@@ -2049,31 +2053,31 @@ ConstantSP toDolphinDB_Vector_SeriesOrIndex(py::object obj, Type typeIndicator,
20492053
// dtype = datetime64[ns] | datetime64[s] | datetime64[ms]
20502054
// In Pandas2.0 : s -> int32 | ms -> int64, need special case
20512055
if (!DdbPythonUtil::preserved_->pd_above_2_00_ || dtype.equal(DdbPythonUtil::preserved_->npdatetime64ns_())) {
2052-
py::array_t<int64_t> series_array = py::cast<py::array_t<int64_t>>(obj);
2056+
py::array_t<int64_t> series_array = py::cast<py::array_t<int64_t, py::array::f_style | py::array::forcecast>>(obj);
20532057
size_t size = series_array.size();
20542058
ddbVec = Util::createVector(DT_NANOTIMESTAMP, 0, size);
20552059
ddbVec->appendLong(reinterpret_cast<long long*>(const_cast<int64_t*>(series_array.data())), size);
20562060
if (typeInfer != DT_NANOTIMESTAMP)
20572061
ddbVec = ddbVec->castTemporal(typeInfer);
20582062
}
20592063
else if (dtype.equal(DdbPythonUtil::preserved_->npdatetime64ms_())) {
2060-
py::array_t<int64_t> series_array = py::cast<py::array_t<int64_t>>(obj);
2064+
py::array_t<int64_t> series_array = py::cast<py::array_t<int64_t, py::array::f_style | py::array::forcecast>>(obj);
20612065
size_t size = series_array.size();
20622066
ddbVec = Util::createVector(DT_TIMESTAMP, 0, size);
20632067
ddbVec->appendLong(reinterpret_cast<long long*>(const_cast<int64_t*>(series_array.data())), size);
20642068
if (typeInfer != DT_TIMESTAMP)
20652069
ddbVec = ddbVec->castTemporal(typeInfer);
20662070
}
20672071
else if (dtype.equal(DdbPythonUtil::preserved_->npdatetime64s_())) {
2068-
py::array_t<int64_t> series_array = py::cast<py::array_t<int64_t>>(obj);
2072+
py::array_t<int64_t> series_array = py::cast<py::array_t<int64_t, py::array::f_style | py::array::forcecast>>(obj);
20692073
size_t size = series_array.size();
20702074
ddbVec = Util::createVector(DT_DATETIME, 0, size);
20712075
ddbVec->appendLong(reinterpret_cast<long long*>(const_cast<int64_t*>(series_array.data())), size);
20722076
if (typeInfer != DT_DATETIME)
20732077
ddbVec = ddbVec->castTemporal(typeInfer);
20742078
}
20752079
else if (dtype.equal(DdbPythonUtil::preserved_->npdatetime64us_())) {
2076-
py::array_t<int64_t> series_array = py::cast<py::array_t<int64_t>>(obj);
2080+
py::array_t<int64_t> series_array = py::cast<py::array_t<int64_t, py::array::f_style | py::array::forcecast>>(obj);
20772081
size_t size = series_array.size();
20782082
ddbVec = Util::createVector(DT_NANOTIMESTAMP, 0, size);
20792083
processData<long long>((long long*)series_array.data(), size, [&](long long *buf, int _size) {
@@ -2088,7 +2092,7 @@ ConstantSP toDolphinDB_Vector_SeriesOrIndex(py::object obj, Type typeIndicator,
20882092
ddbVec = ddbVec->castTemporal(typeInfer);
20892093
}
20902094
else if (dtype.equal(DdbPythonUtil::preserved_->npint64_)) {
2091-
py::array_t<int64_t> series_array = py::cast<py::array_t<int64_t>>(obj);
2095+
py::array_t<int64_t> series_array = py::cast<py::array_t<int64_t, py::array::f_style | py::array::forcecast>>(obj);
20922096
size_t size = series_array.size();
20932097
ddbVec = Util::createVector(DT_NANOTIMESTAMP, 0, size);
20942098
ddbVec->appendLong(reinterpret_cast<long long*>(const_cast<int64_t*>(series_array.data())), size);
@@ -2102,7 +2106,7 @@ ConstantSP toDolphinDB_Vector_SeriesOrIndex(py::object obj, Type typeIndicator,
21022106
break;
21032107
}
21042108
case DT_FLOAT: {
2105-
py::array_t<float_t> series_array = py::cast<py::array_t<float_t>>(obj);
2109+
py::array_t<float_t> series_array = py::cast<py::array_t<float_t, py::array::f_style | py::array::forcecast>>(obj);
21062110
size_t size = series_array.size();
21072111
ddbVec = Util::createVector(typeInfer, 0, size);
21082112
bool hasNull = false;
@@ -2119,7 +2123,7 @@ ConstantSP toDolphinDB_Vector_SeriesOrIndex(py::object obj, Type typeIndicator,
21192123
break;
21202124
}
21212125
case DT_DOUBLE: {
2122-
py::array_t<double_t> series_array = py::cast<py::array_t<double_t>>(obj);
2126+
py::array_t<double_t> series_array = py::cast<py::array_t<double_t, py::array::f_style | py::array::forcecast>>(obj);
21232127
size_t size = series_array.size();
21242128
ddbVec = Util::createVector(typeInfer, 0, size);
21252129
bool hasNull = false;
@@ -2233,10 +2237,7 @@ ConstantSP toDolphinDB_Vector_SeriesOrIndex(py::object obj, Type typeIndicator,
22332237

22342238
if (noneCounts.size() > 0) {
22352239
for (auto count : noneCounts) {
2236-
pChildVector = Util::createVector(elemType.first, 0, count);
2237-
for (int i = 0; i < count; ++i) {
2238-
pChildVector->append(Constant::void_);
2239-
}
2240+
createAllNullVector(pChildVector, elemType.first, count);
22402241
ddbVec->append(pChildVector);
22412242
}
22422243
noneCounts.clear();
@@ -2262,8 +2263,7 @@ ConstantSP toDolphinDB_Vector_SeriesOrIndex(py::object obj, Type typeIndicator,
22622263
}
22632264
if (noneCounts.size() > 0) {
22642265
for (auto count : noneCounts) {
2265-
pChildVector = Util::createVector(elemType.first, 0, count);
2266-
pChildVector->fill(0, count, Constant::void_);
2266+
createAllNullVector(pChildVector, elemType.first, count);
22672267
ddbVec->append(pChildVector);
22682268
}
22692269
noneCounts.clear();
@@ -2431,8 +2431,7 @@ ConstantSP toDolphinDB_Vector_SeriesOrIndex(py::object obj, Type typeIndicator,
24312431
}
24322432
}
24332433
if (index == size) { // All None
2434-
ddbVec = Util::createVector(typeInfer, size, size, true, 0);
2435-
ddbVec->fill(0, size, Constant::void_);
2434+
createAllNullVector(ddbVec, typeInfer, size, 0);
24362435
break;
24372436
}
24382437
if (exparam != -1) { // Infer exparam
@@ -2499,8 +2498,7 @@ ConstantSP toDolphinDB_Vector_SeriesOrIndex(py::object obj, Type typeIndicator,
24992498
if (typeInfer == DT_UNK || typeInfer == DT_OBJECT) {
25002499
typeInfer = DT_DOUBLE;
25012500
}
2502-
ddbVec = Util::createVector(typeInfer, size, size);
2503-
ddbVec->fill(0, size, Constant::void_);
2501+
createAllNullVector(ddbVec, typeInfer, size);
25042502
return ddbVec;
25052503
}
25062504
if (typeInfer == DT_ANY && options == CHILD_VECTOR_OPTION::ARRAY_VECTOR) {
@@ -2547,8 +2545,7 @@ ConstantSP toDolphinDB_Vector_SeriesOrIndex(py::object obj, Type typeIndicator,
25472545
ddbVec = Util::createArrayVector((DATA_TYPE)(typeInfer + 64), 0, size, true, typeIndicator.second == -1 ? 0 : typeIndicator.second);
25482546
if (noneCounts.size() > 0) {
25492547
for (auto count : noneCounts) {
2550-
pChildVector = Util::createVector(typeInfer, 0, count);
2551-
pChildVector->fill(0, count, Constant::void_);
2548+
createAllNullVector(pChildVector, typeInfer, count);
25522549
ddbVec->append(pChildVector);
25532550
}
25542551
noneCounts.clear();
@@ -2573,8 +2570,7 @@ ConstantSP toDolphinDB_Vector_SeriesOrIndex(py::object obj, Type typeIndicator,
25732570
}
25742571
if (noneCounts.size() > 0) {
25752572
for (auto count : noneCounts) {
2576-
pChildVector = Util::createVector(typeInfer, 0, count);
2577-
pChildVector->fill(0, count, Constant::void_);
2573+
createAllNullVector(pChildVector, typeInfer, count);
25782574
ddbVec->append(pChildVector);
25792575
}
25802576
noneCounts.clear();
@@ -2717,8 +2713,7 @@ ConstantSP toDolphinDB_Vector_SeriesOrIndex(py::object obj, Type typeIndicator,
27172713
}
27182714
}
27192715
if (index == size) { // All None
2720-
ddbVec = Util::createVector(typeInfer, size, size, true, 0);
2721-
ddbVec->fill(0, size, Constant::void_);
2716+
createAllNullVector(ddbVec, typeInfer, size, 0);
27222717
break;
27232718
}
27242719
if (exparam != -1) { // Infer exparam

0 commit comments

Comments
 (0)