This operation projects an FST onto its domain or range by either copying each arc's input label to its output label or vice versa.
enum ProjectType { PROJECT_INPUT, PROJECT_OUTPUT };template<class Arc>
void Project(MutableFst<Arc> *fst, ProjectType type);template <class Arc> ProjectFst<Arc>::
ProjectFst(const Fst<Arc> &fst, ProjectType type);fstproject [--opts] a.fst out.fst
--project_output: Project on output (def false)Project(&A, PROJECT_INPUT);
ProjectFst<Arc>(A, PROJECT_INPUT);
fstproject a.fst out.fstProject(&A, PROJECT_OUTPUT);
ProjectFst<Arc>(A, PROJECT_OUTPUT);
fstproject --project_output=true a.fst out.fstProject:
- TIme:
$O(V + E)$ - Space:
$O(1)$
where
ProjectFst:
- Time:
$O(v + e)$ - Space:
$O(1)$
where


