21 #ifndef FST_EXTENSIONS_MPDT_MPDTSCRIPT_H_ 22 #define FST_EXTENSIONS_MPDT_MPDTSCRIPT_H_ 47 std::tuple<
const FstClass &,
const FstClass &,
48 const std::vector<std::pair<int64_t, int64_t>> &,
49 const std::vector<int64_t> &, MutableFstClass *,
54 const Fst<Arc> &ifst1 = *(std::get<0>(*args).GetFst<Arc>());
55 const Fst<Arc> &ifst2 = *(std::get<1>(*args).GetFst<Arc>());
57 std::vector<std::pair<typename Arc::Label, typename Arc::Label>> typed_parens(
58 std::get<2>(*args).size());
59 std::copy(std::get<2>(*args).begin(), std::get<2>(*args).end(),
60 typed_parens.begin());
61 using Level =
typename Arc::Label;
62 std::vector<Level> typed_assignments(std::get<3>(*args).size());
63 std::copy(std::get<3>(*args).begin(), std::get<3>(*args).end(),
64 typed_assignments.begin());
65 if (std::get<6>(*args)) {
66 Compose(ifst1, typed_parens, typed_assignments, ifst2, ofst,
69 Compose(ifst1, ifst2, typed_parens, typed_assignments, ofst,
74 void Compose(
const FstClass &ifst1,
const FstClass &ifst2,
75 const std::vector<std::pair<int64_t, int64_t>> &parens,
76 const std::vector<int64_t> &assignments, MutableFstClass *ofst,
80 const FstClass &,
const std::vector<std::pair<int64_t, int64_t>> &,
85 const Fst<Arc> &
fst = *(std::get<0>(*args).GetFst<Arc>());
90 std::vector<std::pair<typename Arc::Label, typename Arc::Label>> typed_parens(
91 std::get<1>(*args).size());
92 std::copy(std::get<1>(*args).begin(), std::get<1>(*args).end(),
93 typed_parens.begin());
94 using Level =
typename Arc::Label;
95 std::vector<Level> typed_assignments(std::get<2>(*args).size());
96 std::copy(std::get<2>(*args).begin(), std::get<2>(*args).end(),
97 typed_assignments.begin());
98 Expand(fst, typed_parens, typed_assignments, ofst,
99 MPdtExpandOptions(std::get<4>(*args).connect,
100 std::get<4>(*args).keep_parentheses));
103 void Expand(
const FstClass &ifst,
104 const std::vector<std::pair<int64_t, int64_t>> &parens,
105 const std::vector<int64_t> &assignments, MutableFstClass *ofst,
106 const MPdtExpandOptions &opts);
109 std::tuple<
const FstClass &,
110 const std::vector<std::pair<int64_t, int64_t>> &,
111 std::vector<int64_t> *, MutableFstClass *>;
115 const Fst<Arc> &
fst = *(std::get<0>(*args).GetFst<Arc>());
120 std::vector<std::pair<typename Arc::Label, typename Arc::Label>> typed_parens(
121 std::get<1>(*args).size());
122 std::copy(std::get<1>(*args).begin(), std::get<1>(*args).end(),
123 typed_parens.begin());
124 using Level =
typename Arc::Label;
125 std::vector<Level> typed_assignments(std::get<2>(*args)->size());
126 std::copy(std::get<2>(*args)->begin(), std::get<2>(*args)->end(),
127 typed_assignments.begin());
128 Reverse(fst, typed_parens, &typed_assignments, ofst);
130 std::copy(typed_assignments.begin(), typed_assignments.end(),
131 std::get<2>(*args)->begin());
134 void Reverse(
const FstClass &ifst,
135 const std::vector<std::pair<int64_t, int64_t>> &parens,
136 std::vector<int64_t> *assignments, MutableFstClass *ofst);
139 std::tuple<
const FstClass &,
140 const std::vector<std::pair<int64_t, int64_t>> &,
141 const std::vector<int64_t> &>;
145 const Fst<Arc> &
fst = *(std::get<0>(*args).GetFst<Arc>());
149 std::vector<std::pair<typename Arc::Label, typename Arc::Label>> typed_parens(
150 std::get<1>(*args).size());
151 std::copy(std::get<1>(*args).begin(), std::get<1>(*args).end(),
152 typed_parens.begin());
153 using Level =
typename Arc::Label;
154 std::vector<Level> typed_assignments(std::get<2>(*args).size());
155 std::copy(std::get<2>(*args).begin(), std::get<2>(*args).end(),
156 typed_assignments.begin());
157 MPdtInfo<Arc> mpdtinfo(fst, typed_parens, typed_assignments);
161 void Info(
const FstClass &ifst,
162 const std::vector<std::pair<int64_t, int64_t>> &parens,
163 const std::vector<int64_t> &assignments);
168 #endif // FST_EXTENSIONS_MPDT_MPDTSCRIPT_H_
MutableFst< Arc > * GetMutableFst()
void Reverse(const FstClass &ifst, const std::vector< std::pair< int64_t, int64_t >> &parens, std::vector< int64_t > *assignments, MutableFstClass *ofst)
std::tuple< const FstClass &, const std::vector< std::pair< int64_t, int64_t >> &, const std::vector< int64_t > & > MPdtInfoArgs
std::tuple< const FstClass &, const FstClass &, const std::vector< std::pair< int64_t, int64_t >> &, const std::vector< int64_t > &, MutableFstClass *, const MPdtComposeOptions &, bool > MPdtComposeArgs
void Info(const std::vector< std::string > &sources, const std::string &arc_type, const std::string &begin_key, const std::string &end_key, bool list_fsts)
std::tuple< const FstClass &, const std::vector< std::pair< int64_t, int64_t >> &, std::vector< int64_t > *, MutableFstClass * > MPdtReverseArgs
void Expand(const FstClass &ifst, const std::vector< std::pair< int64_t, int64_t >> &parens, const std::vector< int64_t > &assignments, MutableFstClass *ofst, const MPdtExpandOptions &opts)
std::tuple< const FstClass &, const std::vector< std::pair< int64_t, int64_t >> &, const std::vector< int64_t > &, MutableFstClass *, const MPdtExpandOptions & > MPdtExpandArgs
void Compose(const FstClass &ifst1, const FstClass &ifst2, const std::vector< std::pair< int64_t, int64_t >> &parens, const std::vector< int64_t > &assignments, MutableFstClass *ofst, const MPdtComposeOptions &copts, bool left_pdt)