mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-05-16 21:00:14 +00:00
Update Python API to allow more flexibility for setting providers and provider options. The providers argument (InferenceSession/TrainingSession constructors, InferenceSession.set_providers()) now also accepts a tuple of (name, options dict). Fix get_available_providers() API (and the corresponding function in the C API) to return the providers in default priority order. Now it can be used as a starting point for the providers argument and maintain the default priority order. Convert some usages of the deprecated global configuration functions to use EP-specific options instead. Update some EP-specific option parsing to fail on unknown options. Other clean up.
84 lines
1.8 KiB
C++
84 lines
1.8 KiB
C++
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// Licensed under the MIT License.
|
|
|
|
#pragma once
|
|
|
|
#include <locale>
|
|
#include <sstream>
|
|
#include <type_traits>
|
|
|
|
#include "core/common/common.h"
|
|
|
|
namespace onnxruntime {
|
|
|
|
/**
|
|
* Tries to parse a value from an entire string.
|
|
*/
|
|
template <typename T>
|
|
bool TryParseString(const std::string& str, T& value) {
|
|
if (std::is_integral<T>::value && std::is_unsigned<T>::value) {
|
|
// if T is unsigned integral type, reject negative values which will wrap
|
|
if (!str.empty() && str[0] == '-') {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// don't allow leading whitespace
|
|
if (!str.empty() && std::isspace(str[0], std::locale::classic())) {
|
|
return false;
|
|
}
|
|
|
|
std::istringstream is{str};
|
|
is.imbue(std::locale::classic());
|
|
T parsed_value{};
|
|
|
|
const bool parse_successful =
|
|
is >> parsed_value &&
|
|
is.get() == std::istringstream::traits_type::eof(); // don't allow trailing characters
|
|
if (!parse_successful) {
|
|
return false;
|
|
}
|
|
|
|
value = std::move(parsed_value);
|
|
return true;
|
|
}
|
|
|
|
inline bool TryParseString(const std::string& str, std::string& value) {
|
|
value = str;
|
|
return true;
|
|
}
|
|
|
|
inline bool TryParseString(const std::string& str, bool& value) {
|
|
if (str == "0" || str == "False" || str == "false") {
|
|
value = false;
|
|
return true;
|
|
}
|
|
|
|
if (str == "1" || str == "True" || str == "true") {
|
|
value = true;
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Parses a value from an entire string.
|
|
*/
|
|
template <typename T>
|
|
Status ParseString(const std::string& s, T& value) {
|
|
ORT_RETURN_IF_NOT(TryParseString(s, value), "Failed to parse value: \"", value, "\"");
|
|
return Status::OK();
|
|
}
|
|
|
|
/**
|
|
* Parses a value from an entire string.
|
|
*/
|
|
template <typename T>
|
|
T ParseString(const std::string& s) {
|
|
T value{};
|
|
ORT_THROW_IF_ERROR(ParseString(s, value));
|
|
return value;
|
|
}
|
|
|
|
} // namespace onnxruntime
|