pytorch/caffe2/utils/string_utils.h
Alexander Sidorov a6ccd62a81 BlackBoxPredictor OSS part 5: glow transforms
Summary:
Overal context: open-source BlackBoxPredictor as the entry
point for inference in Caffe2 (thread safe abstraction for Caffe2
inference). This should be used in ThroughputBenchmark for the purpose
of framework comparison
This specific diff:
There should be no harm in moving transformation code to
OSS. On the advantages side we will be able to compare production
Caffe2 setup with PyTorch in the most fair way via
ThroughputBenchmark. This approach avoid any complicated
transformation regirstries. Building those proper would be significant
engineering effort as well as production risk. In the past we had SEVs
related to transforms being turned off due to various refactors. Given
that we don't plan to build any other significant investments into
transformation logic except existing ones (like TVM and Glow), and
those also relate to open-source technologies, I came up to the
conclusion of moving to OSS the whole thing.

Reviewed By: bertmaher

Differential Revision: D16367134

fbshipit-source-id: fc6bacc1be3ff6336beb57cdad58168d3a2b8c28
2019-07-23 16:39:23 -07:00

60 lines
1.4 KiB
C++

#pragma once
#include <algorithm>
#include <memory>
#include <string>
#include <vector>
#include "caffe2/core/common.h"
#include "caffe2/core/types.h"
namespace caffe2 {
CAFFE2_API std::vector<std::string>
split(char separator, const std::string& string, bool ignore_empty = false);
CAFFE2_API std::string trim(const std::string& str);
CAFFE2_API size_t editDistance(
const std::string& s1, const std::string& s2, size_t max_distance = 0);
CAFFE2_API inline bool StartsWith(const std::string& str, const std::string& prefix) {
return std::mismatch(prefix.begin(), prefix.end(), str.begin()).first ==
prefix.end();
}
CAFFE2_API inline bool EndsWith(
const std::string& full,
const std::string& ending) {
if (full.length() >= ending.length()) {
return (
0 ==
full.compare(full.length() - ending.length(), ending.length(), ending));
} else {
return false;
}
}
CAFFE2_API inline int32_t GetDimFromOrderString(const std::string& str) {
auto order = StringToStorageOrder(str);
switch (order) {
case StorageOrder::NHWC:
return 3;
case StorageOrder::NCHW:
return 1;
default:
CAFFE_THROW("Unsupported storage order: ", str);
return -1;
}
}
CAFFE2_API int32_t editDistanceHelper(const char* s1,
size_t s1_len,
const char* s2,
size_t s2_len,
std::vector<size_t> &current,
std::vector<size_t> &previous,
std::vector<size_t> &previous1,
size_t max_distance);
} // namespace caffe2