abs-tudelft / abs-tudelft/tydi

Flattening when both streams have user and/or keep properties

Open
#221 1 comment 0 reactions 0 assignees View on GitHub
🐬 specification
Dominant language
Rust
Stars
15
Forks
5
PR merge metrics
No merged PRs in 30d

Description

## Background

When a Stream contains another Stream as its `data`, the [Split function](https://abs-tudelft.github.io/tydi/specification/logical.html#split-function) assigns both the parent and child streams "∅" (empty name), and employs "flattening" to combine their `throughput`, `synchronicity`, `dimensionality` and `direction`.

When a Stream has no element-manipulating data (`data` is either Null or a Stream) and no `user` property, it is discarded from the result. In effect, this creates a new physical stream with the original child Stream's `data`, combined with of the parent Stream's properties.

## Issue

When `keep` (x) is true and/or `user` (T_u) is non-Null, the parent Stream must be retained.

If a parent Stream has `keep`=true and/or a non-Null `user` property, both Streams are still assigned "∅", but the parent Stream will conflict with the child Stream. Implementing the result of the Split function as a map in code, this means that either the child Stream simply replaces the parent Stream altogether (thereby losing the parent Stream's `user` property), or the Split function fails.

However, this behavior is not described in the specification, it only specifies that the names resulting from the Split function "**are** case-insensitively **unique**, emptyable strings consisting of letters, numbers, and/or underscores, not starting or ending in an underscore, and not starting with a digit" (emphasis mine).

## Assumed/Suggested Fix

Right now, on an implementation level: The Split function should fail when it encounters a situation where two physical Streams have identical names.

On a specification level: It should be illegal for nested Streams (Streams which only have another Stream type as their `data`) to have a `keep` and/or `user` property on more than one of these Streams, and "flattening" should incorporate the singular `user` property into the resulting physical stream.

Alternatively, Streams should have a non-empty `name` property, as this will avoid conflicts in the result of the Split function.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.