<div dir="ltr">Hello everyone,<br><br>With GSoC coming to an end, This mail serves as the final report of my work over the past three months! It has been an incredible experience! This report is in accordance with the guidelines set by Google [1] and OSGeo GSoC Admins [2].<br><br><b>Title:</b> GSoC 2022 Implementing hawick_circuits algorithm from Boost Graph Library to pgRouting<br><br><b>Organization:</b> pgRouting under OSGeo<br><br><b>Abstract:</b> The GSoC project has implemented the Boost Graph Library Algorithm Hawick_circuits in pgRouting. Hawick circuit is an algorithm used for searching for circuits in a graph. It can be used to enumerate all the circuits in a directed multigraph, it can also enumerate self-loops and redundant circuits. It enumerates the circuits in the linear order of vertex. This algorithm is an extension of johnson’s algorithm for circuits and presents a memory-efficient and high-performance implementation. It has a time complexity of the order of `O((v+e)(c+1))` where c represents the circuit count.<br><br><b>State of the Project Before GSoC:</b> Previously, there was no algorithm implemented in pgRouting for searching or enumerating circuits in pgRouting. Detecting and enumerating circuits in graphs is of fundamental importance for analyzing graphs. This project has added this functionality to pgRouting.<br><br><b>The addition that my project brought to pgRouting:</b> The deliverables are code, documentation, documentation tests, and the pgTAP tests of the function.<br>Hawick Circuit (pgr_hawickcircuit) can be used to get all the distinct circuits present in a graph. End users can view all of the circuits in a single go with properties such as the cost and length of these circuits. These circuits can be used to get a deep analysis of the respective graph.<div><br><div><b>Potential Future Work:</b><br><ul><li style="margin-left:15px">In the near future, we can implement the other variation of the algorithm, which can help us count and show the parallel circuits as well.</li><li style="margin-left:15px">General metric function can be developed over the top of a circuit which can expose metrics such as median circuit length, node importance over its occurrence in a circuit, and various other of these kinds.</li></ul><br><b>Links:</b><br></div><div><ul><li style="margin-left:15px"><b>Tags:</b></li><ul><li style="margin-left:15px"><b>Hawick Circuits (2022-nitish-hawickcircuit-function): <a href="https://github.com/pgRouting/GSoC-pgRouting/releases/tag/2022-nitish-hawickcircuit-function" target="_blank">https://github.com/pgRouting/GSoC-pgRouting/releases/tag/2022-nitish-hawickcircuit-function</a></b></li></ul><li style="margin-left:15px"><b>Pull Requests:</b></li><ul><li style="margin-left:15px"><b>Final Pull Request: </b>(#2363) Experimental Function - pgr_hawickCircuits<b> (<a href="https://github.com/pgRouting/pgrouting/pull/2363" target="_blank" style="font-weight:400">https://github.com/pgRouting/pgrouting/pull/2363</a><span style="font-weight:400">)</span><br></b></li><li style="margin-left:15px"><b>Intermediate pull requests:</b> <a href="https://github.com/pgRouting/pgrouting/wiki/GSoC-2022-Implementing-hawick_circuits-algorithm-from-Boost-Graph-Library-to-pgRouting#log-of-pull-requests" target="_blank">https://github.com/pgRouting/pgrouting/wiki/GSoC-2022-Implementing-hawick_circuits-algorithm-from-Boost-Graph-Library-to-pgRouting#log-of-pull-requests</a></li></ul><li style="margin-left:15px"><b>Project Documentation (Wiki Page): </b><a href="https://github.com/pgRouting/pgrouting/wiki/GSoC-2022-Implementing-hawick_circuits-algorithm-from-Boost-Graph-Library-to-pgRouting" target="_blank">https://github.com/pgRouting/pgrouting/wiki/GSoC-2022-Implementing-hawick_circuits-algorithm-from-Boost-Graph-Library-to-pgRouting</a></li><li style="margin-left:15px"><b>Example Image:</b></li><ul><li style="margin-left:15px"><b>pgr_hawickCircuits:</b> <a href="https://drive.google.com/file/d/1WtcR8tBdBi7d9o4CeukFhC0FB-yfBeu2/view?usp=sharing" target="_blank">https://drive.google.com/file/d/1WtcR8tBdBi7d9o4CeukFhC0FB-yfBeu2/view?usp=sharing</a></li></ul><li style="margin-left:15px"><b>FOSS4g Work Presentation:</b></li><ul><li style="margin-left:15px"><b>Slide Demonstration:</b> <a href="https://docs.google.com/presentation/d/1SnS1JBCrSF-earc5u3f0fux87qJFpxq-p343x1ZHiko/edit?usp=sharing" target="_blank">https://docs.google.com/presentation/d/1SnS1JBCrSF-earc5u3f0fux87qJFpxq-p343x1ZHiko/edit?usp=sharing</a></li></ul></ul></div></div><div><div>I am thrilled to be a part of the incredible GSoC community. There have been many ups and downs, and I have learned a lot from them, which I am confident will benefit me in my future development journey. I would be delighted if my code is useful to the community. Finally, thanks to all of you for your encouragement and this wonderful opportunity! Looking forward to contributing more and growing with the community.<br>Thanks and regards,<br>Nitish Chauhan</div><div><br>[1] <a href="https://developers.google.com/open-source/gsoc/help/work-product" target="_blank">https://developers.google.com/open-source/gsoc/help/work-product</a><br>[2] <a href="https://lists.osgeo.org/pipermail/soc/2022-September/004962.html" target="_blank">https://lists.osgeo.org/pipermail/soc/2022-September/004962.html</a></div></div></div>