summaryrefslogtreecommitdiff
path: root/python/cdec/hypergraph.pxd
blob: 1e150bbc6a91a4c5396fdff05ff7fc6c376f0e1a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
from libcpp.string cimport string
from libcpp.vector cimport vector
from utils cimport *
from grammar cimport TRule
from lattice cimport Lattice

cdef extern from "decoder/hg.h":
    cdef cppclass EdgeMask "std::vector<bool>":
        EdgeMask(int size)
        bint& operator[](int)

    cdef cppclass HypergraphEdge "Hypergraph::Edge":
        int id_
        int head_node_ # position in hg.nodes_
        SmallVector[unsigned] tail_nodes_ # positions in hg.nodes_
        shared_ptr[TRule] rule_
        FastSparseVector[weight_t] feature_values_
        prob_t edge_prob_ # weights.dot(feature_values_)
        # typically source span:
        short int i_
        short int j_
        short int prev_i_
        short int prev_j_

    ctypedef HypergraphEdge const_HypergraphEdge "const Hypergraph::Edge"

    cdef cppclass HypergraphNode "Hypergraph::Node":
        int id_
        WordID cat_ # non-terminal category if <0, 0 if not set
        vector[int] in_edges_ # positions in hg.edge_prob_
        vector[int] out_edges_ # positions in hg.edge_prob_

    ctypedef HypergraphNode const_HypergraphNode "const Hypergraph::Node"

    cdef cppclass Hypergraph:
        Hypergraph()
        Hypergraph(Hypergraph) nogil
        vector[HypergraphNode] nodes_
        vector[HypergraphEdge] edges_
        int GoalNode()
        double NumberOfPaths()
        void Reweight(vector[weight_t]& weights) nogil
        void Reweight(FastSparseVector[weight_t]& weights) nogil
        bint PruneInsideOutside(double beam_alpha,
                                double density,
                                EdgeMask* preserve_mask,
                                bint use_sum_prod_semiring,
                                double scale,
                                bint safe_inside) nogil
        shared_ptr[Hypergraph] CreateViterbiHypergraph(EdgeMask* preserve_mask) nogil

cdef extern from "decoder/viterbi.h":
    prob_t ViterbiESentence(Hypergraph& hg, vector[WordID]* trans) nogil
    string ViterbiETree(Hypergraph& hg) nogil
    prob_t ViterbiFSentence(Hypergraph& hg, vector[WordID]* trans) nogil
    string ViterbiFTree(Hypergraph& hg) nogil
    FastSparseVector[weight_t] ViterbiFeatures(Hypergraph& hg) nogil
    FastSparseVector[weight_t] ViterbiFeatures(Hypergraph& hg, 
            FastSparseVector[weight_t]* weights,
            bint fatal_dotprod_disagreement) nogil
    string JoshuaVisualizationString(Hypergraph& hg) nogil

cdef extern from "decoder/hg_io.h" namespace "HypergraphIO":
    # Hypergraph JSON I/O
    bint ReadFromJSON(istream* inp, Hypergraph* out)
    bint WriteToJSON(Hypergraph& hg, bint remove_rules, ostream* out)
    # Hypergraph PLF I/O
    void ReadFromPLF(string& inp, Hypergraph* out)
    string AsPLF(Hypergraph& hg, bint include_global_parentheses)
    # Lattice PLF I/O
    void PLFtoLattice(string& plf, Lattice* pl)
    string AsPLF(Lattice& lat, bint include_global_parentheses)

cdef extern from "decoder/hg_intersect.h" namespace "HG":
    bint Intersect(Lattice& target, Hypergraph* hg) nogil

cdef extern from "decoder/hg_sampler.h" namespace "HypergraphSampler":
    cdef cppclass Hypothesis:
        vector[WordID] words
        FastSparseVector[weight_t] fmap
        prob_t model_score
    void sample_hypotheses(Hypergraph& hg, 
                           unsigned n, 
                           MT19937* rng, 
                           vector[Hypothesis]* hypos) nogil
    void sample_trees(Hypergraph& hg, 
                      unsigned n, 
                      MT19937* rng, 
                      vector[string]* trees) nogil

cdef extern from "decoder/csplit.h" namespace "CompoundSplit":
    int GetFullWordEdgeIndex(Hypergraph& forest)

cdef extern from "decoder/inside_outside.h":
    prob_t InsideOutside "InsideOutside<prob_t, EdgeProb, SparseVector<prob_t>, EdgeFeaturesAndProbWeightFunction>" (Hypergraph& hg, FastSparseVector[prob_t]* result) nogil