ducks package



ducks.btree module

class ducks.btree.BTree(d: Dict[Any, Any] | None = None)

Bases: object

Wraps an OOBTree instance. Tweaks it a bit:
  • BTrees len() does a full tree traversal, which is very slow. So we maintain a count instead.

  • BTrees stores None values as if they were just really really small. So “x < 1” will find the Nones. Here instead we disallow None entirely, make it throw TypeError.

  • Provide a nice interface for using >, >=, <, <= to get value ranges.

__init__(d: Dict[Any, Any] | None = None)
get(key, default=None)
get_range(min_key=None, max_key=None, include_min: bool = True, include_max: bool = True) List

Get values in the range of [min_key, max_key]. include_min and include_max determine whether values for the start and end keys will be included.


Get all values: None, None, True, True Get 1 < key < 10: 1, 10, False, False Get key >= 3: 3, None, True, True

get_range_expr(expr: Dict[str, Any]) List

Get values matching a range expression like {‘>’: 3, ‘<=’: 5}

ducks.btree.range_expr_to_args(expr: Dict[str, Any]) Tuple[Any, Any, bool, bool]

Turn a range expr into (min_key, max_key, include_min, include_max), which are easier to use with BTrees. e.g., translates {‘<’: 3} into get_values(3, None, True, False). Will ignore keys in expr other than ‘<’, ‘<=’, ‘>’, ‘>=’.

ducks.constants module

class ducks.constants.MatchAnything

Bases: set

ducks.exceptions module

exception ducks.exceptions.AttributeNotFoundError

Bases: Exception

Raised when querying an attribute we don’t have

exception ducks.exceptions.FrozenError

Bases: Exception

Raised when attempting to modify a FrozenDex

exception ducks.exceptions.MissingAttribute

Bases: Exception

Raise this in your attribute functions to denote that the object is missing this attribute. Finds that match the attribute will never return this object. Finds that exclude the attribute will.

ducks.pickling module

ducks.pickling.load(filepath: str) Dex | FrozenDex | ConcurrentDex

Load a Dex, FrozenDex, or ConcurrentDex from a pickle file. Dex | FrozenDex | ConcurrentDex, filepath: str)

Save a Dex, FrozenDex, or ConcurrentDex to a file.

ducks.utils module

ducks.utils.cyk_intersect(s1: Int64Set, s2: Int64Set) Int64Set

Cykhash intersections are faster on small.intersect(big); handle that appropriately.

ducks.utils.cyk_union(s1: Int64Set, s2: Int64Set) Int64Set

Cykhash unions are faster on big.union(small); handle that appropriately.

ducks.utils.get_attribute(obj: Any, attr: Callable | str) Tuple[Any, bool]

Get the object’s attribute value. Return (value, success). Unsuccessful if attribute is missing.

ducks.utils.get_attributes(cls) List[str]

Helper function to grab the attributes of a class

ducks.utils.make_empty_array(dtype: str)

Shorthand for making a length-0 numpy array.

ducks.utils.split_query(query: Dict) Tuple[Dict, Dict]

Split query into match and exclude terms

ducks.utils.standardize_expr(expr: Any) Dict

Turn a find() expr into a dict of {operator: value}.

ducks.utils.validate_and_standardize_operators(expr: Dict) Dict
ducks.utils.validate_query(indexes: Dict, match: Dict[str | Callable, Any] | None = None, exclude: Dict[str | Callable, Any] | None = None)

Module contents