FST  openfst-1.8.2
OpenFst Library
fstscript.h
Go to the documentation of this file.
1 // Copyright 2005-2020 Google LLC
2 //
3 // Licensed under the Apache License, Version 2.0 (the 'License');
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an 'AS IS' BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 //
15 // See www.openfst.org for extensive documentation on this weighted
16 // finite-state transducer library.
17 //
18 // The FST script interface permits users to interact with FSTs without knowing
19 // their arc type. It does this by mapping compile-time polymorphism (in the
20 // form of a arc-templated FST types) onto a shared virtual interface. It also
21 // supports arc extension via a DSO interface. Due to the overhead of virtual
22 // dispatch and registered function lookups, the script API is somewhat slower
23 // then library API provided by types like StdVectorFst, but has the advantage
24 // that it is designed not to crash (and to provide useful debugging
25 // information) upon common user errors like passing invalid indices or
26 // attempting comparison of incompatible FSTs. It is used both by the FST
27 // binaries and the Python extension.
28 //
29 // This header includes all of the FST script functionality.
30 
31 #ifndef FST_SCRIPT_FSTSCRIPT_H_
32 #define FST_SCRIPT_FSTSCRIPT_H_
33 
34 // Major classes
37 #include <fst/script/fst-class.h>
39 #include <fst/script/text-io.h>
41 
42 // Flag-to-enum parsers.
43 #include <fst/script/getters.h>
44 // Templates like Operation<> and Apply<>.
45 #include <fst/script/script-impl.h>
46 
47 // Operations.
48 #include <fst/script/arcsort.h>
49 #include <fst/script/closure.h>
50 #include <fst/script/compile.h>
51 #include <fst/script/compose.h>
52 #include <fst/script/concat.h>
53 #include <fst/script/connect.h>
54 #include <fst/script/convert.h>
55 #include <fst/script/decode.h>
56 #include <fst/script/determinize.h>
57 #include <fst/script/difference.h>
59 #include <fst/script/draw.h>
60 #include <fst/script/encode.h>
62 #include <fst/script/equal.h>
63 #include <fst/script/equivalent.h>
64 #include <fst/script/info.h>
65 #include <fst/script/intersect.h>
66 #include <fst/script/invert.h>
67 #include <fst/script/isomorphic.h>
68 #include <fst/script/map.h>
69 #include <fst/script/minimize.h>
70 #include <fst/script/print.h>
71 #include <fst/script/project.h>
72 #include <fst/script/prune.h>
73 #include <fst/script/push.h>
75 #include <fst/script/randgen.h>
76 #include <fst/script/relabel.h>
77 #include <fst/script/replace.h>
78 #include <fst/script/reverse.h>
79 #include <fst/script/reweight.h>
80 #include <fst/script/rmepsilon.h>
83 #include <fst/script/synchronize.h>
84 #include <fst/script/topsort.h>
85 #include <fst/script/union.h>
86 #include <fst/script/verify.h>
87 
88 // This class is necessary because registering each of the operations
89 // separately overfills the stack, as there's so many of them.
90 namespace fst {
91 namespace script {
92 
93 template <class Arc>
95  public:
97  RegisterBatch1();
98  RegisterBatch2();
99  }
100 
101  private:
102  void RegisterBatch1() {
130  }
131 
132  void RegisterBatch2() {
158  }
159 };
160 
161 } // namespace script
162 } // namespace fst
163 
164 #define REGISTER_FST_OPERATIONS(Arc) \
165  AllFstOperationsRegisterer<Arc> register_all_fst_operations##Arc;
166 
167 #endif // FST_SCRIPT_FSTSCRIPT_H_
std::tuple< const FstClass &, MutableFstClass *, const DeterminizeOptions & > FstDeterminizeArgs
Definition: determinize.h:53
std::tuple< MutableFstClass *, EncodeMapperClass * > FstEncodeArgs
Definition: encode.h:31
bool Equal(FarReaderClass &reader1, FarReaderClass &reader2, float delta, std::string_view begin_key, std::string_view end_key)
Definition: farscript.cc:105
void Determinize(FstDeterminizeArgs *args)
Definition: determinize.h:56
bool Isomorphic(FarReaderClass &reader1, FarReaderClass &reader2, float delta, std::string_view begin_key, std::string_view end_key)
Definition: farscript.cc:147
void Union(FstUnionArgs1 *args)
Definition: union.h:33
std::tuple< const FstClass &, MutableFstClass *, bool > FstReverseArgs
Definition: reverse.h:29
void Reverse(const FstClass &ifst, const std::vector< std::pair< int64_t, int64_t >> &parens, std::vector< int64_t > *assignments, MutableFstClass *ofst)
Definition: mpdtscript.cc:70
void Verify(FstVerifyArgs *args)
Definition: verify.h:31
void Replace(const std::vector< std::pair< int64_t, const FstClass * >> &pairs, MutableFstClass *ofst, std::vector< std::pair< int64_t, int64_t >> *parens, int64_t root, PdtParserType parser_type, int64_t start_paren_labels, const std::string &left_paren_prefix, const std::string &right_paren_prefix)
Definition: pdtscript.cc:72
std::pair< MutableFstClass *, const FstClass & > FstUnionArgs1
Definition: union.h:30
std::tuple< const FstClass &, std::vector< WeightClass > *, bool, double > FstShortestDistanceArgs2
void RandEquivalent(FstRandEquivalentArgs *args)
std::tuple< MutableFstClass *, const WeightClass &, int64_t, float > FstPruneArgs2
Definition: prune.h:50
void Synchronize(FstSynchronizeArgs *args)
Definition: synchronize.h:32
void Project(FstProjectArgs *args)
Definition: project.h:32
void Map(FstMapArgs *args)
Definition: map.h:76
std::tuple< const FstClass &, int64_t, ArcIteratorClass * > InitArcIteratorClassArgs
std::pair< const FstClass &, StateIteratorClass * > InitStateIteratorClassArgs
std::pair< MutableFstClass *, const EncodeMapperClass & > FstDecodeArgs
Definition: decode.h:31
void Relabel(FstRelabelArgs1 *args)
Definition: relabel.h:40
void TopSort(FstTopSortArgs *args)
Definition: topsort.h:31
void Difference(FstDifferenceArgs *args)
Definition: difference.h:34
std::pair< MutableFstClass *, ArcSortType > FstArcSortArgs
Definition: arcsort.h:32
void Closure(FstClosureArgs *args)
Definition: closure.h:32
void ShortestPath(const FstClass &ifst, const std::vector< std::pair< int64_t, int64_t >> &parens, MutableFstClass *ofst, const PdtShortestPathOptions &opts)
Definition: pdtscript.cc:106
std::tuple< const std::vector< std::pair< int64_t, const FstClass * >> &, MutableFstClass *, const ReplaceOptions & > FstReplaceArgs
Definition: replace.h:50
void Decode(FarReaderClass &reader, FarWriterClass &writer, const EncodeMapperClass &encoder)
Definition: farscript.cc:81
void Reweight(FstReweightArgs *args)
Definition: reweight.h:37
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)
Definition: farscript.cc:138
std::tuple< const FstClass &, const FstClass &, MutableFstClass *, const ComposeOptions & > FstIntersectArgs
Definition: intersect.h:31
std::tuple< const FstClass &, MutableFstClass *, uint8_t, ReweightType, float > FstPushArgs2
Definition: push.h:39
void Draw(FstDrawArgs *args)
Definition: draw.h:55
std::tuple< MutableFstClass *, MutableFstClass *, float, bool > FstMinimizeArgs
Definition: minimize.h:30
std::tuple< MutableFstClass *, const SymbolTable *, const SymbolTable *, const std::string &, bool, const SymbolTable *, const SymbolTable *, const std::string &, bool > FstRelabelArgs1
Definition: relabel.h:37
std::tuple< const FstClass &, MutableFstClass *, const DisambiguateOptions & > FstDisambiguateArgs
Definition: disambiguate.h:48
std::pair< const FstClass &, MutableFstClass * > FstSynchronizeArgs
Definition: synchronize.h:29
void ArcSort(FstArcSortArgs *args)
Definition: arcsort.h:35
void Invert(MutableFstClass *fst)
Definition: invert.h:28
std::pair< MutableFstClass *, const FstClass & > FstConcatArgs1
Definition: concat.h:29
std::tuple< MutableFstClass *, int64_t, MutableArcIteratorClass * > InitMutableArcIteratorClassArgs
std::tuple< const FstClass &, MutableFstClass *, const WeightClass &, int64_t, float > FstPruneArgs1
Definition: prune.h:33
void Disambiguate(FstDisambiguateArgs *args)
Definition: disambiguate.h:51
void Encode(FarReaderClass &reader, FarWriterClass &writer, EncodeMapperClass *encoder)
Definition: farscript.cc:93
std::tuple< const FstClass &, const FstClass &, MutableFstClass *, const ComposeOptions & > FstDifferenceArgs
Definition: difference.h:31
REGISTER_FST_OPERATION(OpenFarReaderClass, StdArc, OpenFarReaderClassArgs)
std::pair< const std::vector< FstClass * > &, MutableFstClass * > FstConcatArgs3
Definition: concat.h:48
std::pair< MutableFstClass *, const ClosureType > FstClosureArgs
Definition: closure.h:29
void Intersect(FstIntersectArgs *args)
Definition: intersect.h:34
void ShortestDistance(FstShortestDistanceArgs1 *args)
void EpsNormalize(FstEpsNormalizeArgs *args)
Definition: epsnormalize.h:33
std::pair< const FstClass &, MutableFstClass * > FstConcatArgs2
Definition: concat.h:38
void RandGen(FstRandGenArgs *args)
Definition: randgen.h:37
std::tuple< const FstClass &, std::vector< WeightClass > *, const ShortestDistanceOptions & > FstShortestDistanceArgs1
void Minimize(FstMinimizeArgs *args)
Definition: minimize.h:33
std::tuple< MutableFstClass *, const std::vector< const FstClass * > & > FstUnionArgs2
Definition: union.h:40
std::pair< MutableFstClass *, const RmEpsilonOptions & > FstRmEpsilonArgs
Definition: rmepsilon.h:117
void CompileInternal(FstCompileArgs *args)
Definition: compile.h:59
std::tuple< const FstClass &, MutableFstClass *, const RandGenOptions< RandArcSelection > &, uint64_t > FstRandGenArgs
Definition: randgen.h:34
std::tuple< const FstClass &, const FstClass &, MutableFstClass *, const ComposeOptions & > FstComposeArgs
Definition: compose.h:30
void Print(FstPrintArgs *args)
Definition: print.h:50
std::tuple< MutableFstClass *, const std::vector< std::pair< int64_t, int64_t >> &, const std::vector< std::pair< int64_t, int64_t >> & > FstRelabelArgs2
Definition: relabel.h:50
void InitStateIteratorClass(InitStateIteratorClassArgs *args)
void RmEpsilon(FstRmEpsilonArgs *args)
Definition: rmepsilon.h:120
void InitArcIteratorClass(InitArcIteratorClassArgs *args)
std::pair< MutableFstClass *, ProjectType > FstProjectArgs
Definition: project.h:29
std::tuple< MutableFstClass *, const std::vector< WeightClass > &, ReweightType > FstReweightArgs
Definition: reweight.h:34
std::tuple< const FstClass &, bool, ArcFilterType, const std::string &, bool > FstInfoArgs
Definition: info.h:33
void Connect(MutableFstClass *fst)
Definition: connect.h:28
std::tuple< const FstClass &, MutableFstClass *, const ShortestPathOptions & > FstShortestPathArgs
void Prune(FstPruneArgs1 *args)
Definition: prune.h:36
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)
Definition: mpdtscript.cc:39
void Equivalent(FstEquivalentArgs *args)
Definition: equivalent.h:36
std::tuple< const FstClass &, MutableFstClass *, EpsNormalizeType > FstEpsNormalizeArgs
Definition: epsnormalize.h:30
void Concat(FstConcatArgs1 *args)
Definition: concat.h:32
void Push(FstPushArgs1 *args)
Definition: push.h:33
std::tuple< MutableFstClass *, ReweightType, float, bool > FstPushArgs1
Definition: push.h:30
void Convert(FarReaderClass &reader, FarWriterClass &writer, std::string_view fst_type)
Definition: farscript.cc:64
void InitMutableArcIteratorClass(InitMutableArcIteratorClassArgs *args)