|
|
|
@@ -205,13 +205,14 @@ AbstractBasePtr InferTupleOrListGetItem(const std::string &op_name, const Abstra |
|
|
|
|
|
|
|
ValuePtr index_value = index->BuildValue(); |
|
|
|
if (!index_value->isa<Int32Imm>()) { |
|
|
|
MS_LOG(EXCEPTION) << op_name << " evaluator index should be an int32 number, but got " << index_value->ToString(); |
|
|
|
MS_EXCEPTION(IndexError) << op_name << " evaluator index should be an int32 number, but got " |
|
|
|
<< index_value->ToString(); |
|
|
|
} |
|
|
|
int idx_v = GetValue<int>(index_value); |
|
|
|
std::size_t nelems = queue->elements().size(); |
|
|
|
if (idx_v >= SizeToInt(nelems) || idx_v < -SizeToInt(nelems)) { |
|
|
|
MS_LOG(EXCEPTION) << op_name << " evaluator index should be in range[-" << SizeToInt(nelems) << ", " |
|
|
|
<< SizeToInt(nelems) << "), but got " << idx_v << "."; |
|
|
|
MS_EXCEPTION(IndexError) << op_name << " evaluator index should be in range[-" << SizeToInt(nelems) << ", " |
|
|
|
<< SizeToInt(nelems) << "), but got " << idx_v << "."; |
|
|
|
} |
|
|
|
|
|
|
|
std::size_t uidx_v = 0; |
|
|
|
@@ -232,18 +233,21 @@ AbstractBasePtr InferTupleOrListSetItem(const std::string &op_name, const Abstra |
|
|
|
|
|
|
|
ValuePtr index_value = index->BuildValue(); |
|
|
|
if (!index_value->isa<Int32Imm>()) { |
|
|
|
MS_LOG(EXCEPTION) << op_name << " evaluator index should be an int32 number, but got " << index_value->ToString(); |
|
|
|
MS_EXCEPTION(IndexError) << op_name << " evaluator index should be an int32 number, but got " |
|
|
|
<< index_value->ToString(); |
|
|
|
} |
|
|
|
int idx_v = GetValue<int>(index_value); |
|
|
|
if (idx_v < 0) { |
|
|
|
MS_LOG(EXCEPTION) << "The index of " << typeid(T).name() << " should be positive number, but got " << idx_v << "."; |
|
|
|
MS_EXCEPTION(IndexError) << "The index of " << typeid(T).name() << " should be positive number, but got " << idx_v |
|
|
|
<< "."; |
|
|
|
} |
|
|
|
|
|
|
|
size_t uidx_v = IntToSize(idx_v); |
|
|
|
AbstractBasePtrList elements = queue->elements(); |
|
|
|
std::size_t nelems = elements.size(); |
|
|
|
if (uidx_v >= nelems) { |
|
|
|
MS_LOG(EXCEPTION) << op_name << " evaluator the index: " << uidx_v << " to set out of range: " << nelems - 1 << "."; |
|
|
|
MS_EXCEPTION(IndexError) << op_name << " evaluator the index: " << uidx_v << " to set out of range: " << nelems - 1 |
|
|
|
<< "."; |
|
|
|
} |
|
|
|
elements[uidx_v] = args_spec_list[2]; |
|
|
|
return std::make_shared<T>(elements); |
|
|
|
|