Example #1
0
  def Compute(self):
    n = 1
    m = max(self.power, 3) + 7
    manage.config.N, manage.config.M = n, m
    impl = manage.config.EXPR_IMPL
    manage.config.MAXPOWER = np.array([self.power])
    self.SetStartSymbols(1)
    target = None
    for h_iter in itertools.combinations(xrange(m), self.power):
      small_target = None
      expr_vector = np.zeros((1, m))
      for h in h_iter:
        expr_vector[0, h] = 1
      expr = impl([1], expr_vector)
      if target is None:
        target = expr
      else:
        target = target + expr
    target = np.array([[target]])
    matlab = '''n = 1;
m = 18;
A = randn(1, m);
sub = nchoosek(1:m, %s);
original = 0;
for i = 1:size(sub, 1)
  original = original + prod(A(sub(i, :)));
end
''' % self.power
    target = ExprMatrix(comp={THIS: ""}, expressions=target, powers=manage.config.MAXPOWER)
    target = target.ElementwiseMultiply(120)
    target.comp[MATLAB] = matlab
    self.target_mat = target
Example #2
0
    def testFindLinearCombinationBroadcasting(self):
        manage.config.MAXPOWER = np.array([10])
        #  mat1          mat2         target
        #  x1  | x1x2    x1           3x1      | 2x1x2 + x1
        #  2x3 | x2^2    x3           5x3      | 2x2^2 + x3
        mat1_11 = ExprSymbolic([1], np.array([[1, 0, 0]]))
        mat1_12 = ExprSymbolic([1], np.array([[1, 1, 0]]))
        mat1_21 = ExprSymbolic([2], np.array([[0, 0, 1]]))
        mat1_22 = ExprSymbolic([1], np.array([[0, 2, 0]]))

        mat2_11 = ExprSymbolic([1], np.array([[1, 0, 0]]))
        mat2_21 = ExprSymbolic([1], np.array([[0, 0, 1]]))

        target_11 = ExprSymbolic([3], np.array([[1, 0, 0]]))
        target_12 = ExprSymbolic([2, 1], np.array([[1, 1, 0], [1, 0, 0]]))
        target_21 = ExprSymbolic([5], np.array([[0, 0, 1]]))
        target_22 = ExprSymbolic([2, 1], np.array([[0, 2, 0], [0, 0, 1]]))

        mat1 = ExprMatrix("a",
                          np.array([[mat1_11, mat1_12], [mat1_21, mat1_22]]),
                          np.array([1]))
        mat2 = ExprMatrix("b", np.array([[mat2_11], [mat2_21]]), np.array([1]))
        target = ExprMatrix(
            "target", np.array([[target_11, target_12], [target_21,
                                                         target_22]]),
            np.array([1]))
        expressions_list = [mat1, mat2]
        weights = ExprSymbolic.FindLinearCombination(expressions_list,
                                                     target)[0]

        self.assertEquals(2, len(weights))
        self.assertAlmostEqual(2.0, weights[0])
        self.assertAlmostEqual(1.0, weights[1])
Example #3
0
    def Compute(self):
        n = 1
        m = max(self.power, 3) + 7
        manage.config.N, manage.config.M = n, m
        impl = manage.config.EXPR_IMPL
        manage.config.MAXPOWER = np.array([self.power])
        self.SetStartSymbols(1)
        target = None
        for h_iter in itertools.combinations(xrange(m), self.power):
            small_target = None
            expr_vector = np.zeros((1, m))
            for h in h_iter:
                expr_vector[0, h] = 1
            expr = impl([1], expr_vector)
            if target is None:
                target = expr
            else:
                target = target + expr
        target = np.array([[target]])
        matlab = '''n = 1;
m = 18;
A = randn(1, m);
sub = nchoosek(1:m, %s);
original = 0;
for i = 1:size(sub, 1)
  original = original + prod(A(sub(i, :)));
end
''' % self.power
        target = ExprMatrix(comp={THIS: ""},
                            expressions=target,
                            powers=manage.config.MAXPOWER)
        target = target.ElementwiseMultiply(120)
        target.comp[MATLAB] = matlab
        self.target_mat = target
Example #4
0
def GetMatricesSumMul(n, m, expr_impl):
    manage.config.MAXPOWER = np.array([10, 10])
    mat_a = []
    for r in xrange(n):
        row = []
        for c in xrange(m):
            vec = [0] * (2 * n * m)
            vec[r * m + c] = 1
            row.append(expr_impl([1], np.array([vec])))
        mat_a.append(row)
    mat_b = []
    for r in xrange(n):
        row = []
        for c in xrange(m):
            vec = [0] * (2 * n * m)
            vec[n * m + r * n + c] = 1
            row.append(expr_impl([1], np.array([vec])))
        mat_b.append(row)

    A = ExprMatrix(comp='A',
                   expressions=np.array(mat_a),
                   powers=np.array([1, 0]))
    B = ExprMatrix(comp='B',
                   expressions=np.array(mat_b),
                   powers=np.array([0, 1]))
    return A, B
Example #5
0
    def testElementwiseMultiply(self):
        manage.config.MAXPOWER = np.array([10, 10])
        # a = x1 * x3
        # b = x1 * x2^2
        # c = x2^3 + x3^4
        a = ExprSymbolic([1], np.array([[1, 0, 1]]))
        b = ExprSymbolic([1], np.array([[1, 2, 0]]))
        c = ExprSymbolic([1, 1], np.array([[0, 3, 0], [0, 0, 4]]))
        expressions1 = np.array([[a, b], [c, a]])
        expressions2 = np.array([[a, a], [a, a]])
        # mat1:
        #  x1x3  |  x1 * x2^2
        #  x2^3 + x3^4 | x1x3
        mat1 = ExprMatrix('M1', expressions1, powers=np.array([1, 0]))
        mat2 = ExprMatrix('M2', expressions2, powers=np.array([0, 1]))

        mat1 = mat1.ElementwiseMultiply(mat2)
        self.assertEquals((2, 2), mat1.expressions.shape)

        elem = mat1.expressions[0, 0]
        self.assertEquals(1, elem.expr_vectors.shape[0])
        self.assertEquals(1, elem.quants[0])
        self.assertTrue((np.array([2, 0, 2]) == elem.expr_vectors).all())

        elem2 = mat1.expressions[1, 0]  # x1x3 * (x2^3 + x3^4)
        self.assertEquals(2, elem2.expr_vectors.shape[0])
        self.assertTrue((np.array([1, 3, 1]) == elem2.expr_vectors).any())
        self.assertTrue((np.array([1, 0, 5]) == elem2.expr_vectors).any())
        self.assertTrue((np.array([1, 1]) == elem2.quants).any())
Example #6
0
 def testHashImmuneToConst(self):
     manage.config.MAXPOWER = np.array([10])
     a = ExprSymbolic([2, 3], np.array([[1, 2, 3], [4, 5, 6]]))
     b = ExprSymbolic([4, 6], np.array([[1, 2, 3], [4, 5, 6]]))
     self.assertNotEquals(a, b)
     a = ExprMatrix("a", np.array([[a]]), np.array([1]))
     b = ExprMatrix("b", np.array([[b]]), np.array([1]))
     self.assertEquals(a, b)
  def testMarginalizeBothAxis(self):
    manage.config.MAXPOWER = np.array([10])
    a = ExprZp([1], np.array([[1, 0, 0]]))
    b = ExprZp([1], np.array([[0, 1, 0]]))
    c = ExprZp([2], np.array([[0, 0, 1]]))
    expressions = np.array([[a, b, c], [a, b, c]], dtype=np.object)

    matrix = ExprMatrix('A', expressions, powers=np.array([1]))
    matrix = matrix.Marginalize(axis=None)
    self.assertEquals((1, 1), matrix.expressions.shape)
Example #8
0
    def testMarginalizeBothAxis(self):
        a = ExprSymbolic([1], np.array([[1, 0, 0]]))
        b = ExprSymbolic([1], np.array([[0, 1, 0]]))
        c = ExprSymbolic([2], np.array([[0, 0, 1]]))
        expressions = np.array([[a, b, c], [a, b, c]], dtype=np.object)

        matrix = ExprMatrix('A', expressions, powers=np.array([1]))
        matrix = matrix.Marginalize(axis=None)
        self.assertEquals((1, 1), matrix.expressions.shape)
        self.assertEquals(3, len(matrix.expressions.item(0, 0).quants))
        self.assertEquals([2, 2, 4],
                          sorted(matrix.expressions.item(0, 0).quants))
Example #9
0
    def testSameHash(self):
        manage.config.MAXPOWER = np.array([10])
        a = ExprSymbolic([1], np.array([[1, 0, 0, 0]]))
        b = ExprSymbolic([1], np.array([[0, 1, 0, 0]]))
        c = ExprSymbolic([1], np.array([[0, 0, 1, 0]]))
        d = ExprSymbolic([1], np.array([[0, 0, 0, 1]]))
        expressions = np.array([[a, b], [c, d]], dtype=np.object)

        matrix = ExprMatrix('A', expressions, powers=np.array([1]))
        Q = matrix.Marginalize(axis=0).Marginalize(axis=1)
        W = matrix.Marginalize(axis=1).Marginalize(axis=0)
        self.assertEquals(Q, W)
Example #10
0
 def testHashIsComputed(self):
   manage.config.MAXPOWER = np.array([10])
   a = ExprZp(
       [2, 3],
       np.array([[1, 2, 3], [4, 5, 6]]))
   b = ExprZp(
       [2, 2],
       np.array([[1, 2, 3], [4, 5, 6]]))
   self.assertNotEquals(a, b)
   a = ExprMatrix("a", np.array([[a]]), np.array([1]))
   b = ExprMatrix("b", np.array([[b]]), np.array([1]))
   self.assertNotEquals(a, b)
Example #11
0
  def Compute(self):
    n = 1
    m = max(self.power, 2) + 1
    manage.config.N, manage.config.M = n, m
    impl = manage.config.EXPR_IMPL
    manage.config.MAXPOWER = np.array([self.power])
    W = self.SetStartSymbols(1)[0]
    zeros = np.array([0] * (n * m))
    powers = [0]
    # Target expression: sum (v^T W)^k
    singles = []
    for h_iter in range(0, pow(2, m)):
      row = []
      for mm in range(0, m):
        if h_iter & pow(2, mm):
          row.append([impl([1], np.array([zeros]))])
        else:
          row.append([impl([0], np.array([zeros]))])
      h = ExprMatrix(comp="", \
        expressions=np.array(row), powers=powers)
      singles.append(W.Multiply(h).Power(self.power))
    target = ExprAbstract.AddManyExpressions(singles)
    matlab = '''n = 14;
m = 1;
A = randn(1, n);
nset = dec2bin(0:(2^(n) - 1));
original = 0;
for i = 1:size(nset, 1)
  v = logical(nset(i, :) - '0');
  original = original + (v * A') ^ %d;
end
''' % self.power
    target.comp[MATLAB] = matlab
 
    self.target_mat = target
  def testElementwiseMultiply(self):
    manage.config.MAXPOWER = np.array([10, 10])
    # a = x1 * x3
    # b = x1 * x2^2
    # c = x2^3 + x3^4
    a = ExprZp([1], np.array([[1, 0, 1]]))
    b = ExprZp([1], np.array([[1, 2, 0]]))
    c = ExprZp([1, 1], np.array([[0, 3, 0], [0, 0, 4]]))
    expressions1 = np.array([[a, b], [c, a]])
    expressions2 = np.array([[a, a], [a, a]])
    # mat1:
    #  x1x3  |  x1 * x2^2
    #  x2^3 + x3^4 | x1x3
    mat1 = ExprMatrix('M1', expressions1, powers=np.array([1, 0]))
    mat2 = ExprMatrix('M2', expressions2, powers=np.array([0, 1]))

    mat1.ElementwiseMultiply(mat2)
    self.assertEquals((2, 2), mat1.expressions.shape)
Example #13
0
    def testShapesAfterSumAreCorrec(self):
        a = ExprSymbolic([1], np.array([[1, 0, 0]]))
        b = ExprSymbolic([1], np.array([[0, 1, 0]]))
        expressions = np.array([[a, a, a], [b, b, b]])
        matrix = ExprMatrix('M', expressions, powers=np.array([1]))
        # Exp matrix test
        self.assertEquals((2, 3), matrix.expressions.shape)
        m0 = copy.copy(matrix)
        m0 = m0.Marginalize(axis=0)
        self.assertEquals((1, 3), m0.expressions.shape)
        self.assertEquals(a + b, m0.expressions[0, 0])
        self.assertEquals(a + b, m0.expressions[0, 1])

        m1 = copy.copy(matrix)
        m1 = m1.Marginalize(axis=1)
        self.assertEquals((2, 1), m1.expressions.shape)
        self.assertEquals(a + a + a, m1.expressions[0, 0])
        self.assertEquals(b + b + b, m1.expressions[1, 0])
Example #14
0
 def SetStartSymbols(self, nr):
     n, m = manage.config.N, manage.config.M
     self.start_symbols = []
     for k in range(nr):
         mat = []
         for r in xrange(n):
             row = []
             for c in xrange(m):
                 vec = np.array([0] * nr * (n * m))
                 vec[k * n * m + r * m + c] = 1
                 row.append(manage.config.EXPR_IMPL([1], np.array([vec])))
             mat.append(row)
         powers = np.array([0] * nr)
         powers[k] = 1
         expr_mat = ExprMatrix(comp=chr(ord('A') + k),
                               expressions=np.array(mat),
                               powers=powers)
         self.start_symbols.append(expr_mat)
     return self.start_symbols
Example #15
0
 def SetStartSymbolsWithShapes(self, mat_shapes):
     self.start_symbols = []
     total_variables = sum(n * m for n, m in mat_shapes)
     variables_so_far = 0
     for k, (n, m) in enumerate(mat_shapes):
         mat = []
         for r in xrange(n):
             row = []
             for c in xrange(m):
                 vec = np.array([0] * total_variables)
                 vec[variables_so_far + r * m + c] = 1
                 row.append(manage.config.EXPR_IMPL([1], np.array([vec])))
             mat.append(row)
         powers = np.array([0] * len(mat_shapes))
         powers[k] = 1
         expr_mat = ExprMatrix(comp=chr(ord('A') + k),
                               expressions=np.array(mat),
                               powers=powers)
         self.start_symbols.append(expr_mat)
         variables_so_far += n * m
     assert variables_so_far == total_variables
     return self.start_symbols
Example #16
0
    def Compute(self):
        n = max(self.power, 2)
        m = n + 1
        manage.config.N, manage.config.M = n, m
        impl = manage.config.EXPR_IMPL
        manage.config.MAXPOWER = np.array([self.power])
        W = self.SetStartSymbols(1)[0]
        zeros = np.array([0] * (n * m))
        powers = [0]
        # Target expression: sum (v^T W h)^k
        singles = []
        vs = []
        vWs = []
        hs = []
        for v_iter in range(0, pow(2, n)):
            col = []
            col01 = []
            for nn in range(0, n):
                if v_iter & pow(2, nn):
                    col.append(impl([1], np.array([zeros])))
                    col01.append(1)
                else:
                    col.append(impl([0], np.array([zeros])))
                    col01.append(0)
            v = ExprMatrix(comp="np.array([%s])" % str(col01), \
                  expressions=np.array([col]), powers=powers)
            vs.append(v)
            vWs.append(v.Multiply(W))
        for h_iter in range(0, pow(2, m)):
            row = []
            row01 = []
            for mm in range(0, m):
                if h_iter & pow(2, mm):
                    row.append([impl([1], np.array([zeros]))])
                    row01.append(1)
                else:
                    row.append([impl([0], np.array([zeros]))])
                    row01.append(0)
            hs.append(ExprMatrix(comp="np.array([%s]).transpose()" % str(row01), \
              expressions=np.array(row), powers=powers))
        for v_iter in range(0, pow(2, n)):
            v = vs[v_iter]
            vW = vWs[v_iter]
            for h_iter in range(0, pow(2, m)):
                h = hs[h_iter]
                singles.append(vW.Multiply(h).Power(self.power))
        target = ExprAbstract.AddManyExpressions(singles)
        matlab = '''n = 7;
m = 8;
A = randn(n, m);
nset = dec2bin(0:(2^(n) - 1));
mset = dec2bin(0:(2^(m) - 1));
original = 0;
for i = 1:size(nset, 1)
  for j = 1:size(mset, 1)
    v = logical(nset(i, :) - '0');
    h = logical(mset(j, :) - '0');
    original = original + (v * A * h') ^ %d;
  end
end
''' % self.power
        target.comp[MATLAB] = matlab

        self.target_mat = target
Example #17
0
 def testAddOne(self):
     manage.config.MAXPOWER = np.array([10])
     a = ExprSymbolic([5], np.array([[0, 0, 0, 0]]))
     expressions = np.array([[a]], dtype=np.object)
     matrix = ExprMatrix('A', expressions, powers=np.array([1]))
     self.assertTrue(matrix.Add(4).expressions[0, 0].quants.shape[0] == 1)