Community Update-Feb 2024: cadCAD v0.5.1 Released & Announcing cadCAD.jl

cadCAD v0.5.1 improves performance, model management, and tooling. It is compatible with Python 3.10 and up. In Q2 we will release cadCAD.jl, a high performance Julia version for professional workflows. This will be the first non-python version based on the Reference Implementation specification.

The cadCAD core development team has been heads down designing and building the next generation of cadCAD with the Reference Implementation in python. From the ground up, our team has been diligently designing the standards on how cadCAD models should work across implementations in various languages. We believe spreading the adoption of working and thinking in Generalized Dynamical Systems (GDS) is rapidly becoming more important as deployments, adoption, complexity, and interconnectedness of networks increases. Enabling implementations of cadCAD in more languages spreads the practice of encoding GDS as computer programs for use in various disciplines and applications. Leveraging the strengths and communities particular to each language helps us get there, and we’re excited to announce our progress in developing the Reference Implementation has gotten us one step closer to that vision.

Today we are announcing a Q2 release for an alpha build of cadCAD.jl, a high performance version for professional workflows built in Julia. This will be the first implementation of cadCAD outside of python based on the design specifications of the Reference Implementation. With multiple versions of cadCAD forthcoming, we will be introducing a naming and branding schema in the future to help better differentiate builds, communicate the future of cadCAD, and set the stage for the forthcoming cadCAD Reference Implementation in python.

Alongside working on the next generation of cadCAD, the team has been supporting the current production build with core enhancements and feature upgrades. Now, with the live updates found in cadCAD v0.5.1, users can expect a much more seamless experience in running models with the latest versions of python, while we continue ahead on developing the Reference Implementation.


Building the Next Generation of cadCAD: The Reference Implementation (RI) and cadCAD.jl

When we conceived cadCAD RI, we set the goal of creating the best onboarding to systems modeling and that this would serve as a clear, gold-standard demonstration of the expected cadCAD behavior other implementations would be tested against. Using the most popular and beginner-friendly scientific computing language is a natural fit for these goals.  Implementations in languages focused on performance could trade ease of use for speed and scalability as it matches the user’s needs, expectations, and modeling fluency. Long term, we envision paths of mastery for people starting out in cadCAD RI able to graduate into more specialized implementations. The latest alpha of the python-based cadCAD RI can be found in the cadCAD Github repository.

We have distilled the fundamental elements of a modular and composable cadCAD as we had initially set out to create. We’ve defined the user experience of how building and running models should work and have solidified the formal API. This has unlocked the ability to properly battle-test the use of cadCAD RI as a reference for additional implementations, as we will be doing with cadCAD.jl. Further, it opens up the ability for rapid development of future tooling, like a GUI-based cadCAD model development environment (“Visual cadCAD”). We also anticipate making it feasible to one day run models built in the python-based cadCAD RI to run in cadCAD.jl due to the API and affordances in Julia’s meta-programming nature.

An example of the API: In cadCAD RI, we spaces are a special type containing other types, enabling composability and manipulation of any arbitrary data record. Spaces are defined by decorating a regular Python class, with built-in ones for convenience--just import them.

Over the last year, our development team has been working to ensure that the mathematical framework of GDS is represented in executable code and reflects an intuitive mental model and workflow for those starting their systems engineering journey. There is work remaining on implementing the domain specific language for composing models, and resolving needs for flexible and strong typing within python. This challenge has informed the current shape of the API that has enabled us to start work on cadCAD.jl. It has been a big effort to create the best possible beginner friendly platform for modeling GDS. With an imminent release of cadCAD.jl in the next few months, we look forward to see what the Julia community will build and welcome them into the cadCAD community.

cadCAD v0.5.1

The newest production version of cadCAD was just released with bug fixes and improvements to performance, model version management, tooling, and our continuous integration, testing, and deployment pipeline. cadCAD v0.5.1 should now be compatible with newer Python versions  3.10 and up. Additionally, sincle_proc mode should now work. Users should notice performance enhancements on simulation start-up optimization and upgrades to modules like cadCAD tools, types, and diagram submodules for easier handling of models in this version of cadCAD.

The work of integrating several improvements across different forks made over time, was an invitation to revise our integration and development practices. The development team revamped the Pytest-based testing framework, added new unit tests, installed a new release and testing pipeline, and set up tracking tags in the Github repo. With more granular tracking over source code, users deploying code have more visibility and capability for choosing which instance of cadCAD they are running a model from within the model library. Rollbacks are still manual for those using old versions. Overall, these improvements to our project practices will also enable a faster evaluation of any future issues and pull requests, and we will carry this forward into all officially supported implementations of cadCAD.

Community Expansion & The Road Ahead

With a near-term focus to prioritize cadCAD.jl, we see this as an opportunity to ship more quickly a step-change version of cadCAD to a leading data science community of seasoned modelers. By giving them a high-performance tool to work with Generalized Dynamical Systems, we can bring their high level of expertise into the cadCAD community and accelerate further development and community support. We have been asked the past few years for versions of cadCAD in computationally faster languages, including Julia. Being able to do deliver cadCAD.jl will be a significant milestone in spreading the adoption of working with GDS and encoding them into computer programs and the systems that rely on them.

While our development team continues to work and ship the next generation of cadCAD, fundraising via Gitcoin and other grant programs has continued to build the treasury to support community and bounty development. Once the new versions are released, the cadCAD Foundation will be deploying these funds towards reactivating the community, with plans for resuming community calls and educational workshops, as well as initiatives like collecting feedback on the development of the model library among other directives. If you are interested in supporting our efforts and mission please reach out.

Follow our channels to stay tuned

🕸 Site | 🤖 Github | 🗺️ Intro to cadCAD | 🐦 Twitter | 👥 Discord | 🎥 YouTube | 📚 Forum

Brief Timeline of cadCAD Development

Acknowledgments

This article was written by Chris Catoya and Jessica Zartler with contributions and feedback from Emanuel Lima, Danilo Lessa Bernardinelli, David Sisson, and Jeff Emmett.

The cadCAD community would like to extend special recognition and gratitude to Emanuel Lima and Danilo Lessa Bernardinelli for their ongoing commitment and core development, as well as Sean McOwen for his contributions to ongoing cadCAD improvements.