# Path: fastavro/io/symbols.py
# class _NoDefault:
# class Symbol:
# class Root(Symbol):
# class Terminal(Symbol):
# class Sequence(Symbol):
# class Repeater(Symbol):
# class Alternative(Symbol):
# class Action(Symbol):
# class EnumLabels(Action):
# class UnionEnd(Action):
# class RecordStart(Action):
# class RecordEnd(Action):
# class FieldStart(Action):
# class FieldEnd(Action):
# NO_DEFAULT = _NoDefault()
#     def __init__(self, production=None, default=NO_DEFAULT):
#     def get_default(self):
#     def __eq__(self, other):
#     def __ne__(self, other):
#     def __init__(self, *symbols, default=NO_DEFAULT):
#     def __init__(self, end, *symbols, default=NO_DEFAULT):
#     def __init__(self, symbols, labels, default=NO_DEFAULT):
#     def get_symbol(self, index):
#     def get_label(self, index):
#     def __init__(self, labels):
#     def __init__(self, field_name):
# 
# Path: fastavro/schema.py
# FINGERPRINT_ALGORITHMS = _schema.FINGERPRINT_ALGORITHMS


from .symbols import (
    Root,
    Terminal,
    Boolean,
    Sequence,
    Repeater,
    Action,
    RecordStart,
    RecordEnd,
    FieldStart,
    FieldEnd,
    Int,
    Null,
    String,
    Alternative,
    Union,
    Long,
    Float,
    Double,
    Bytes,
    MapEnd,
    MapStart,
    MapKeyMarker,
    Enum,
    EnumLabels,
    Fixed,
    ArrayStart,
    ArrayEnd,
    ItemEnd,
    NO_DEFAULT,
)
from ..schema import extract_record_type
            return Fixed(default=default)
        elif record_type in self.named_schemas:
            return self._parse(self.named_schemas[record_type])
        else:
            raise Exception(f"Unhandled type: {record_type}")

    def advance(self, symbol):
        while True:
            top = self.stack.pop()

            if top == symbol:
                return top
            elif isinstance(top, Action):
                self.action_function(top)
            elif isinstance(top, Terminal):
                raise Exception(f"Internal Parser Exception: {top}")
            elif isinstance(top, Repeater) and top.end == symbol:
                return symbol
            else:
                self.stack.extend(top.production)

    def drain_actions(self):
        while True:
            top = self.stack.pop()

            if isinstance(top, Root):
                self.push_symbol(top)
                break
            elif isinstance(top, Action):
                self.action_function(top)

# Path: fastavro/io/symbols.py
# class _NoDefault:
# class Symbol:
# class Root(Symbol):
# class Terminal(Symbol):
# class Sequence(Symbol):
# class Repeater(Symbol):
# class Alternative(Symbol):
# class Action(Symbol):
# class EnumLabels(Action):
# class UnionEnd(Action):
# class RecordStart(Action):
# class RecordEnd(Action):
# class FieldStart(Action):
# class FieldEnd(Action):
# NO_DEFAULT = _NoDefault()
#     def __init__(self, production=None, default=NO_DEFAULT):
#     def get_default(self):
#     def __eq__(self, other):
#     def __ne__(self, other):
#     def __init__(self, *symbols, default=NO_DEFAULT):
#     def __init__(self, end, *symbols, default=NO_DEFAULT):
#     def __init__(self, symbols, labels, default=NO_DEFAULT):
#     def get_symbol(self, index):
#     def get_label(self, index):
#     def __init__(self, labels):
#     def __init__(self, field_name):
# 
# Path: fastavro/schema.py
# FINGERPRINT_ALGORITHMS = _schema.FINGERPRINT_ALGORITHMS


# Path: fastavro/io/parser.py
from .symbols import (
    Root,
    Terminal,
    Boolean,
    Sequence,
    Repeater,
    Action,
    RecordStart,
    RecordEnd,
    FieldStart,
    FieldEnd,
    Int,
    Null,
    String,
    Alternative,
    Union,
    Long,
    Float,
    Double,
    Bytes,
    MapEnd,
    MapStart,
    MapKeyMarker,
    Enum,
    EnumLabels,
    Fixed,
    ArrayStart,
    ArrayEnd,
    ItemEnd,
    NO_DEFAULT,
)
from ..schema import extract_record_type

            return Fixed(default=default)
        elif record_type in self.named_schemas:
            return self._parse(self.named_schemas[record_type])
        else:
            raise Exception(f"Unhandled type: {record_type}")

    def advance(self, symbol):
        while True:
            top = self.stack.pop()

            if top == symbol:
                return top
            elif isinstance(top, Action):
                self.action_function(top)
            elif isinstance(top, Terminal):
                raise Exception(f"Internal Parser Exception: {top}")
            elif isinstance(top, Repeater) and top.end == symbol:
                return symbol
            else:
                self.stack.extend(top.production)

    def drain_actions(self):
        while True:
            top = self.stack.pop()

            if isinstance(top, Root):
                self.push_symbol(top)
                break
            elif isinstance(top, Action):
                self.action_function(top)

            elif not isinstance(top, Terminal):