diprism / fggs

Factor Graph Grammars in Python
MIT License
13 stars 3 forks source link

Error in sum_product(method='newton') #72

Closed davidweichiang closed 2 years ago

davidweichiang commented 2 years ago

This code is giving me an error:

    g = fggs.HRG()

    s = fggs.EdgeLabel("S", (), is_nonterminal=True)
    g.start_symbol = s

    p = fggs.EdgeLabel("p", (), is_terminal=True)

    rhs = fggs.Graph()
    rhs.add_edge(fggs.Edge(s, ()))
    rhs.add_edge(fggs.Edge(p, ()))
    g.add_rule(fggs.HRGRule(s, rhs))

    rhs = fggs.Graph()
    g.add_rule(fggs.HRGRule(s, rhs))

    gi = fggs.Interpretation()
    top = fggs.EdgeLabel("top", (), is_terminal=True)
    gi.add_factor(top, fggs.CategoricalFactor([], torch.tensor(1.)))
    gi.add_factor(p, fggs.CategoricalFactor([], torch.tensor(0.5)))

    z = fggs.sum_product(fggs.FGG(g, gi), method='newton')

The error is:

  File ".../fgg-implementation/fggs/sum_product.py", line 144, in J
    terms.append(torch.einsum(equation, *(tensors[:i] + tensors[(i + 1):])))
  File ".../torch/functional.py", line 408, in einsum
    return _VF.einsum(equation, operands)  # type: ignore
RuntimeError: einsum() must provide at least one operand
kennethsible commented 2 years ago

Fixed by pull request #73.