Interfacing PODIO with Julia

About Me I am Soumil Baldota in my sophomore year in college with a few years of development experience in C++ and Python. For me Julia was a new language but I got acclimated quickly and have had a good time contributing to HSF organization. I am thankful to my mentors and the organization.

Community Bonding In the community bonding period, with the help of Thomas and Benedikt, I setup my development environment along with local install of podio. To get familiar with podio and the contributing workflow. I worked on some minor issues.

Issues raised: clang-tidy pylint

Pull Requests: Replace obj_needs_destructor by more general concept Review generator python code running pre-commit locally

Next I began to work on a prototype for the Interface which described how the generated code would look like. The prototype was created for classes with one to one relations, one to many relations and vector members. Then I made unittests for the prototype and added them to github actions for continuous integration. The prototype can be found at the below link Prototype

Coding Period After the prototype was created. I added an attribute to store the Julia type of a data member described in C++ to the MemberVariable Class and a function to get the Julia type in generator_utils.py, this was a necessary step to feed the jinja2 templates with the appropriate Julia type for code generation. After Julia type was added I made some unittests for the same and added them to test_MemberParser.py. I made jinja2 templates for Julia code generation

Work in progress: Adding the necessary preprocessing logic for julia code generation to podio_class_generator Currently some of the code generation works but still needs some fixes and additional features.

Issues I am facing: Mutually recursive type declarations which exist in separate files. This has been a long standing issue on the Julia github. I have found some workarounds namely by using Parameteric Types and Abstract types in Julia and currently am trying to find a suitable one, hence it requires some additional work.