1#ifndef TMVA_SOFIE_ROPERATOR_Constant
2#define TMVA_SOFIE_ROPERATOR_Constant
11namespace Experimental{
61 throw std::runtime_error(
"TMVA SOFIE ConstantOfShape Op Input Tensor is not found in model");
71 throw std::runtime_error(
"TMVA SOFIE ConstantOfShape Op Input Tensor has invalid shape");
74 for (
size_t i = 0; i <
fShape.size(); i++)
81 throw std::runtime_error(
"TMVA SOFIE ConstantOfShape Op value Tensor has invalid size " + std::to_string(
fValues.size()));
95 throw std::runtime_error(
"TMVA SOFIE ConstantOfShape Op Input Tensor has invalid shape");
98 for (
size_t i = 0; i <
fDimShape[0].dim; i++) {
103 throw std::runtime_error(
"TMVA SOFIE ConstantOfShape Op Input Tensor has not defied shape");
114 " with " + std::to_string(
fValues.size()) +
" values");
126 for (
auto v :
fValues) std::cout <<
" " <<
v;
127 std::cout <<
"]" << std::endl;
136 std::stringstream out;
151 out <<
SP <<
"size_t " <<
fDimOutputShape[i].param <<
" = " <<
"tensor_" <<
fNX <<
"[" << i <<
"];\n";
156 out <<
SP <<
"if (" <<
length <<
" > fTensor_" <<
fNY <<
".size())\n";
157 out <<
SP <<
SP <<
"fTensor_" <<
fNY <<
".resize(" <<
length <<
");\n";
158 out <<
SP <<
"std::fill(fTensor_" <<
fNY <<
".begin(), fTensor_" <<
fNY <<
".end(), " <<
fValues[0] <<
");\n";
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
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value
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 Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t type
std::vector< size_t > GetTensorShape(const std::string &name) const
std::vector< Dim > GetDimTensorShape(const std::string &name) const
void AddIntermediateTensor(std::string tensor_name, ETensorType type, std::vector< Dim > dim_shape)
bool CheckIfTensorAlreadyExist(std::string tensor_name)
void AddConstantTensor(std::string tensor_name, ETensorType type, std::vector< std::size_t > shape, std::shared_ptr< void > data)
bool IsShapeTensor(const std::string &name) const
check if a tensor is a shape tensor
bool IsConstantTensor(const std::string &name) const
std::shared_ptr< void > GetInitializedTensorData(std::string tensor_name)
const std::vector< Dim > & GetShapeTensorValues(const std::string &tensor_name) const
std::vector< size_t > fShape
std::vector< std::vector< size_t > > ShapeInference(std::vector< std::vector< size_t > > input) override
std::vector< Dim > fDimOutputShape
ROperator_Constant(const std::string &type, const std::vector< T > &values, const std::vector< size_t > &shape, std::string nameX, std::string nameY)
void Initialize(RModel &model) override
bool fIsUndefinedInputShape
std::vector< Dim > fDimShape
std::string Generate(std::string opName) override
std::vector< ETensorType > TypeInference(std::vector< ETensorType > input) override
std::vector< std::string_view > fInputTensorNames
bool fIsOutputConstant
flag to identify if operator has a constant output (no need to generate code)
const std::string SP
space used to correctly indent the generated C++ code
std::vector< std::string_view > fOutputTensorNames
std::size_t ConvertShapeToLength(const std::vector< size_t > &shape)
ETensorType ConvertStringToType(std::string type)
std::string ConvertDimShapeToLength(const std::vector< Dim > &shape)
std::string ConvertShapeToString(const std::vector< size_t > &shape)
create variable transformations