This week I have been mainly working on two things: validation and final presentation. The arrays package turned out to be more difficult than I was anticipating. The package itself is very straightforward, but validating and flattening a model is not so easy mostly because of all the math implications. Last week I changed the flattening routine to reflect two changes: one is that implicit sizes are going to be disallowed and second I had the wrong interpretation of reaction and species reference with dimensions.
By implicit sizes, we mean that if a variable is an array, say X, and we want to give an initial assignment to X, then the right-hand side must be evaluated to a scalar. If the right-hand side evaluates to a vector, then it must be the case that X has Dimension objects where the dimension sizes match the assigned vector dimension sizes.
Reactions and events are kind of tricky so I made a special case for both. The problem of these SBase objects is that they have children that can have Dimension objects or have vector MathML. For instance, events have trigger/delay/priority which can be vectors. In addition, events have event assignment objects that are allowed to have a list of Dimensions. Reactions have KineticLaw objects which can also be a vector. Furthermore, reactions have SpeciesReference objects which can be an array. The tricky part which I hadn't considered was the case where species reference and reaction are arrays and species reference have ids. Since species reference cannot have duplicate id, I had to make the flattened species reference id to take both the parent reaction's index value and the species reference index value to ensure uniqueness.
Finally, I started making the slides for my final presentation. The final presentation will be an important factor to decide whether or not I pass my final Google Summer of Code evaluation. We, the students and mentors, will have a joint meeting next week, so I need to practice my presentation throughout this week. This presentation will serve as a practice for a talk every student will give at COMBINE.