aGrUM 2.3.2
a C++ library for (probabilistic) graphical models
projections4MultiDim_tpl.h
Go to the documentation of this file.
1/****************************************************************************
2 * This file is part of the aGrUM/pyAgrum library. *
3 * *
4 * Copyright (c) 2005-2025 by *
5 * - Pierre-Henri WUILLEMIN(_at_LIP6) *
6 * - Christophe GONZALES(_at_AMU) *
7 * *
8 * The aGrUM/pyAgrum library is free software; you can redistribute it *
9 * and/or modify it under the terms of either : *
10 * *
11 * - the GNU Lesser General Public License as published by *
12 * the Free Software Foundation, either version 3 of the License, *
13 * or (at your option) any later version, *
14 * - the MIT license (MIT), *
15 * - or both in dual license, as here. *
16 * *
17 * (see https://agrum.gitlab.io/articles/dual-licenses-lgplv3mit.html) *
18 * *
19 * This aGrUM/pyAgrum library is distributed in the hope that it will be *
20 * useful, but WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, *
21 * INCLUDING BUT NOT LIMITED TO THE WARRANTIES MERCHANTABILITY or FITNESS *
22 * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE *
23 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER *
24 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, *
25 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR *
26 * OTHER DEALINGS IN THE SOFTWARE. *
27 * *
28 * See LICENCES for more details. *
29 * *
30 * SPDX-FileCopyrightText: Copyright 2005-2025 *
31 * - Pierre-Henri WUILLEMIN(_at_LIP6) *
32 * - Christophe GONZALES(_at_AMU) *
33 * SPDX-License-Identifier: LGPL-3.0-or-later OR MIT *
34 * *
35 * Contact : info_at_agrum_dot_org *
36 * homepage : http://agrum.gitlab.io *
37 * gitlab : https://gitlab.com/agrumery/agrum *
38 * *
39 ****************************************************************************/
40#pragma once
41
42
48
49#ifndef DOXYGEN_SHOULD_SKIP_THIS
50
51// allow projectionPatterns to be used
52# define GUM_PROJECTION_PATTERN_ALLOWED 1
53
56
57// a specialized max projection function for multiDimArrays
58
59# define GUM_MULTI_DIM_PROJECTION_NAME projectMaxMultiDimArray
60# define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
61# define GUM_MULTI_DIM_PROJECTION(x, y) \
62 if (y > x) x = y
63# define GUM_MULTI_DIM_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::min()
65# undef GUM_MULTI_DIM_PROJECTION_NAME
66# undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
67# undef GUM_MULTI_DIM_PROJECTION
68# undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
69
70# define GUM_MULTI_DIM_PROJECTION_IMPL2ARRAY_NAME projectMaxMultiDimArray
71# define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
72# define GUM_MULTI_DIM_PROJECTION(x, y) \
73 if (y > x) x = y
74# define GUM_MULTI_DIM_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::min()
76# undef GUM_MULTI_DIM_PROJECTION_IMPL2ARRAY_NAME
77# undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
78# undef GUM_MULTI_DIM_PROJECTION
79# undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
80
81# define GUM_MULTI_DIM_PROJECTION_POINTER_NAME projectMaxMultiDimArray4Pointers
82# define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
83# define GUM_MULTI_DIM_PROJECTION(x, y) \
84 if (*(y) > *(x)) *(x) = *(y)
85# define GUM_MULTI_DIM_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::min()
87# undef GUM_MULTI_DIM_PROJECTION_POINTER_NAME
88# undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
89# undef GUM_MULTI_DIM_PROJECTION
90# undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
91
92# define GUM_MULTI_DIM_PROJECTION_POINTER_IMPL2ARRAY_NAME projectMaxMultiDimArray4Pointers
93# define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
94# define GUM_MULTI_DIM_PROJECTION(x, y) \
95 if (*(y) > *(x)) *(x) = *(y)
96# define GUM_MULTI_DIM_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::min()
98# undef GUM_MULTI_DIM_PROJECTION_POINTER_IMPL2ARRAY_NAME
99# undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
100# undef GUM_MULTI_DIM_PROJECTION
101# undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
102
103// a specialized min projection function for multiDimArrays
104
105# define GUM_MULTI_DIM_PROJECTION_NAME projectMinMultiDimArray
106# define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
107# define GUM_MULTI_DIM_PROJECTION(x, y) \
108 if (x > y) x = y
109# define GUM_MULTI_DIM_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::max()
111# undef GUM_MULTI_DIM_PROJECTION_NAME
112# undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
113# undef GUM_MULTI_DIM_PROJECTION
114# undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
115
116# define GUM_MULTI_DIM_PROJECTION_IMPL2ARRAY_NAME projectMinMultiDimArray
117# define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
118# define GUM_MULTI_DIM_PROJECTION(x, y) \
119 if (x > y) x = y
120# define GUM_MULTI_DIM_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::max()
122# undef GUM_MULTI_DIM_PROJECTION_IMPL2ARRAY_NAME
123# undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
124# undef GUM_MULTI_DIM_PROJECTION
125# undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
126
127# define GUM_MULTI_DIM_PROJECTION_POINTER_NAME projectMinMultiDimArray4Pointers
128# define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
129# define GUM_MULTI_DIM_PROJECTION(x, y) \
130 if (*(x) > *(y)) *(x) = *(y)
131# define GUM_MULTI_DIM_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::max()
133# undef GUM_MULTI_DIM_PROJECTION_POINTER_NAME
134# undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
135# undef GUM_MULTI_DIM_PROJECTION
136# undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
137
138# define GUM_MULTI_DIM_PROJECTION_POINTER_IMPL2ARRAY_NAME projectMinMultiDimArray4Pointers
139# define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
140# define GUM_MULTI_DIM_PROJECTION(x, y) \
141 if (*(x) > *(y)) *(x) = *(y)
142# define GUM_MULTI_DIM_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::max()
144# undef GUM_MULTI_DIM_PROJECTION_POINTER_IMPL2ARRAY_NAME
145# undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
146# undef GUM_MULTI_DIM_PROJECTION
147# undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
148
149// a specialized sum projection function for multiDimArrays
150
151# define GUM_MULTI_DIM_PROJECTION_NAME projectSumMultiDimArray
152# define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
153# define GUM_MULTI_DIM_PROJECTION(x, y) x += y
154# define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)0
156# undef GUM_MULTI_DIM_PROJECTION_NAME
157# undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
158# undef GUM_MULTI_DIM_PROJECTION
159# undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
160
161# define GUM_MULTI_DIM_PROJECTION_IMPL2ARRAY_NAME projectSumMultiDimArray
162# define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
163# define GUM_MULTI_DIM_PROJECTION(x, y) x += y
164# define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)0
166# undef GUM_MULTI_DIM_PROJECTION_IMPL2ARRAY_NAME
167# undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
168# undef GUM_MULTI_DIM_PROJECTION
169# undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
170
171# define GUM_MULTI_DIM_PROJECTION_POINTER_NAME projectSumMultiDimArray4Pointers
172# define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
173# define GUM_MULTI_DIM_PROJECTION(x, y) *(x) += *(y)
174# define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)0
176# undef GUM_MULTI_DIM_PROJECTION_POINTER_NAME
177# undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
178# undef GUM_MULTI_DIM_PROJECTION
179# undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
180
181# define GUM_MULTI_DIM_PROJECTION_POINTER_IMPL2ARRAY_NAME projectSumMultiDimArray4Pointers
182# define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
183# define GUM_MULTI_DIM_PROJECTION(x, y) *(x) += *(y)
184# define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)0
186# undef GUM_MULTI_DIM_PROJECTION_POINTER_IMPL2ARRAY_NAME
187# undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
188# undef GUM_MULTI_DIM_PROJECTION
189# undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
190
191// a specialized product projection function for multiDimArrays
192
193# define GUM_MULTI_DIM_PROJECTION_NAME projectProductMultiDimArray
194# define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
195# define GUM_MULTI_DIM_PROJECTION(x, y) (x) *= (y)
196# define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)1
198# undef GUM_MULTI_DIM_PROJECTION_NAME
199# undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
200# undef GUM_MULTI_DIM_PROJECTION
201# undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
202
203# define GUM_MULTI_DIM_PROJECTION_IMPL2ARRAY_NAME projectProductMultiDimArray
204# define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
205# define GUM_MULTI_DIM_PROJECTION(x, y) (x) *= (y)
206# define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)1
208# undef GUM_MULTI_DIM_PROJECTION_IMPL2ARRAY_NAME
209# undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
210# undef GUM_MULTI_DIM_PROJECTION
211# undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
212
213# define GUM_MULTI_DIM_PROJECTION_POINTER_NAME projectProductMultiDimArray4Pointers
214# define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
215# define GUM_MULTI_DIM_PROJECTION(x, y) (*x) *= (*y)
216# define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)1
218# undef GUM_MULTI_DIM_PROJECTION_POINTER_NAME
219# undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
220# undef GUM_MULTI_DIM_PROJECTION
221# undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
222
223# define GUM_MULTI_DIM_PROJECTION_POINTER_IMPL2ARRAY_NAME projectProductMultiDimArray4Pointers
224# define GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
225# define GUM_MULTI_DIM_PROJECTION(x, y) (*x) *= (*y)
226# define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)1
228# undef GUM_MULTI_DIM_PROJECTION_POINTER_IMPL2ARRAY_NAME
229# undef GUM_MULTI_DIM_PROJECTION_EFFECTIVE_TYPE
230# undef GUM_MULTI_DIM_PROJECTION
231# undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
232
233// a specialized max projection function for multiDimFunctionGraphs
234
235# define GUM_MULTI_DIM_PROJECTION_OPERATOR Maximizes
236# define GUM_MULTI_DIM_PROJECTION_NEUTRAL (-1 * std::numeric_limits< GUM_SCALAR >::max())
237
238# define GUM_MULTI_DIM_PROJECTION_NAME projectMaxMultiDimFunctionGraph
240# undef GUM_MULTI_DIM_PROJECTION_NAME
241
242# define GUM_MULTI_DIM_PROJECTION_IMPL2DECISION_GRAPH_NAME projectMaxMultiDimFunctionGraph
244# undef GUM_MULTI_DIM_PROJECTION_IMPL2DECISION_GRAPH_NAME
245
246# undef GUM_MULTI_DIM_PROJECTION_OPERATOR
247# undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
248
249// a specialized min projection function for multiDimFunctionGraphs
250
251# define GUM_MULTI_DIM_PROJECTION_OPERATOR Minimizes
252# define GUM_MULTI_DIM_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::max()
253
254# define GUM_MULTI_DIM_PROJECTION_NAME projectMinMultiDimFunctionGraph
256# undef GUM_MULTI_DIM_PROJECTION_NAME
257
258# define GUM_MULTI_DIM_PROJECTION_IMPL2DECISION_GRAPH_NAME projectMinMultiDimFunctionGraph
260# undef GUM_MULTI_DIM_PROJECTION_IMPL2DECISION_GRAPH_NAME
261
262# undef GUM_MULTI_DIM_PROJECTION_OPERATOR
263# undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
264
265// a specialized sum projection function for multiDimFunctionGraphs
266
267# define GUM_MULTI_DIM_PROJECTION_OPERATOR std::plus
268# define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)0
269
270# define GUM_MULTI_DIM_PROJECTION_NAME projectSumMultiDimFunctionGraph
272# undef GUM_MULTI_DIM_PROJECTION_NAME
273
274# define GUM_MULTI_DIM_PROJECTION_IMPL2DECISION_GRAPH_NAME projectSumMultiDimFunctionGraph
276# undef GUM_MULTI_DIM_PROJECTION_IMPL2DECISION_GRAPH_NAME
277
278# undef GUM_MULTI_DIM_PROJECTION_OPERATOR
279# undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
280
281// a specialized product projection function for multiDimFunctionGraphs
282
283# define GUM_MULTI_DIM_PROJECTION_OPERATOR std::multiplies
284# define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)1
285
286# define GUM_MULTI_DIM_PROJECTION_NAME projectProductMultiDimFunctionGraph
288# undef GUM_MULTI_DIM_PROJECTION_NAME
289
290# define GUM_MULTI_DIM_PROJECTION_IMPL2DECISION_GRAPH_NAME projectProductMultiDimFunctionGraph
292# undef GUM_MULTI_DIM_PROJECTION_IMPL2DECISION_GRAPH_NAME
293
294# undef GUM_MULTI_DIM_PROJECTION_OPERATOR
295# undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
296
297// a specialized function for functionally projecting a multiDimArray
298
299/*
300#define GUM_MULTI_DIM_PROJECTION_NAME_F projectFuncMultiDimArray
301#define GUM_MULTI_DIM_PROJECTION(x,y) f( (x),(y) )
302#define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR) 0
303#include <agrum/base/multidim/utils/patterns/projectionPattern4MultiDimArray.h>
304#undef GUM_MULTI_DIM_PROJECTION_NAME_F
305#undef GUM_MULTI_DIM_PROJECTION
306*/
307
308// the operators that should be used to select appropriately the functions
309// to project multiDims
310
311// the function to be used to project a MultiDimImplementation using a Max
312# define GUM_MULTI_DIM_PROJECTION_NAME projectMax
313# define GUM_MULTI_DIM_PROJECTION_FUNC_NAME "max"
314# define GUM_MULTI_DIM_SYMMETRIC_PROJECTION
316# undef GUM_MULTI_DIM_PROJECTION_NAME
317# undef GUM_MULTI_DIM_PROJECTION_FUNC_NAME
318# undef GUM_MULTI_DIM_SYMMETRIC_PROJECTION
319
320// the function to be used to project a MultiDimImplementation using a Min
321# define GUM_MULTI_DIM_PROJECTION_NAME projectMin
322# define GUM_MULTI_DIM_PROJECTION_FUNC_NAME "min"
323# define GUM_MULTI_DIM_SYMMETRIC_PROJECTION
325# undef GUM_MULTI_DIM_PROJECTION_NAME
326# undef GUM_MULTI_DIM_PROJECTION_FUNC_NAME
327# undef GUM_MULTI_DIM_SYMMETRIC_PROJECTION
328
329// the function to be used to project a MultiDimImplementation using a Sum
330# define GUM_MULTI_DIM_PROJECTION_NAME projectSum
331# define GUM_MULTI_DIM_PROJECTION_FUNC_NAME "sum"
332# define GUM_MULTI_DIM_SYMMETRIC_PROJECTION
334# undef GUM_MULTI_DIM_PROJECTION_NAME
335# undef GUM_MULTI_DIM_PROJECTION_FUNC_NAME
336# undef GUM_MULTI_DIM_SYMMETRIC_PROJECTION
337
338// the function to be used to project a MultiDimImplementation using a Product
339# define GUM_MULTI_DIM_PROJECTION_NAME projectProduct
340# define GUM_MULTI_DIM_PROJECTION_FUNC_NAME "product"
341# define GUM_MULTI_DIM_SYMMETRIC_PROJECTION
343# undef GUM_MULTI_DIM_PROJECTION_NAME
344# undef GUM_MULTI_DIM_PROJECTION_FUNC_NAME
345# undef GUM_MULTI_DIM_SYMMETRIC_PROJECTION
346
347// default "basename" functions for projecting MultiDimImplementations
348
349# define GUM_MULTI_DIM_PROJECTION_NAME projectMaxMultiDimImplementation
350# define GUM_MULTI_DIM_PROJECTION(x, y) ((x) > (y) ? (x) : (y))
351# define GUM_MULTI_DIM_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::min()
353# undef GUM_MULTI_DIM_PROJECTION_NAME
354# undef GUM_MULTI_DIM_PROJECTION
355# undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
356
357# define GUM_MULTI_DIM_PROJECTION_NAME projectMinMultiDimImplementation
358# define GUM_MULTI_DIM_PROJECTION(x, y) ((x) > (y) ? (y) : (x))
359# define GUM_MULTI_DIM_PROJECTION_NEUTRAL std::numeric_limits< GUM_SCALAR >::max()
361# undef GUM_MULTI_DIM_PROJECTION_NAME
362# undef GUM_MULTI_DIM_PROJECTION
363# undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
364
365# define GUM_MULTI_DIM_PROJECTION_NAME projectSumMultiDimImplementation
366# define GUM_MULTI_DIM_PROJECTION(x, y) ((x) + (y))
367# define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)0
369# undef GUM_MULTI_DIM_PROJECTION_NAME
370# undef GUM_MULTI_DIM_PROJECTION
371# undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
372
373# define GUM_MULTI_DIM_PROJECTION_NAME projectProductMultiDimImplementation
374# define GUM_MULTI_DIM_PROJECTION(x, y) ((x) * (y))
375# define GUM_MULTI_DIM_PROJECTION_NEUTRAL (GUM_SCALAR)1
377# undef GUM_MULTI_DIM_PROJECTION_NAME
378# undef GUM_MULTI_DIM_PROJECTION
379# undef GUM_MULTI_DIM_PROJECTION_NEUTRAL
380
381//
382// DO NOT FORGET TO REGISTER YOUR BINARY FUNCTIONS
383//
384
385namespace gum {
386 // the function used to register all the above functions
387 template < typename GUM_SCALAR >
389 // ensure that only one thread will register the projections
390 static std::once_flag first;
391 std::call_once(first, []() {
392 std::string MultiDimArrayString("MultiDimArray");
393 std::string MultiDimFunctionGraphString("MultiDimFunctionGraph");
394 std::string BaseNameString("MultiDimImplementation");
395
396 // register base functions for multiDimArrays
397 registerProjection< GUM_SCALAR >("max", MultiDimArrayString, &projectMaxMultiDimArray);
398 registerProjection< GUM_SCALAR >("min", MultiDimArrayString, &projectMinMultiDimArray);
399 registerProjection< GUM_SCALAR >("sum", MultiDimArrayString, &projectSumMultiDimArray);
401 MultiDimArrayString,
403
404 // register base functions for multiDimArrays
406 MultiDimFunctionGraphString,
409 MultiDimFunctionGraphString,
412 MultiDimFunctionGraphString,
415 MultiDimFunctionGraphString,
417
418 // register default basename functions
419 registerProjection< GUM_SCALAR >("max", BaseNameString, &projectMaxMultiDimImplementation);
420 registerProjection< GUM_SCALAR >("min", BaseNameString, &projectMinMultiDimImplementation);
421 registerProjection< GUM_SCALAR >("sum", BaseNameString, &projectSumMultiDimImplementation);
423 BaseNameString,
424 &projectProductMultiDimImplementation);
425 });
426 }
427
428 // the function used to register all the above functions
429 template < typename GUM_SCALAR >
431 // ensure that only one thread will register the projections
432 static std::once_flag first;
433 std::call_once(first, []() {
434 std::string MultiDimArrayString("MultiDimArray");
435 std::string BaseNameString("MultiDimImplementation");
436
437 // register base functions for multiDimArrays
439 MultiDimArrayString,
442 MultiDimArrayString,
445 MultiDimArrayString,
448 MultiDimArrayString,
450 });
451 }
452
453} /* namespace gum */
454
455// remove permission to use operatorsPatterns
456# undef GUM_PROJECTION_PATTERN_ALLOWED
457
458#endif /* DOXYGEN_SHOULD_SKIP_THIS */
This files contains several function objects that are not (yet) defined in the STL.
GUM_SCALAR projectProductMultiDimArray(const MultiDimArray< GUM_SCALAR > *table, Instantiation *instantiation=0)
a function for projecting a multiDimArray using a Product operator
GUM_SCALAR projectSumMultiDimArray(const MultiDimArray< GUM_SCALAR > *table, Instantiation *instantiation=0)
a specialized function for projecting a multiDimArray using a Sum operator
GUM_SCALAR * projectMaxMultiDimArray4Pointers(const MultiDimArray< GUM_SCALAR * > *table, Instantiation *instantiation=0)
A specialized function for projecting a multiDimArray using a Max operator.
GUM_SCALAR projectMinMultiDimArray(const MultiDimArray< GUM_SCALAR > *table, Instantiation *instantiation=0)
A specialized function for projecting a multiDimArray using a Min operator.
GUM_SCALAR * projectProductMultiDimArray4Pointers(const MultiDimArray< GUM_SCALAR * > *table, Instantiation *instantiation=0)
a function for projecting a multiDimArray using a Product operator
GUM_SCALAR projectMaxMultiDimArray(const MultiDimArray< GUM_SCALAR > *table, Instantiation *instantiation=0)
A specialized function for projecting a multiDimArray using a Max operator.
GUM_SCALAR * projectSumMultiDimArray4Pointers(const MultiDimArray< GUM_SCALAR * > *table, Instantiation *instantiation=0)
a specialized function for projecting a multiDimArray using a Sum operator
GUM_SCALAR * projectMinMultiDimArray4Pointers(const MultiDimArray< GUM_SCALAR * > *table, Instantiation *instantiation=0)
A specialized function for projecting a multiDimArray using a Min operator.
gum is the global namespace for all aGrUM entities
Definition agrum.h:46
MultiDimFunctionGraph< GUM_SCALAR > * projectMinMultiDimFunctionGraph(const MultiDimFunctionGraph< GUM_SCALAR > *table, const gum::VariableSet &del_vars)
a specialized function for projecting a multiDimFunctionGraph using a Min operator
MultiDimFunctionGraph< GUM_SCALAR > * projectProductMultiDimFunctionGraph(const MultiDimFunctionGraph< GUM_SCALAR > *table, const gum::VariableSet &del_vars)
a specialized function for projecting a multiDimFunctionGraph using products
void registerProjection(const std::string &projection_name, const std::string &type_multidim, typename ProjectionRegister4MultiDim< GUM_SCALAR >::ProjectionPtr function)
A function to more easily register new projection functions in MultiDims.
MultiDimFunctionGraph< GUM_SCALAR > * projectMaxMultiDimFunctionGraph(const MultiDimFunctionGraph< GUM_SCALAR > *table, const gum::VariableSet &del_vars)
a specialized function for projecting a multiDimFunctionGraph using a Max operator
MultiDimFunctionGraph< GUM_SCALAR > * projectSumMultiDimFunctionGraph(const MultiDimFunctionGraph< GUM_SCALAR > *table, const gum::VariableSet &del_vars)
a specialized function for projecting a multiDimFunctionGraph using a summation
void pointerProjections4MultiDimInit()
the function used to register all the projections on multidimImplementations over pointers types.
void projections4MultiDimInit()
the function used to register all the projection operators on multidimImplementations over non-pointe...
the pattern used by all the "basename" projections of multidim tables
the pattern used by all the projections of multidimensional tables
the pattern used by all the projections of multidimensional tables
the pattern used by all the MultiDimImplementation projections
A container for registering projection functions on multiDimImplementations.