# This file was automatically generated by SWIG (https://www.swig.org).
# Version 4.2.1
#
# Do not make changes to this file unless you know what you are doing - modify
# the SWIG interface file instead.

from sys import version_info as _swig_python_version_info

# Import the low-level C/C++ module
if __package__ or "." in __name__:
    from . import _marisa
else:
    import _marisa

try:
    import builtins as __builtin__
except ImportError:
    import __builtin__


def _swig_repr(self):
    try:
        strthis = "proxy of " + self.this.__repr__()
    except __builtin__.Exception:
        strthis = ""
    return "<%s.%s; %s >" % (
        self.__class__.__module__,
        self.__class__.__name__,
        strthis,
    )


def _swig_setattr_nondynamic_instance_variable(set):
    def set_instance_attr(self, name, value):
        if name == "this":
            set(self, name, value)
        elif name == "thisown":
            self.this.own(value)
        elif hasattr(self, name) and isinstance(getattr(type(self), name), property):
            set(self, name, value)
        else:
            raise AttributeError("You cannot add instance attributes to %s" % self)

    return set_instance_attr


def _swig_setattr_nondynamic_class_variable(set):
    def set_class_attr(cls, name, value):
        if hasattr(cls, name) and not isinstance(getattr(cls, name), property):
            set(cls, name, value)
        else:
            raise AttributeError("You cannot add class attributes to %s" % cls)

    return set_class_attr


def _swig_add_metaclass(metaclass):
    """Class decorator for adding a metaclass to a SWIG wrapped class - a slimmed down version of six.add_metaclass"""

    def wrapper(cls):
        return metaclass(cls.__name__, cls.__bases__, cls.__dict__.copy())

    return wrapper


class _SwigNonDynamicMeta(type):
    """Meta class to enforce nondynamic attributes (no new attributes) for a class"""

    __setattr__ = _swig_setattr_nondynamic_class_variable(type.__setattr__)


OK = _marisa.OK
STATE_ERROR = _marisa.STATE_ERROR
NULL_ERROR = _marisa.NULL_ERROR
BOUND_ERROR = _marisa.BOUND_ERROR
RANGE_ERROR = _marisa.RANGE_ERROR
CODE_ERROR = _marisa.CODE_ERROR
RESET_ERROR = _marisa.RESET_ERROR
SIZE_ERROR = _marisa.SIZE_ERROR
MEMORY_ERROR = _marisa.MEMORY_ERROR
IO_ERROR = _marisa.IO_ERROR
FORMAT_ERROR = _marisa.FORMAT_ERROR
MIN_NUM_TRIES = _marisa.MIN_NUM_TRIES
MAX_NUM_TRIES = _marisa.MAX_NUM_TRIES
DEFAULT_NUM_TRIES = _marisa.DEFAULT_NUM_TRIES
HUGE_CACHE = _marisa.HUGE_CACHE
LARGE_CACHE = _marisa.LARGE_CACHE
NORMAL_CACHE = _marisa.NORMAL_CACHE
SMALL_CACHE = _marisa.SMALL_CACHE
TINY_CACHE = _marisa.TINY_CACHE
DEFAULT_CACHE = _marisa.DEFAULT_CACHE
TEXT_TAIL = _marisa.TEXT_TAIL
BINARY_TAIL = _marisa.BINARY_TAIL
DEFAULT_TAIL = _marisa.DEFAULT_TAIL
LABEL_ORDER = _marisa.LABEL_ORDER
WEIGHT_ORDER = _marisa.WEIGHT_ORDER
DEFAULT_ORDER = _marisa.DEFAULT_ORDER


class Key(object):
    thisown = property(
        lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag"
    )

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")

    __repr__ = _swig_repr

    def str(self):
        return _marisa.Key_str(self)

    def id(self):
        return _marisa.Key_id(self)

    def weight(self):
        return _marisa.Key_weight(self)

    __swig_destroy__ = _marisa.delete_Key


# Register Key in _marisa:
_marisa.Key_swigregister(Key)


class Query(object):
    thisown = property(
        lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag"
    )

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")

    __repr__ = _swig_repr

    def str(self):
        return _marisa.Query_str(self)

    def id(self):
        return _marisa.Query_id(self)

    __swig_destroy__ = _marisa.delete_Query


# Register Query in _marisa:
_marisa.Query_swigregister(Query)


class Keyset(object):
    thisown = property(
        lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag"
    )
    __repr__ = _swig_repr

    def __init__(self):
        _marisa.Keyset_swiginit(self, _marisa.new_Keyset())

    __swig_destroy__ = _marisa.delete_Keyset

    def push_back(self, *args):
        return _marisa.Keyset_push_back(self, *args)

    def key(self, i):
        return _marisa.Keyset_key(self, i)

    def key_str(self, i):
        return _marisa.Keyset_key_str(self, i)

    def key_id(self, i):
        return _marisa.Keyset_key_id(self, i)

    def num_keys(self):
        return _marisa.Keyset_num_keys(self)

    def empty(self):
        return _marisa.Keyset_empty(self)

    def size(self):
        return _marisa.Keyset_size(self)

    def total_length(self):
        return _marisa.Keyset_total_length(self)

    def reset(self):
        return _marisa.Keyset_reset(self)

    def clear(self):
        return _marisa.Keyset_clear(self)


# Register Keyset in _marisa:
_marisa.Keyset_swigregister(Keyset)


class Agent(object):
    thisown = property(
        lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag"
    )
    __repr__ = _swig_repr

    def __init__(self):
        _marisa.Agent_swiginit(self, _marisa.new_Agent())

    __swig_destroy__ = _marisa.delete_Agent

    def set_query(self, *args):
        return _marisa.Agent_set_query(self, *args)

    def key(self):
        return _marisa.Agent_key(self)

    def query(self):
        return _marisa.Agent_query(self)

    def key_str(self):
        return _marisa.Agent_key_str(self)

    def key_id(self):
        return _marisa.Agent_key_id(self)

    def query_str(self):
        return _marisa.Agent_query_str(self)

    def query_id(self):
        return _marisa.Agent_query_id(self)


# Register Agent in _marisa:
_marisa.Agent_swigregister(Agent)


class Trie(object):
    thisown = property(
        lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag"
    )
    __repr__ = _swig_repr

    def __init__(self):
        _marisa.Trie_swiginit(self, _marisa.new_Trie())

    __swig_destroy__ = _marisa.delete_Trie

    def build(self, keyset, config_flags=0):
        return _marisa.Trie_build(self, keyset, config_flags)

    def mmap(self, filename):
        return _marisa.Trie_mmap(self, filename)

    def load(self, filename):
        return _marisa.Trie_load(self, filename)

    def save(self, filename):
        return _marisa.Trie_save(self, filename)

    def common_prefix_search(self, agent):
        return _marisa.Trie_common_prefix_search(self, agent)

    def predictive_search(self, agent):
        return _marisa.Trie_predictive_search(self, agent)

    def lookup(self, *args):
        return _marisa.Trie_lookup(self, *args)

    def reverse_lookup(self, *args):
        return _marisa.Trie_reverse_lookup(self, *args)

    def num_tries(self):
        return _marisa.Trie_num_tries(self)

    def num_keys(self):
        return _marisa.Trie_num_keys(self)

    def num_nodes(self):
        return _marisa.Trie_num_nodes(self)

    def tail_mode(self):
        return _marisa.Trie_tail_mode(self)

    def node_order(self):
        return _marisa.Trie_node_order(self)

    def empty(self):
        return _marisa.Trie_empty(self)

    def size(self):
        return _marisa.Trie_size(self)

    def total_size(self):
        return _marisa.Trie_total_size(self)

    def io_size(self):
        return _marisa.Trie_io_size(self)

    def clear(self):
        return _marisa.Trie_clear(self)


# Register Trie in _marisa:
_marisa.Trie_swigregister(Trie)
INVALID_KEY_ID = _marisa.INVALID_KEY_ID
