## Monday, July 7, 2014

### Weekly Log: June 30 - July 6

This week I worked on a compiler that evaluates vectors. For instance, the compiler
• accepts {{1},{2},{3}} + {{4},{5},{6}} and outputs {{5},{7},{9}}
• accepts {{1},{2},{3}} + 2 and outputs {{3},{4},{5}}
• accepts sin({pi, pi/2, -pi}) and outputs {0, 1, 0}
• and so on.
For every binary or nary operations, the vector dimension of the input nodes should match in size unless it is a scalar. As shown in the example, if you have a vector plus a scalar, then each entry will be incremented by the scalar value. For instance, the compiler
• rejects {{1},{2},{3}} + {{4}}
• rejects {1, 2, 3} + {{1},{2},{3}}
• and so on.
When there is an SIdRef object type, I check if the object has dimensions and, if so, I convert it to a vector. Otherwise, I convert it to a scalar.

Ultimately, the compiler needs to do absolute value, trigonometric operations, logical operations, arithmetic operations, floor, ceiling, fraction, inequalities, lambda function, piecewise function, logarithm operations, power, square root, selector...

I haven't implemented all of them, but I got a lot of them done. This compiler will be used in the remaining validation rule that specifies that states the vector dimensions should match unless it is a scalar.

In addition to the compiler, I updated the arrays specification to include a flattening algorithm. I discussed the algorithm with my mentors, Chris and Nico. There are a couple of things that needs to be fixed but the algorithm seem to be in the right track. Perhaps after polishing it a little bit, the algorithm will be good to go and I can start the implementation. The vector compiler can potentially be used in the flattening routine as well.