Mackey  V3.3
A C++ library for computing RO(G) graded homology
Mult_Table.hpp
Go to the documentation of this file.
1 #pragma once
3 #include "Utility/General.hpp"
4 #include "Spaces/Point.hpp"
5 
8 
9 namespace mackey
10 {
13  template<typename group_t>
14  struct MultTableData {
15  int level;
17  std::vector<std::vector<Green<group_t>>> Greens;
18  std::map<std::array<int, 3>, Green<group_t> > tripleGreens;
19  std::vector<std::vector<int>> degree;
20  std::map<std::vector<int>, int> antidegree;
21  Eigen::Matrix<int, -1, -1> index_product;
22  std::vector<int> minsphere;
23  std::vector<int> maxsphere;
24  std::vector<std::vector<int>> basicIrreducibles;
25  };
26 
28  template<typename group_t>
29  class MultTable : public MultTableData<group_t>{
30  typedef typename group_t::rank_t rank_t;
31  typedef typename group_t::diff_t diff_t;
32 
33  public:
34 
45 
48 
51 
53  MultTable(int, const std::vector<int>&, const std::vector<int>&, const std::vector<std::vector<int>>&);
54 
56  int getdegreeindex(const std::vector<int>&) const;
57 
60  bool degreewithinrange(const std::vector<int>&) const;
61 
62  Green<group_t> triple_product(int i, int j1, int j2) const;
63 
64  protected:
65 
67  std::vector<int> getsphere(const std::vector<int>& deg) const;
68 
69 
70  private:
71  Hash<std::vector<int>, std::vector<int>> perfect_hasher;
72  std::vector<Chains<rank_t, diff_t>> basicChains;
73  std::map<int, Chains<rank_t, diff_t>> sphereChains;
74  void getIrreducibleChains();
75  void multiply_all_indices();
76  void multiply(int, int);
77  void make();
78  void generators();
79  void compute(const std::vector<std::pair<int, int>>&);
80  };
81 }
82 #include "impl/Mult_Table.ipp"
Contains general functions and vector overloads independent of everything else.
Contains open MP macros that enable and control multithreading.
Contains the methods computing the RO(G) homology of a point.
The result of multiplying generators in a Green functor.
Definition: Green.hpp:25
General template class for hashing vectors.
Definition: General.hpp:130
Two levels of a Mackey functor, used for identification.
Definition: Identify.hpp:13
Forms the multiplication table.
Definition: Mult_Table.hpp:29
int getdegreeindex(const std::vector< int > &) const
Retrieve the degree index of the given degree. Returns -1 if no such degree can be found.
std::vector< int > getsphere(const std::vector< int > &deg) const
Isolate sphere from the degree vector (i.e. get everything but first entry)
bool degreewithinrange(const std::vector< int > &) const
Checks if given degree is within the computed range.
MultTable(const MultTableData< group_t > &MTD)
Constructs multiplication table given the fundamental data (say after serialization)
Green< group_t > triple_product(int i, int j1, int j2) const
MultTable(int, const std::vector< int > &, const std::vector< int > &, const std::vector< std::vector< int >> &)
Constructs the multiplication table given the maximum and minimum spheres and the basic irreducibles.
MultTable(MultTableData< group_t > &&MTD)
Constructs multiplication table given the fundamental data (say after serialization)
Everything in this library is under this namespace.
Definition: Box.hpp:9
The data of the multiplication table.
Definition: Mult_Table.hpp:14
std::vector< std::vector< int > > basicIrreducibles
The basic irreducibles we use to produce the factorizations (eg Euler and orientation classes)
Definition: Mult_Table.hpp:24
std::vector< std::vector< Green< group_t > > > Greens
Each entry in the multiplication table.
Definition: Mult_Table.hpp:17
std::vector< std::vector< int > > degree
Maps each index to the corresponding degree.
Definition: Mult_Table.hpp:19
std::map< std::vector< int >, int > antidegree
Maps each degree to the corresponding index.
Definition: Mult_Table.hpp:20
Eigen::Matrix< int, -1, -1 > index_product
Maps each index and irreducible to the index of their product.
Definition: Mult_Table.hpp:21
std::vector< int > minsphere
The lower bound on the range of our spheres.
Definition: Mult_Table.hpp:22
std::map< std::vector< int >, IDGenerators< typename group_t::rank_t > > NonZeroHomology
Definition: Mult_Table.hpp:16
int level
The Mackey functor level we are working in ///.
Definition: Mult_Table.hpp:15
std::vector< int > maxsphere
The upper bound on the range of our spheres.
Definition: Mult_Table.hpp:23
std::map< std::array< int, 3 >, Green< group_t > > tripleGreens
Triple products used when all other identification methods fail.
Definition: Mult_Table.hpp:18