def Sequence()

in multiset_codec/codecs.py [0:0]


def Sequence(symbol_codec: Codec) -> Codec:
    '''
    Encodes a sequence by sequentially encoding symbols with symbol_codec.
    '''
    def encode(ans_state, sequence, *context):
        for symbol in sequence:
            ans_state, *context = \
                    symbol_codec.encode(ans_state, symbol, *context)
        return (ans_state, *context)

    def decode(ans_state, seq_length, *context):
        sequence = seq_length*[None]
        for i in reversed(range(seq_length)):
            ans_state, sequence[i], *context = \
                    symbol_codec.decode(ans_state, *context)
        return (ans_state, sequence, *context)

    return Codec(encode, decode)