1#ifndef TMVA_SOFIE_ROPERATOR_BASICNARY 
    2#define TMVA_SOFIE_ROPERATOR_BASICNARY 
   13namespace Experimental{
 
   18template<
typename T, EBasicNaryOperator Op>
 
   23   static const std::string 
Name() {
return "Max";}
 
   24   static std::string 
Op(
const std::string& res, std::vector<std::string>& 
inputs) {
 
   25      std::stringstream out;
 
   26      out << 
"\t" << 
"\t" << res << 
" = " << 
inputs[0] << 
";\n";
 
   27      for (
size_t i = 1; i < 
inputs.size(); i++) {
 
   28         out << 
"\t" << 
"\t" << res << 
" = std::max(" << res << 
", " << 
inputs[i] << 
");\n";
 
 
 
   36   static const std::string 
Name() {
return "Min";}
 
   37   static std::string 
Op(
const std::string& res, std::vector<std::string>& 
inputs) {
 
   38      std::stringstream out;
 
   39      out << 
"\t" << 
"\t" << res << 
" = " << 
inputs[0] << 
";\n";
 
   40      for (
size_t i = 1; i < 
inputs.size(); i++) {
 
   41         out << 
"\t" << 
"\t" << res << 
" = std::min(" << res << 
", " << 
inputs[i] << 
");\n";
 
 
 
   52   static const std::string 
Name() {
return "Mean";}
 
   53   static std::string 
Op(
const std::string& res, std::vector<std::string>& 
inputs) {
 
   54      std::stringstream out;
 
   55      out << 
"\t" << 
"\t" << res << 
" = (" << 
inputs[0];
 
   56      for (
size_t i = 1; i < 
inputs.size(); i++) {
 
   59      out << 
") / float(" << 
inputs.size() << 
");\n";
 
 
 
   66   static const std::string 
Name() {
return "Sum";}
 
   67   static std::string 
Op(
const std::string& res, std::vector<std::string>& 
inputs) {
 
   68      std::stringstream out;
 
   69      out << 
"\t" << 
"\t" << res << 
" = " << 
inputs[0];
 
   70      for (
size_t i = 1; i < 
inputs.size(); i++) {
 
 
 
   78template <
typename T, EBasicNaryOperator Op>
 
  106                  [](
const std::string& s) -> std::string_view { return s; });
 
 
  117      auto ret = std::vector<std::vector<size_t>>(1, 
input[0]);
 
 
  124            throw std::runtime_error(
"TMVA SOFIE BasicNary Op Input Tensor " + it + 
" is not found in model");
 
  134      for (
size_t i = 0; i < 
N; i++) {
 
 
  150         throw std::runtime_error(
"TMVA SOFIE BasicNary called to Generate without being initialized first");
 
  152      std::stringstream out;
 
  154      out << 
SP << 
"\n//------ BasicNary operator\n";
 
  156         for (
size_t i = 0; i < 
fNInputs.size(); i++) {
 
  159               out << 
SP << 
SP << 
"{\n";
 
  163               out << 
SP << 
SP << 
SP << 
"delete[] data;\n";
 
  164               out << 
SP << 
SP << 
"}\n";
 
  170         out << 
SP << 
"std::copy(tensor_" << 
fNInputs[0] << 
", tensor_" << 
fNInputs[0] << 
" + ";
 
  171         out << 
length << 
", tensor_" << 
fNY << 
");\n";
 
  177         out << 
SP << 
"for (size_t id = 0; id < " << 
length << 
"; id++) {\n";
 
 
  184   std::vector<std::string> 
GetStdLibs()
 override {
return { std::string(
"cmath") }; }
 
 
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void input
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h length
void AddIntermediateTensor(std::string tensor_name, ETensorType type, std::vector< Dim > dim_shape)
bool CheckIfTensorAlreadyExist(std::string tensor_name)
const ETensorType & GetTensorType(std::string name) const
const std::vector< size_t > & GetTensorShape(std::string name) const
std::vector< std::vector< size_t > > fShapeInputs
std::vector< std::vector< size_t > > ShapeInference(std::vector< std::vector< size_t > > input) override
std::vector< ETensorType > TypeInference(std::vector< ETensorType > input) override
std::vector< size_t > fShapeY
std::vector< std::string > fNBroadcastedInputs
ROperator_BasicNary(const std::vector< std::string > &inputNames, const std::string &nameY)
std::vector< std::string > GetStdLibs() override
std::string Generate(std::string OpName) override
void Initialize(RModel &model) override
std::vector< std::string > fNInputs
std::vector< std::string_view > fInputTensorNames
const std::string SP
space used to correctly indent the generated C++ code
std::vector< std::string_view > fOutputTensorNames
bool AreSameShape(const std::vector< size_t > &, const std::vector< size_t > &)
std::string Clean_name(std::string input_tensor_name)
std::vector< size_t > MultidirectionalBroadcastShape(std::vector< std::vector< size_t > >)
std::string ConvertShapeToString(std::vector< size_t > shape)
std::string ConvertTypeToString(ETensorType type)
std::size_t ConvertShapeToLength(std::vector< size_t > shape)
create variable transformations
static std::string Op(const std::string &res, std::vector< std::string > &inputs)
static const std::string Name()
static std::string Op(const std::string &res, std::vector< std::string > &inputs)
static const std::string Name()
static const std::string Name()
static std::string Op(const std::string &res, std::vector< std::string > &inputs)
static const std::string Name()
static std::string Op(const std::string &res, std::vector< std::string > &inputs)