Posts

Week 13: Signing Off With Gratitude and Growth

 Hi everyone, This is my final blog in the weekly series documenting my GSoC journey with SBSCL. Over the past 12 weeks, these posts have been a way for me to not only track progress but also share insights, challenges, and milestones as they happened in real time. This Week’s Highlights My last PR was merged , marking the completion of the main development work. We’re now discussing the next big step — merging the feature branch I’ve been working on throughout the summer into the main branch of SBSCL . This feels like the perfect culmination of the project: to see the work become part of the official codebase and ready for broader use. With this, everything is set for the final submission and the close of this GSoC cycle. Looking Back When I started, the idea of implementing and refining numerical solvers within SBSCL felt both exciting and daunting. Over time, I’ve grown not just in terms of coding and technical depth, but also in how I collaborate, document, an...

Week 12: Strengthening LSODA & Final Preparations

Image
Hi everyone, Following up from last blog’s deep dive into the PR, this blog will cover the ongoing activities. Here’s a summary of that: Key Updates Following my meeting with Dr. Dräger, I incorporated the changes he suggested in the PR review. We talked about observer pattern and he suggested that I should read about it in more detail. Observer pattern is a software design pattern where an object, known as subject, maintains a list of its dependents, known as observers, and automatically notifies them of any state changes. I have now published the new updated SBSCL wikipedia page . This was an exciting contribution as it not only documents SBSCL’s presence in the wider community but also makes it more discoverable for researchers and developers who may benefit from it. Implemented the absolute tolerance adjustment factor approach for assigning default absolute tolerances to the species. Thanks to Lucian for sharing this. Now, once this PR gets merged I will create another PR for th...

Week 11: A Closer Look at the Latest PR

Hi everyone, This week’s update is a little delayed, but I’ll focus here on walking you through the details of my latest Pull Request . I’ll cover the other activities separately in the next blog.  Refactoring LSODAContext One of the first changes I made was updating the odesystem member variable in LSODAContext . Previously, it was an object of  DESystem interface, but since  DESystem  itself implements  FirstOrderDifferentialEquations  interface and also brings in methods not directly needed by LSODA (specifically for storing the ode system purpose), I switched the type to  FirstOrderDifferentialEquations . This simplifies the workflow significantly: when using SBSCL with a direct ODE system, users now only need to implement computeDerivative() and getDimension() . Everything else is handled automatically, making the integration smoother and more intuitive. Default Tolerance Values I added sensible default tolerances in LSODAOptions : Rel...

Week 10: Starting Documentation and Polishing LSODA-Integrator

 Hi everyone, This week was about moving from testing to outreach and deeper documentation. I wrote a document for the SBSCL Wikipedia update , and incorporated suggestions from Dr. Draeger. I added a  default relative and absolute tolerance values for LSODA-Integrator, after discussing it with my mentors.  We also agreed that some legacy files like LSODAFunctions and LSODACommonContext can now be removed. I have now sent the announcement emails to relevant mailing lists. I have now created a Pull Request with code from the testing phase, which primarily includes SBMLTestSuiteRunner wrapper and some documentation files along with few more changes to improve the readability. We talked about the next major step which is writing detailed HTML documentation for LSODA, matching the style of SBSCL’s other solver docs. What’s Next Finalize and publish the updated SBSCL Wikipedia entry. Write comprehensive HTML documentation for LSODA-Integrator. Polish the codeb...

Week 9: Wrapping Up Testing

Hi everyone, As shared in the last blog that we have achieved a respectable result after running our algorithm against SBML Test Suite (Although, we are actively  looking into the remaining failed test cases). The focus has a little shifted from testing to documentation , community engagement, and preparing LSODA-Integrator for its final polished form. We kicked off the week with a full-team meeting where I shared the latest SBML Test Suite results with the mentors. This marks a big milestone, as the LSODA-Integrator is now stable, accurate, and well integrated into SBSCL. Our discussion revolved around the remaining 1% of failing cases — particularly those producing errors or no output . Dr. Dräger and Dr. Funahashi emphasized prioritizing these over tests with merely incorrect results. I explained my approach to event handling, delayed reactions, and fast reaction tags (described in detail in my Week 8 blog post ). Dr. Funahashi shared libSBMLsim as a possible resource to help i...

Week 8: LSODA Gets Smarter

Image
Hi all, Okay, Continuing our story from last blog. So, after spending the past week chasing down the issue with SBML Test Suite failures (which I elaborated on in my last blog post ), I finally got a breakthrough that brought us closer to a robust and reliable LSODA integration in SBSCL. Revisiting the SBML Test Suite Challenges Previously, around 12% of the tests were failing and 2% were throwing outright errors. After narrowing the root cause down to event handling discrepancies, I spent this entire week diving deeper into tackling this challenge. Dr. Dräger shared a fantastic resource ( link ), which not only confirmed my theory but also revealed that previous developers had faced similar problems while implementing the Rosenbrock solver in SBSCL. It turns out that precise event time detection is a non-trivial challenge when dealing with SBML models. When events are triggered between timepoints (say at tτ , which lies between tτ−1 and tτ+1 ), evaluating events only at thos...

Week 7: Events, Exhaustion and Evaluations

Image
Hi all, This week has probably been the toughest one yet. Not just mentally, but also in terms of hours spent chasing bugs that I had no idea about. I’ve logged over 50 hours on the project, and ironically, there’s not much “visible” progress to show. But deep down, I know this is part of the process, and what matters is that I’ve been able to get to the root of a tricky problem, more on that below. Updates From This Week Made the PR changes suggested by Dr. Dräger and Taichi. Ran the SBMLTestSuite using the wrapper program I wrote last week. I had already shared the test results with the team on Slack. Results? Mixed bag: Passed: ~85% of the test cases (Happy somewhat!) Wrong Output: ~12–13% Error: ~2% (No idea, why?) Results Map from SBMLTestRunner So naturally, I spent the entire week narrowing down those failed and wrong output cases. And guess what? I’ve finally figured out what's going wrong in most of the wrong output cases. The Issue: Event Timin...

Week 6: Pull Request and Peer Review

Hello again! Week 6 of my GSoC 2025 journey has been all about refinement, feedback, and forward momentum . I finally opened my long-standing pull request with the work done over the past three weeks. Here are more details around it. The Pull Request On July 7th, 2025 , I submitted a pull request that encapsulated all the major changes and improvements I’ve worked on since Week 3. This included: The updated LSODA package A clean interface supporting both SBML input and direct ODEs Multiple system-level tests for validation Detailed exception handling for edge cases Detailed method-level docstrings  Once opened, the PR served as a starting point for deeper discussions with my mentors — not just about what’s working, but how things can be made even better. SBMLTestSuite: Building the Test Bridge As part of verifying LSODA’s reliability in a broader context, I started my work on testing the solver against the  SBML Test Suite . I read the documentation and l...