There is a hacky way to do it: https://stackoverflow.com/a/54067480/3310334
But is there a more modern solution considering over two years have passed?
import openfst_python as fst
input_sym = fst.SymbolTable()
output_sym = fst.SymbolTable()
input_sym.add_symbol('<eps>')
input_sym.add_symbol('a')
input_sym.add_symbol('b')
output_sym.add_symbol('<eps>')
output_sym.add_symbol('A')
output_sym.add_symbol('B')
f = Fst()
f.set_input_symbols(input_sym)
f.set_output_symbols(output_sym)
s0 = f.add_state()
s1 = f.add_state()
s2 = f.add_state()
s3 = f.add_state()
a = input_sym.find('a')
b = input_sym.find('b')
A = input_sym.find('A')
B = input_sym.find('B')
f.add_arc(s0, fst.Arc(a, A, None, s1))
f.add_arc(s0, fst.Arc(b, B, None, s2))
f.add_arc(s1, fst.Arc(a, A, None, s3))
f.add_arc(s2, fst.Arc(b, B, None, s3))
f.set_start(s0)
f.set_final(s3)
Takes 'ab' or 'ba' and produces 'AB' or 'BA'.
How can I test if certain strings or sequences constitute valid inputs?
How can I run inputs through the transducer?