Giter Club home page Giter Club logo

cadcad-ri's People

Contributors

cavaunpeu avatar danlessa avatar drcatman avatar emanuellima1 avatar hfactor13 avatar matttyb80 avatar mzargham avatar tylerdmace avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cadcad-ri's Issues

cadCAD Seminar presentation AND write up

Presentation: given at blockscience seminar; should be about 45-60 min + discussions with team; this will help tie our GDS/cadCAD work in with our broader research arcs on protocols, ecosystems and the role of representations of systems are part of those systems.

Write-up: intended audience is a potential contributor, who needs to see something they can get excited about contributing to. we don't need to reach everyone, we want to reach people who are aware of the limitations of existing paradigms and are interested to contribute to a new one.

Content:

  • why cadCAD (GDS programming paradigm, systems engineering concepts around software and non-software systems integration, limits on controllability and observability, ecosystems of human and software agents interacting, and more)
  • what: data centric computing model; spaces, blocks, wiring rules; system "dynamics" versus system "state"; estimation and decision in heterogenous networks where we only "control" a peice of the puzzle, and need to "model" the other actors and environment, in order to design, maintain and govern our software.
  • how: more details on exactly what we are building (past stages: legacy verions, then: research/gds/experimental implementations for space-block focused cadCAD, current milestone is MIMO version of the reference implementation in python; next stage focus refining the user experience for declaring spaces, blocks, wirings, executing simulations; next next stage splits into inward and outward; outward is tooling for advanced workflows eg PSuU, and inward is performance improvements, primarily by unbinding from the python engine and using rust or julia under the hood (based on interpreting the python instructions)

[Impl] series composition

  • handles MIMO blocks
  • list of blocks
from cadcad.compose import series

myblock = series([block1, block2])

asserts

block1.codomain == block2.domain

expects

myblock.domain == block1.domain
myblock.codomain == block2.codomain

Typing, casting points docs

we need to set expectations around strong typing with an example of integers vs floats

  • Respond to #50
  • Supply documentation

[Epic] Experiment Tools

To be broken down into small stories

AC:

  • We have a set of experiment and simulation tools that increase users productivity.

more intuitive block attributes

domain and codomains of blocks are typed lists of space

domain and codomains methods of blocks return spaces not points

block signatures don't change

depends on #69

[Impl] Points class

AC:

  • We have points as a class that holds data
  • We have points as specializable class

[FEATURE] Support Multi-Input Blocks

I would like the following to be a valid block


@space
class CartesianPlane:
    x:float
    y:float

@space
class Particle:
    pos:CartesianPlane
    vel:CartesianPlane

@block
def particleIntegrator(state: Point[Particle], input: Point[CartesianPlane])-> Point[Particle]:
    #input is acceleration
    #output is the new particle state
    output = deepcopy(state)

    output['pos']['x']  += state['particle']['vel']['x']
    output['pos']['y']  += state['particle']['vel']['y']

    output['vel']['x']  += input['x']
    output['vel']['y']  += input['y']

    return output

Additional context
I am working on the Cat & Laser pointer demo, and aiming to make the model as simple as possible. The most natural view of the systems is the below, which requires particle integrator (twice!) which requires 2 inputs to make sense.
Tag - Page 5

DSL Symbols

  • what each symbol from the DSL means
  • based on syntax developed in #40

drop_dimension method for spaces

proposing we add a method that can be applied to any space that will create a new space without one of its dimensions.

suppose

@space
class MySpace:
     a: int
     b: int

but then i did

MySpace = MySpace.drop_dimension('a')

the resulting space would be as if i had declared

@space
class MySpace:
     b: int

tests for block attributes

tests for #68

AC

  • aligns modeler expectations of block attributes and code
  • fixtures for spaces
  • fixtures for block using those space
  • check signatures
  • check domains, and codomains types

Breakdown Compiler Epic work

To be broken down into small stories.

AC:

  • We have a full featured reusable compiler that lowers the DSL into block calls

subspace method

proposing we add a method that can be applied to any space that will create a new space from exactly one of its dimensions.

suppose

@space
class CartesianPlane:
    x: float
    y: float

@space
class MySpace:
     pos: CartesianPlane
     vel: CartesianPlane

but then i did

MySubSpace = MySpace.subspace('pos')

the resulting space would be as if i had declared

@space
class MySubSpace:
     pos: CartesianPlane

also open to just returning

CartesianPlane

if we think that is better UX

Math Spec x cadCAD Shared Documentation

Creating a general issue for figuring out how we want to create a shared documentation between the two libraries as related to definitions of things like blocks and spaces.

Issue is resolved with us coming up with a process/space to contribute to.

[Impl] pass through blocks

pass in a space and non-negative integer

domain: space
co-domain: same space, n copies

  • deadend
    • 0: empty
    • bookkeeps a nothing
  • identity
    • 1: itself
  • splitter
    • 2
  • broadcast
    • 3: n

Points should accept subsets of the Space Dimensions as values

Providing int values will generate an Schema Mismatch on this case even though they're subset of the float type.:

data = {"x": -5, "y": 7}

@space
class CartesianPlane:
    x:float
    y:float

my_point = Point(CartesianPlane, data)

CartesianPlaneDot = CartesianPlane.rename_dims({'x':'dx', 'y':'dy'})

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.