ExaTN
contraction_seq_optimizer.hpp
1 
10 #ifndef EXATN_NUMERICS_CONTRACTION_SEQ_OPTIMIZER_HPP_
11 #define EXATN_NUMERICS_CONTRACTION_SEQ_OPTIMIZER_HPP_
12 
13 #include "tensor_basic.hpp"
14 
15 #include <list>
16 #include <memory>
17 #include <functional>
18 
19 namespace exatn{
20 
21 namespace numerics{
22 
23 //Tensor contraction triple:
24 struct ContrTriple{
25  unsigned int result_id; //id of the tensor-result (new)
26  unsigned int left_id; //id of the left input tensor (old)
27  unsigned int right_id; //id of the right input tensor (old)
28 };
29 
30 class TensorNetwork;
31 
32 
34 
35 public:
36 
37  virtual ~ContractionSeqOptimizer() = default;
38 
46  virtual double determineContractionSequence(const TensorNetwork & network,
47  std::list<ContrTriple> & contr_seq,
48  std::function<unsigned int ()> intermediate_num_generator) = 0;
49 };
50 
51 using createContractionSeqOptimizerFn = std::unique_ptr<ContractionSeqOptimizer> (*)(void);
52 
53 } //namespace numerics
54 
55 } //namespace exatn
56 
57 #endif //EXATN_NUMERICS_CONTRACTION_SEQ_OPTIMIZER_HPP_
exatn::numerics::TensorNetwork
Definition: tensor_network.hpp:72
exatn::numerics::ContractionSeqOptimizer
Definition: contraction_seq_optimizer.hpp:33
exatn
Definition: DriverClient.hpp:10
exatn::numerics::ContrTriple
Definition: contraction_seq_optimizer.hpp:24
exatn::numerics::ContractionSeqOptimizer::determineContractionSequence
virtual double determineContractionSequence(const TensorNetwork &network, std::list< ContrTriple > &contr_seq, std::function< unsigned int()> intermediate_num_generator)=0