Mojo · Errors

Errors

from usearch import Status, Error 3.0.0-rc.1 · 4c3e5023

Every fallible entry point raises Error and nothing else, since Mojo allows one error type per function. An Error carries a Status shared with the C interface, so a fault this binding catches before the boundary reports the status the engine would have reported for the same fault:

try:
    index.insert(keys, vectors)
except error:
    if error.status == Status.SHAPE_MISMATCH:
        pass  # the keys and the rows disagree
    print(error)  # USearch: shape-mismatch [usearch_dense_insert]

An Error keeps the engine mapped while it lives, since its name and message are the engine’s own static text. library.status_name and status_from_name spell and parse a Status through the engine’s own name table, as their twins do for scalars, residencies, traversals, moods and dense metrics:

print(library.status_name(Status.READ_ONLY), library.scalar_name(ScalarKind.BF16))  # read-only bf16

API

StructStatusWhy a call into the engine failed - the usearch_status_t vocabulary, verbatim.1
struct Status

An Error never carries SUCCESS or DEFERRED: only a Deferred reports the latter, and only until its call is final. Library.status_name spells each one as the engine does.

Fields

codeInt32The raw usearch_status_t value, kept even when this build does not name it.

Values

SUCCESSStatus(Int32(0))The call completed.
DEFERREDStatus(Int32(1))The call was submitted deferred and is not final yet; the one non-final status.
OUT_OF_MEMORYStatus(Int32(2))An allocation or reservation could not be satisfied.
SHAPE_MISMATCHStatus(Int32(3))Dimensionality or row counts disagree.
UNSUPPORTED_LAYOUTStatus(Int32(4))A stride or packing the engine cannot traverse.
UNKNOWN_KINDStatus(Int32(5))A scalar, metric, or residency tag this build does not know.
READ_ONLYStatus(Int32(6))A mutating verb on a handle that serves its checkpoint in place.
IOStatus(Int32(7))A file could not be opened, read, written, or parsed.
DEVICEStatus(Int32(8))A device could not be selected, or its memory could not be claimed.
MALFORMEDStatus(Int32(9))A caller-supplied representation could not be decoded.
INTERNALStatus(Int32(10))The engine reported neither success nor a failure, which names a defect rather than a state.
OVERFLOWStatus(Int32(11))A hard design ceiling was reached, so a smaller request cannot help.
UNINITIALIZEDStatus(Int32(12))The verb needs a prior successful reservation that never happened.
CONFIG_MISMATCHStatus(Int32(13))The request contradicts an already-frozen configuration.
CONTENDEDStatus(Int32(14))The call was refused rather than waited for, like a submission to a full deferred table.
CANCELLEDStatus(Int32(15))A progress handler stopped the operation; it published nothing.
UNSUPPORTEDStatus(Int32(16))The verb is declared for every residency but this one does not implement it.
INVALID_ARGUMENTStatus(Int32(17))An argument breaks the verb's contract, like a required output left null.
LIBRARY_MISSINGStatus(Int32(-1))Nothing to dlopen - the binding's own.
SYMBOL_MISSINGStatus(Int32(-2))The library loaded but does not export a symbol the binding needs - the binding's own.
VERSION_MISMATCHStatus(Int32(-3))The library loaded but reports a different major version than the binding's - the binding's own.

Conforms to

Copyable, Deinitable, Equatable, ImplicitlyCopyable, Movable, RegisterPassable, TrivialRegisterPassable
ofLifts a raw usearch_status_t, keeping an unnamed one rather than guessing.
def of(code: Int32) -> Self

Parameters

codeInt32Whatever the C call reported, named by this build or not.

Returns

The matching status, or one carrying the unrecognized code verbatim.
StructErrorWhat went wrong inside the engine, and which entry point it was about.2
struct Error

Fields

statusStatusWhich class of failure the engine reported.
detailStaticStringThe entry point it was about, for a reader rather than for a branch.
messageAddressThe engine's own static message, or NULL_ADDRESS when it carried none.
nameAddressThe engine's spelling of status from usearch_status_name, or NULL_ADDRESS where no engine named it.
libraryOptional[Library]The engine message and name live in, kept mapped for as long as the error is; Mojo would otherwise unload it at the last handle's last use, while the error is still being read.

Conforms to

Copyable, Deinitable, ImplicitlyCopyable, Movable, Writable
__init__A failure the binding caught before any engine could name it.
def __init__(out self, status: Status, detail: StringSpan[ImmStaticOrigin])

Parameters

statusStatusWhich class of failure it is.
detailStringSpan[ImmStaticOrigin]The entry point or binding type it was about.
write_toWrites the status name, the entry point, and the engine's own message together.
def write_to(self, mut writer: T)

Parameters

writerTmutThe sink the message is appended to.