23 #ifndef CSL_LIBRARY_GENERATOR 24 #define CSL_LIBRARY_GENERATOR 28 #include "librarygroup.h" 42 struct file:
public std::ofstream {
43 file(std::string
const& name): std::ofstream(name) {}
52 inline static int nDigits = std::numeric_limits<double>
54 inline static std::string realType =
"double";
55 inline static std::string complexType =
"std::complex<double>";
56 inline static std::string realUsing =
"real_t";
57 inline static std::string complexUsing =
"complex_t";
58 inline static std::string tensorUsing =
"csl::LibraryTensor";
59 inline static std::string indexType =
"int";
60 inline static short nSpaceIndent = 4;
61 inline static const Expr imaginary = csl::constant_s(
"_i_");
64 inline static std::string incDir =
"include";
65 inline static std::string srcDir =
"src";
66 inline static std::string objDir =
"obj";
67 inline static std::string binDir =
"bin";
68 inline static std::string libDir =
"lib";
69 inline static std::string scriptDir =
"script";
70 inline static std::string scriptObjDir =
"script/obj";
72 static inline std::string toUpper(std::string
const& name) {
73 std::string copy(name);
79 static std::string regularName(std::string_view name);
81 static std::string indent(
short nIndent = 1);
83 static bool isQuadruplePrecision() {
return quadruple; }
84 static void setQuadruplePrecision(
bool quadruple);
87 std::vector<std::string> mixings;
88 std::vector<std::string> masses;
89 std::vector<std::string> expressions;
90 std::vector<std::string> dependencies;
96 static inline bool quadruple =
false;
101 std::string
const& t_name,
102 std::string
const& t_path =
"." 107 std::string getName()
const;
108 std::string getPath()
const;
109 std::set<std::string>
const& getIPath()
const;
110 std::set<std::string>& getIPath();
111 std::set<std::string>
const& getLPath()
const;
112 std::set<std::string>& getLPath();
115 bool hasGlobalFile()
const {
116 return !diagData.empty() || !massExpressions.empty();
118 bool hasUniqueParamStruct()
const {
119 return uniqueParamStruct;
122 void cleanExistingSources()
const;
123 void setClangCompiler() {
126 void setGccCompiler() {
129 void setName(std::string
const& t_name);
130 void setUniqueParamStruct(
bool t_par) {
131 uniqueParamStruct = t_par;
133 void setPath(std::string
const& t_path);
134 void setIPath(std::vector<std::string>
const& t_path);
135 void setLPath(std::vector<std::string>
const& t_path);
136 void addIPath(std::string
const& t_path);
137 void addLPath(std::string
const& t_path);
139 void addInclude(std::string
const& include,
140 bool global =
false);
141 void importHeader(std::string
const &filePath,
142 std::string
const &fileName);
143 void importSource(std::string
const &filePath,
144 std::string
const &fileName);
145 void addLibrary(std::string
const& library);
147 void addTensor(
Expr const& tensor)
const;
150 std::string
const &groupName,
151 bool complexReturn =
true 154 std::string
const &nameFunction,
156 std::string
const &nameGroup =
"G" 158 void addMassExpression(std::string
const &mass);
159 void addDiagonalization(
160 std::vector<std::string>
const &mixing,
161 std::vector<std::string>
const &masses,
162 std::vector<std::string>
const &expressions,
163 std::vector<std::string>
const &dependencies,
168 void setupDirectory()
const;
169 void printHeader()
const;
170 void printGlobal()
const;
171 void printSource()
const;
172 void printCallable()
const;
173 void printTest()
const;
175 void printDiagonalizationFacility(
176 std::ostream &header,
180 void printMassExpressionsFacility(
181 std::ostream &header,
185 void printMakefile()
const;
186 void printPythonDir()
const;
191 void build(
unsigned int nJobs = 1)
const;
193 void buildCppLib(
unsigned int nJobs)
const;
198 void updateDiagonalization()
const;
200 bool needLibraryTensor()
const;
205 void printTensors(std::ostream& out)
const;
207 std::vector<csl::Tensor> gatherTensors()
const;
209 std::vector<std::string> getDiagonalizationMasses()
const;
210 std::vector<std::string> getDiagonalizationMixings()
const;
211 std::vector<std::string> getDiagonalizationDependencies()
const;
213 std::string regLibName()
const;
214 std::string getFunctionFileName(
LibFunction const &f)
const;
215 std::string getGroupFileName(
LibraryGroup const &g)
const;
227 std::set<std::string> IPath;
229 std::set<std::string> LPath;
234 std::vector<csl::Tensor> tensors;
237 std::vector<std::shared_ptr<LibraryGroup>> groups;
240 std::vector<DiagonalizationData> diagData;
243 std::vector<std::string> massExpressions;
245 bool uniqueParamStruct;
248 std::vector<LibParameter> inputParams(
249 std::vector<LibraryGenerator::DiagonalizationData>
const &diagData
252 std::vector<LibParameter> outputParams(
253 std::vector<LibraryGenerator::DiagonalizationData>
const &diagData,
254 std::vector<std::string>
const &massExpressions
Definition: librarygenerator.h:86
Namespace for csl library.
Definition: abreviation.h:34
Definition: librarygenerator.h:38
Definition: librarygenerator.h:42
Definition: libraryfunction.h:45
Definition: diagonalization.h:34
Definition: librarydependency.h:33
Definition: librarygroup.h:23
Base classes for all exprs in the program.
Expression type/.
Definition: abstract.h:1573