deeptrack.backend.core Module#
Core data structures for DeepTrack2.
This module defines the data structures used throughout DeepTrack2 to construct, manage, and evaluate computational graphs with flexible data storage and dependency management.
Key Features#
Hierarchical Data Management
Provides validated, hierarchical data containers (DeepTrackDataObject and DeepTrackDataDict) to store data and manage complex, nested data structures. Supports dependency tracking and flexible indexing.
Computation Graphs with Lazy Evaluation
Implements the DeepTrackNode class, the core abstraction for nodes in a computational graph. Supports lazy evaluation, caching, dependency tracking, and operator overloading for intuitive composition of complex computational pipelines.
Citation Support
Provides citation metadata to ensure proper academic attribution for work built on DeepTrack2.
Module Structure#
Classes:
DeepTrackDataObject: Basic container for data with validation status.
Simple data container that stores data and tracks its validity (valid/invalid).
DeepTrackDataDict: Hierarchical dictionary for multiple data objects.
Stores multiple DeepTrackDataObject instances indexed by tuples of integers, enabling the creation of flexible, nested data hierarchies.
DeepTrackNode: Node in a computation graph with operator overloading.
Represents a node in a computation graph, capable of storing and computing values based on dependencies, with support for lazy evaluation, dependency tracking, and operator overloading.
Functions:
_equivalent(a, b) -> bool
Determines whether two objects should be considered equivalent, according to DeepTrack2’s internal rules (identity, empty lists, etc).
_create_node_with_operator(op, a, b) -> DeepTrackNode
Internal helper function to create a new computation node by applying a specified operator to two operands, establishing correct graph relationships and supporting operator overloading.
Attributes:
CITATION_MIDTVEDT2021QUANTITATIVE: str
BibTeX citation for the original DeepTrack2 publication.
Examples#
>>> import deeptrack as dt
Create a simple computational pipeline using DeepTrack2 nodes:
>>> parent = dt.DeepTrackNode()
>>> child = dt.DeepTrackNode(lambda: 2 * parent())
>>> parent.add_child(child)
>>> parent.store(5)
>>> child() # Compute child
10
Operator overloading for computation nodes:
>>> a = dt.DeepTrackNode(lambda: 3)
>>> b = dt.DeepTrackNode(lambda: 4)
>>> sum_node = a + b
>>> sum_node()
7
Create and use a hierarchical data dictionary:
>>> data_dict = dt.DeepTrackDataDict()
>>> data_dict.create_index((0, 1))
>>> data_dict[(0, 1)].store("Example data")
>>> data_dict[(0, 1)].current_value()
'Example data'
Validate and invalidate a data object:
>>> data_obj = dt.DeepTrackDataObject()
>>> data_obj.is_valid()
False
>>> data_obj.store(42)
>>> data_obj.is_valid()
True
>>> data_obj.invalidate()
>>> data_obj.is_valid()
False
Classes#
Store multiple data objects indexed by tuples of integers (_ID). |
|
Basic data container for DeepTrack2. |
|
|
Node in a DeepTrack2 computation graph, supporting operator overloading. |