# cadCAD Release Plan
## Types of model data input-output:
- Single Input, Single Ouput (SISO)
- Single Input, Multiple Output (SIMO)
- Multiple Input, Single Oupit (MISO)
- Multiple Input, Multiple Output (MIMO)
## Milestones:
- early preview SISO
- Canonical GDS
- PyCon
## Features Breakdown for each Release
### SISO
- ready for external feedback
- series composition
Release Notes
first alpha
can do SISO blocks
- only be concatenated in series
example:
```python
@block
def isValidParticle(domain:Point[Particle])-> Point[Bit]:
dx= domain['vel']['x']
dy= domain['vel']['y']
vmax = domain['maxspeed']
output = {'bit':bool(dx**2+dy**2<=vmax**2)}
return Point(Bit, output)
```
In order to make a cadCAD Model:
1. Define the state space
2. Define the state transition blocks containing logic for the state transitions
3. Define the experiment object:
- intial state that is a point in the defined state space from step 1
- a key-value pair python dictonary with experiment parameters:
- a string key called "steps", set by an integer for the number of steps for each run
- "iteration_n", set by an integer for the number of sequential simulations on the same experiment
- A tuple of blocks which defines a serial pipeline of state transition blocks (from step 2)
8. You can run the experiment by executing the .run method on the experiment object
9. The result is a result matrix, where each line is a trajectory corresponding to a simulation you have defined
### Canonical GDS
- Decorator based MISO
- Hybrid composition
- compose blocks, assert same domain, and pass same point (SIMO)
- x -> g(x)=U
### PyCon Release (April) - BETA
- Domain Specific Langauge
- small formal language to encode syntax and semantics for pipeline of blocks
- encodes what is needed for serial and parallel composition of any kind of block (SISO, SIMO, MISO, MIMO)
- modular syntax, grammar (each bit has meaning as individual strings)
- reduces uncertainty by lowering to a series of block calls in compilation
- rules of block pipeline
- point validity on space of the dynamics
- engine langauge agnostic (python, rust, julia)
- enables higher level functionality and features
- enables visual cadCAD
- UX sugar stack
- eg, tooling that can write the DSL for users like visual cadCAD with block diagrams writiing the blocks
- parallel composition
- check with Zargham: of mutliple SISOs?
- yields MIMO
- Parameter blocks
- building blocks
- compiler work
- experiment tools