10 #ifndef EIGEN_CXX11_TENSORSYMMETRY_TEMPLATEGROUPTHEORY_H 11 #define EIGEN_CXX11_TENSORSYMMETRY_TEMPLATEGROUPTHEORY_H 17 namespace group_theory {
119 template<
template<
typename,
typename>
class Equality,
typename id,
typename L>
struct strip_identities;
122 template<
typename,
typename>
class Equality,
127 struct strip_identities<Equality, id, type_list<t, ts...>>
129 typedef typename conditional<
130 Equality<id, t>::value,
131 typename strip_identities<Equality, id, type_list<ts...>>::type,
132 typename concat<type_list<t>,
typename strip_identities<Equality, id, type_list<ts...>>::type>::type
134 constexpr
static int global_flags = Equality<id, t>::global_flags | strip_identities<Equality, id, type_list<ts...>>::global_flags;
138 template<
typename,
typename>
class Equality,
140 EIGEN_TPL_PP_SPEC_HACK_DEFC(
typename, ts)
142 struct strip_identities<Equality, id, type_list<EIGEN_TPL_PP_SPEC_HACK_USE(ts)>>
144 typedef type_list<> type;
145 constexpr
static int global_flags = 0;
162 template<
typename,
typename>
class Multiply,
163 template<
typename,
typename>
class Equality,
166 typename current_element,
168 bool dont_add_current_element
170 struct dimino_first_step_elements_helper :
171 public dimino_first_step_elements_helper<
176 typename Multiply<current_element, g>::type,
177 typename concat<elements, type_list<current_element>>::type,
178 Equality<typename Multiply<current_element, g>::type, id>::value
182 template<
typename,
typename>
class Multiply,
183 template<
typename,
typename>
class Equality,
186 typename current_element,
189 struct dimino_first_step_elements_helper<Multiply, Equality, id, g, current_element, elements, true>
191 typedef elements type;
192 constexpr
static int global_flags = Equality<current_element, id>::global_flags;
209 template<
typename,
typename>
class Multiply,
210 template<
typename,
typename>
class Equality,
214 struct dimino_first_step_elements
216 typedef typename get<0, generators>::type first_generator;
217 typedef typename skip<1, generators>::type next_generators;
218 typedef type_list<first_generator> generators_done;
220 typedef dimino_first_step_elements_helper<
229 typedef typename helper::type type;
230 constexpr
static int global_flags = helper::global_flags;
254 template<
typename,
typename>
class Multiply,
255 typename sub_group_elements,
256 typename new_coset_rep,
259 struct dimino_get_coset_elements
261 typedef typename apply_op_from_right<Multiply, new_coset_rep, sub_group_elements>::type type;
265 template<
typename,
typename>
class Multiply,
266 typename sub_group_elements,
267 typename new_coset_rep
269 struct dimino_get_coset_elements<Multiply, sub_group_elements, new_coset_rep, false>
271 typedef type_list<> type;
289 template<
typename,
typename>
class Multiply,
290 template<
typename,
typename>
class Equality,
292 typename sub_group_elements,
295 typename rep_element,
298 struct dimino_add_cosets_for_rep;
301 template<
typename,
typename>
class Multiply,
302 template<
typename,
typename>
class Equality,
304 typename sub_group_elements,
308 typename rep_element,
311 struct dimino_add_cosets_for_rep<Multiply, Equality, id, sub_group_elements, elements, type_list<g, gs...>, rep_element, sub_group_size>
313 typedef typename Multiply<rep_element, g>::type new_coset_rep;
314 typedef contained_in_list_gf<Equality, new_coset_rep, elements> _cil;
315 constexpr
static bool add_coset = !_cil::value;
317 typedef typename dimino_get_coset_elements<
322 >::type coset_elements;
324 typedef dimino_add_cosets_for_rep<
329 typename concat<elements, coset_elements>::type,
335 typedef typename _helper::type type;
336 constexpr
static int global_flags = _cil::global_flags | _helper::global_flags;
347 template<
typename,
typename>
class Multiply,
348 template<
typename,
typename>
class Equality,
350 typename sub_group_elements,
352 EIGEN_TPL_PP_SPEC_HACK_DEFC(
typename, empty),
353 typename rep_element,
356 struct dimino_add_cosets_for_rep<Multiply, Equality, id, sub_group_elements, elements, type_list<EIGEN_TPL_PP_SPEC_HACK_USE(empty)>, rep_element, sub_group_size>
358 typedef elements type;
359 constexpr
static int global_flags = 0;
377 template<
typename,
typename>
class Multiply,
378 template<
typename,
typename>
class Equality,
380 typename sub_group_elements,
387 struct dimino_add_all_coset_spaces
389 typedef typename get<rep_pos, elements>::type rep_element;
390 typedef dimino_add_cosets_for_rep<
398 sub_group_elements::count
400 typedef typename _ac4r::type new_elements;
402 constexpr
static int new_rep_pos = rep_pos + sub_group_elements::count;
403 constexpr
static bool new_stop_condition = new_rep_pos >= new_elements::count;
405 typedef dimino_add_all_coset_spaces<
417 typedef typename _helper::type type;
418 constexpr
static int global_flags = _helper::global_flags | _ac4r::global_flags;
422 template<
typename,
typename>
class Multiply,
423 template<
typename,
typename>
class Equality,
425 typename sub_group_elements,
431 struct dimino_add_all_coset_spaces<Multiply, Equality, id, sub_group_elements, elements, generators, sub_group_size, rep_pos, true>
433 typedef elements type;
434 constexpr
static int global_flags = 0;
450 template<
typename,
typename>
class Multiply,
451 template<
typename,
typename>
class Equality,
454 typename generators_done,
455 typename current_generator,
458 struct dimino_add_generator
464 typedef typename apply_op_from_right<Multiply, current_generator, elements>::type multiplied_elements;
465 typedef typename concat<elements, multiplied_elements>::type new_elements;
467 constexpr
static int rep_pos = elements::count;
469 typedef dimino_add_all_coset_spaces<
475 typename concat<generators_done, type_list<current_generator>>::type,
480 typedef typename _helper::type type;
481 constexpr
static int global_flags = _helper::global_flags;
485 template<
typename,
typename>
class Multiply,
486 template<
typename,
typename>
class Equality,
489 typename generators_done,
490 typename current_generator
492 struct dimino_add_generator<Multiply, Equality, id, elements, generators_done, current_generator, true>
495 typedef elements type;
496 constexpr
static int global_flags = 0;
512 template<
typename,
typename>
class Multiply,
513 template<
typename,
typename>
class Equality,
515 typename generators_done,
516 typename remaining_generators,
519 struct dimino_add_remaining_generators
521 typedef typename get<0, remaining_generators>::type first_generator;
522 typedef typename skip<1, remaining_generators>::type next_generators;
524 typedef contained_in_list_gf<Equality, first_generator, elements> _cil;
526 typedef dimino_add_generator<
536 typedef typename _helper::type new_elements;
538 typedef dimino_add_remaining_generators<
542 typename concat<generators_done, type_list<first_generator>>::type,
547 typedef typename _next_iter::type type;
548 constexpr
static int global_flags =
550 _helper::global_flags |
551 _next_iter::global_flags;
555 template<
typename,
typename>
class Multiply,
556 template<
typename,
typename>
class Equality,
558 typename generators_done,
561 struct dimino_add_remaining_generators<Multiply, Equality, id, generators_done, type_list<>, elements>
563 typedef elements type;
564 constexpr
static int global_flags = 0;
582 template<
typename,
typename>
class Multiply,
583 template<
typename,
typename>
class Equality,
586 int initial_global_flags = 0
588 struct enumerate_group_elements_noid
590 typedef dimino_first_step_elements<Multiply, Equality, id, generators> first_step;
591 typedef typename first_step::type first_step_elements;
593 typedef dimino_add_remaining_generators<
597 typename first_step::generators_done,
598 typename first_step::next_generators,
599 typename first_step::type
602 typedef typename _helper::type type;
603 constexpr
static int global_flags =
604 initial_global_flags |
605 first_step::global_flags |
606 _helper::global_flags;
611 template<
typename,
typename>
class Multiply,
612 template<
typename,
typename>
class Equality,
614 int initial_global_flags
616 struct enumerate_group_elements_noid<Multiply, Equality, id, type_list<>, initial_global_flags>
618 typedef type_list<id> type;
619 constexpr
static int global_flags = initial_global_flags;
640 template<
typename,
typename>
class Multiply,
641 template<
typename,
typename>
class Equality,
645 struct enumerate_group_elements
646 :
public enumerate_group_elements_noid<
650 typename strip_identities<Equality, id, _generators>::type,
651 strip_identities<Equality, id, _generators>::global_flags
662 #endif // EIGEN_CXX11_TENSORSYMMETRY_TEMPLATEGROUPTHEORY_H Namespace containing all symbols from the Eigen library.
Definition: AdolcForward:45