FST  openfst-1.8.3
OpenFst Library
fstscript.h
Go to the documentation of this file.
1 // Copyright 2005-2024 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
36 // Operations.
37 #include <fst/script/arcsort.h>
38 #include <fst/script/closure.h>
39 #include <fst/script/compile.h>
40 #include <fst/script/compose.h>
41 #include <fst/script/concat.h>
42 #include <fst/script/connect.h>
43 #include <fst/script/convert.h>
44 #include <fst/script/decode.h>
45 #include <fst/script/determinize.h>
46 #include <fst/script/difference.h>
48 #include <fst/script/draw.h>
49 #include <fst/script/encode.h>
52 #include <fst/script/equal.h>
53 #include <fst/script/equivalent.h>
54 #include <fst/script/fst-class.h>
55 // Flag-to-enum parsers.
56 #include <fst/script/getters.h>
57 #include <fst/script/info.h>
58 #include <fst/script/intersect.h>
59 #include <fst/script/invert.h>
60 #include <fst/script/isomorphic.h>
61 #include <fst/script/map.h>
62 #include <fst/script/minimize.h>
63 #include <fst/script/print.h>
64 #include <fst/script/project.h>
65 #include <fst/script/prune.h>
66 #include <fst/script/push.h>
68 #include <fst/script/randgen.h>
69 #include <fst/script/relabel.h>
70 #include <fst/script/replace.h>
71 #include <fst/script/reverse.h>
72 #include <fst/script/reweight.h>
73 #include <fst/script/rmepsilon.h>
74 // Templates like Operation<> and Apply<>.
75 #include <fst/script/script-impl.h>
79 #include <fst/script/synchronize.h>
80 #include <fst/script/text-io.h>
81 #include <fst/script/topsort.h>
82 #include <fst/script/union.h>
83 #include <fst/script/verify.h>
85 
86 // This class is necessary because registering each of the operations
87 // separately overfills the stack, as there's so many of them.
88 namespace fst {
89 namespace script {
90 
91 template <class Arc>
93  public:
95  RegisterBatch1();
96  RegisterBatch2();
97  }
98 
99  private:
100  void RegisterBatch1() {
128  }
129 
130  void RegisterBatch2() {
156  }
157 };
158 
159 } // namespace script
160 } // namespace fst
161 
162 #define REGISTER_FST_OPERATIONS(Arc) \
163  AllFstOperationsRegisterer<Arc> register_all_fst_operations##Arc;
164 
165 #endif // FST_SCRIPT_FSTSCRIPT_H_
std::tuple< const FstClass &, MutableFstClass *, const DeterminizeOptions & > FstDeterminizeArgs
Definition: determinize.h:55
std::tuple< MutableFstClass *, EncodeMapperClass * > FstEncodeArgs
Definition: encode.h:32
bool Equal(FarReaderClass &reader1, FarReaderClass &reader2, float delta, std::string_view begin_key, std::string_view end_key)
Definition: farscript.cc:112
void Determinize(FstDeterminizeArgs *args)
Definition: determinize.h:58
bool Isomorphic(FarReaderClass &reader1, FarReaderClass &reader2, float delta, std::string_view begin_key, std::string_view end_key)
Definition: farscript.cc:154
void Union(FstUnionArgs1 *args)
Definition: union.h:36
std::tuple< const FstClass &, MutableFstClass *, bool > FstReverseArgs
Definition: reverse.h:31
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:72
void Verify(FstVerifyArgs *args)
Definition: verify.h:32
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:75
std::pair< MutableFstClass *, const FstClass & > FstUnionArgs1
Definition: union.h:33
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:56
void Synchronize(FstSynchronizeArgs *args)
Definition: synchronize.h:34
void Project(FstProjectArgs *args)
Definition: project.h:33
void Map(FstMapArgs *args)
Definition: map.h:80
std::tuple< const FstClass &, int64_t, ArcIteratorClass * > InitArcIteratorClassArgs
std::pair< const FstClass &, StateIteratorClass * > InitStateIteratorClassArgs
std::pair< MutableFstClass *, const EncodeMapperClass & > FstDecodeArgs
Definition: decode.h:32
void Relabel(FstRelabelArgs1 *args)
Definition: relabel.h:42
void TopSort(FstTopSortArgs *args)
Definition: topsort.h:31
void Difference(FstDifferenceArgs *args)
Definition: difference.h:37
std::pair< MutableFstClass *, ArcSortType > FstArcSortArgs
Definition: arcsort.h:33
void Closure(FstClosureArgs *args)
Definition: closure.h:34
void ShortestPath(const FstClass &ifst, const std::vector< std::pair< int64_t, int64_t >> &parens, MutableFstClass *ofst, const PdtShortestPathOptions &opts)
Definition: pdtscript.cc:109
std::tuple< const std::vector< std::pair< int64_t, const FstClass * >> &, MutableFstClass *, const ReplaceOptions & > FstReplaceArgs
Definition: replace.h:56
void Decode(FarReaderClass &reader, FarWriterClass &writer, const EncodeMapperClass &encoder)
Definition: farscript.cc:88
void Reweight(FstReweightArgs *args)
Definition: reweight.h:38
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:145
std::tuple< const FstClass &, const FstClass &, MutableFstClass *, const ComposeOptions & > FstIntersectArgs
Definition: intersect.h:34
std::tuple< const FstClass &, MutableFstClass *, uint8_t, ReweightType, float > FstPushArgs2
Definition: push.h:43
void Draw(FstDrawArgs *args)
Definition: draw.h:57
std::tuple< MutableFstClass *, MutableFstClass *, float, bool > FstMinimizeArgs
Definition: minimize.h:32
std::tuple< MutableFstClass *, const SymbolTable *, const SymbolTable *, const std::string &, bool, const SymbolTable *, const SymbolTable *, const std::string &, bool > FstRelabelArgs1
Definition: relabel.h:39
std::tuple< const FstClass &, MutableFstClass *, const DisambiguateOptions & > FstDisambiguateArgs
Definition: disambiguate.h:50
std::pair< const FstClass &, MutableFstClass * > FstSynchronizeArgs
Definition: synchronize.h:31
void ArcSort(FstArcSortArgs *args)
Definition: arcsort.h:36
void Invert(MutableFstClass *fst)
Definition: invert.h:28
std::pair< MutableFstClass *, const FstClass & > FstConcatArgs1
Definition: concat.h:32
std::tuple< MutableFstClass *, int64_t, MutableArcIteratorClass * > InitMutableArcIteratorClassArgs
std::tuple< const FstClass &, MutableFstClass *, const WeightClass &, int64_t, float > FstPruneArgs1
Definition: prune.h:39
void Disambiguate(FstDisambiguateArgs *args)
Definition: disambiguate.h:53
void Encode(FarReaderClass &reader, FarWriterClass &writer, EncodeMapperClass *encoder)
Definition: farscript.cc:100
std::tuple< const FstClass &, const FstClass &, MutableFstClass *, const ComposeOptions & > FstDifferenceArgs
Definition: difference.h:34
REGISTER_FST_OPERATION(OpenFarReaderClass, StdArc, OpenFarReaderClassArgs)
std::pair< const std::vector< FstClass * > &, MutableFstClass * > FstConcatArgs3
Definition: concat.h:51
std::pair< MutableFstClass *, const ClosureType > FstClosureArgs
Definition: closure.h:31
void Intersect(FstIntersectArgs *args)
Definition: intersect.h:37
void ShortestDistance(FstShortestDistanceArgs1 *args)
void EpsNormalize(FstEpsNormalizeArgs *args)
Definition: epsnormalize.h:35
std::pair< const FstClass &, MutableFstClass * > FstConcatArgs2
Definition: concat.h:41
void RandGen(FstRandGenArgs *args)
Definition: randgen.h:39
std::tuple< const FstClass &, std::vector< WeightClass > *, const ShortestDistanceOptions & > FstShortestDistanceArgs1
void Minimize(FstMinimizeArgs *args)
Definition: minimize.h:35
std::tuple< MutableFstClass *, const std::vector< const FstClass * > & > FstUnionArgs2
Definition: union.h:43
std::pair< MutableFstClass *, const RmEpsilonOptions & > FstRmEpsilonArgs
Definition: rmepsilon.h:124
void CompileInternal(FstCompileArgs *args)
Definition: compile.h:64
std::tuple< const FstClass &, MutableFstClass *, const RandGenOptions< RandArcSelection > &, uint64_t > FstRandGenArgs
Definition: randgen.h:36
std::tuple< const FstClass &, const FstClass &, MutableFstClass *, const ComposeOptions & > FstComposeArgs
Definition: compose.h:32
void Print(FstPrintArgs *args)
Definition: print.h:53
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:52
void InitStateIteratorClass(InitStateIteratorClassArgs *args)
void RmEpsilon(FstRmEpsilonArgs *args)
Definition: rmepsilon.h:127
void InitArcIteratorClass(InitArcIteratorClassArgs *args)
std::pair< MutableFstClass *, ProjectType > FstProjectArgs
Definition: project.h:30
std::tuple< MutableFstClass *, const std::vector< WeightClass > &, ReweightType > FstReweightArgs
Definition: reweight.h:35
std::tuple< const FstClass &, bool, ArcFilterType, const std::string &, bool > FstInfoArgs
Definition: info.h:34
void Connect(MutableFstClass *fst)
Definition: connect.h:28
std::tuple< const FstClass &, MutableFstClass *, const ShortestPathOptions & > FstShortestPathArgs
void Prune(FstPruneArgs1 *args)
Definition: prune.h:42
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:41
void Equivalent(FstEquivalentArgs *args)
Definition: equivalent.h:38
std::tuple< const FstClass &, MutableFstClass *, EpsNormalizeType > FstEpsNormalizeArgs
Definition: epsnormalize.h:32
void Concat(FstConcatArgs1 *args)
Definition: concat.h:35
void Push(FstPushArgs1 *args)
Definition: push.h:37
std::tuple< MutableFstClass *, ReweightType, float, bool > FstPushArgs1
Definition: push.h:34
void Convert(FarReaderClass &reader, FarWriterClass &writer, std::string_view fst_type)
Definition: farscript.cc:71
void InitMutableArcIteratorClass(InitMutableArcIteratorClassArgs *args)