Metadata-Version: 2.4
Name: tsdag
Version: 0.0.2
Summary: Timeseries Streaming Directed Acyclic Graph
Author-email: "Talking Leaves NC, LLC" <info@talkingleaves.com>
Maintainer-email: Jade Vinson <jade@talkingleaves.com>, Jeff Lee <jeff@talkingleaves.com>
License-Expression: Apache-2.0
Project-URL: github, https://github.com/Talking-Leaves/tsdag
Project-URL: homepage, https://talkingleaves.com
Classifier: Development Status :: 1 - Planning
Classifier: Intended Audience :: Science/Research
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Topic :: Software Development
Classifier: Topic :: Scientific/Engineering
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Dynamic: license-file

# TSDAG - Timeseries Streaming Directed Acyclic Graph

## PURPOSE
 - SDAG (Streaming Directed Acyclic Graph) is the core of our infrastructure. It is the link from
   raw data inputs (sensor readings) to raw outputs (control decisions). It handles parsing,
   optimization, data caching, and everything in between.


## SDAG OVERVIEW

 - A Streaming Directed Acyclic Graph (SDAG) is a collection of nodes, each representing a
   timeseries of messages. Each node is either a raw input timeseries (eg timestamped messages
   received from external source), or is derived from one or more upstream nodes by explicit rules.

 - An SDAG Feedback node may also depend on a delayed copy of any SDAG node, even one that is
   "downstream", because time takes priority over position in the SDAG graph.  That is, if one were
   to fully "unroll" or "unfold" an SDAG across the time axis, it is actually a DAG. This is similar
   to a Recurrent Neural Network (RNN).

 - Data flows through the nodes via message passing.  Other than River and Schedule nodes, all
   nodes are passive. They can only produce an output message as an immediate response to receiving
   an input message, with the same timestamp.  Each node verifies that its input timestamps (and
   thus also its output timestamps) only move forward in time, completely ruling out lookahead bias
   as long as the raw input streams are themselves safe.

 - Some nodes explicitly track an internal state while others do not.  Their only contact with
   the outside world is by their inputs and outputs.  For example, they do not have access to
   a CPU clock. Instead their only perception of time is from the timestamps of their input
   messages.
