isomatch
groupEquality.h
Go to the documentation of this file.
1 
5 #pragma once
6 
7 #include "circuitTree.h"
8 #include <vector>
9 #include <unordered_map>
10 #include <set>
11 
12 namespace groupEquality {
13  typedef std::vector<std::vector<CircuitTree*> > SigSplit;
14  typedef std::unordered_map<sign_t, std::set<CircuitTree*> > SigSplitMapped;
15 
16  class TooManyPermutations : public std::exception {};
17 
18  class Permutation {
19  public:
20  typedef std::vector<int> PermElem;
21 
22  Permutation(const SigSplit& split);
23  const PermElem& operator[](sign_t index) const;
24 
26  bool next();
27 
28  private:
29  typedef std::vector<PermElem> PermStruct;
30 
31  void mkIdentity(std::vector<int>& vect);
32  inline PermStruct::iterator lastIter();
33 
34  PermStruct perms;
35  PermStruct::iterator nextChange;
36  };
37 
39  int factorial(int k);
40 
42  sign_t wireSignature(WireId* wire, int accuracy = -1);
43 
54  void splitOnSig(const std::vector<CircuitTree*> circuits,
55  SigSplit& splitted,
56  std::vector<sign_t>& signatures,
57  int maxPermutations = -1,
58  int accuracy = -1);
59 
62  bool equalSizes(
63  const SigSplit& fst,
64  const SigSplit& snd);
65 
67  const SigSplit& leftSplit, const SigSplit& rightSplit,
68  const Permutation& perm);
69 
70  bool equal(CircuitGroup* left, CircuitGroup* right);
71 }
sign_t wireSignature(WireId *wire, int accuracy)
Computes the signature of a wire with given accuracy.
Definition: groupEquality.cpp:51
Definition: groupEquality.cpp:11
bool equal(CircuitGroup *left, CircuitGroup *right)
Definition: groupEquality.cpp:193
std::vector< std::vector< CircuitTree * > > SigSplit
Definition: groupEquality.h:13
std::vector< int > PermElem
Definition: groupEquality.h:20
void splitOnSig(const vector< CircuitTree *> circuits, SigSplit &splitted, std::vector< sign_t > &signatures, int maxPermutations, int accuracy)
Definition: groupEquality.cpp:66
Definition: wireId.h:21
Definition: groupEquality.h:18
Definition: circuitGroup.h:47
Definition: groupEquality.h:16
int factorial(int k)
Computes k!
Definition: groupEquality.cpp:44
std::unordered_map< sign_t, std::set< CircuitTree * > > SigSplitMapped
Definition: groupEquality.h:14
bool equalWithPermutation(const SigSplit &leftSplit, const SigSplit &rightSplit, const Permutation &perm)
Definition: groupEquality.cpp:115
bool equalSizes(const SigSplit &fst, const SigSplit &snd)
Definition: groupEquality.cpp:101
uint64_t sign_t
Type of a circuit signature.
Definition: isomatch.h:26