<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://grasswiki.osgeo.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kaushikraja</id>
	<title>GRASS-Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://grasswiki.osgeo.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Kaushikraja"/>
	<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/wiki/Special:Contributions/Kaushikraja"/>
	<updated>2026-05-13T17:38:42Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_Ideas_2026&amp;diff=28870</id>
		<title>GRASS GSoC Ideas 2026</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_Ideas_2026&amp;diff=28870"/>
		<updated>2026-05-07T06:41:32Z</updated>

		<summary type="html">&lt;p&gt;Kaushikraja: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== About ==&lt;br /&gt;
Important: While we are still an OSGeo project, we changed our fiscal sponsor to [https://numfocus.org/ NumFOCUS].&lt;br /&gt;
&lt;br /&gt;
''As a result, GRASS participates in GSoC under the [https://numfocus.org/ NumFOCUS] umbrella organization.''&lt;br /&gt;
&lt;br /&gt;
Read more about our governance [https://grass.osgeo.org/about/governance/ on GRASS website].&lt;br /&gt;
&lt;br /&gt;
* [https://numfocus.org/programs/google-summer-code The NumFOCUS GSoC main page]&lt;br /&gt;
* [https://github.com/numfocus/gsoc/blob/master/CONTRIBUTING-contributors.md NumFOCUS guidelines for contributors].&lt;br /&gt;
* [https://summerofcode.withgoogle.com/ Official GSoC page at Google]&lt;br /&gt;
&lt;br /&gt;
== Accepted ideas ==&lt;br /&gt;
=== Idea title ===&lt;br /&gt;
* Student:&lt;br /&gt;
* Mentors:&lt;br /&gt;
* [[GRASS_GSoC_2025_Add_JSON_output_to_different_tools_in_C|Example of Wiki page]]&lt;br /&gt;
&lt;br /&gt;
=== Parallelizing r.proj and Raster Processing Modules in GRASS ===&lt;br /&gt;
* Student: Kaushik Raja&lt;br /&gt;
* Mentors: Huidae Cho, Anna Petrasova, Vaclav Petras&lt;br /&gt;
* [[GRASS_GSoC_2026_Parallelizing_r.proj_and_Raster_Processing_Modules_in_GRASS|Project Wiki Page]]&lt;br /&gt;
&lt;br /&gt;
=== Add Spatio-Temporal dataset support to datacatalog in GUI ===&lt;br /&gt;
* Student: Saket Kumar Mall&lt;br /&gt;
* Mentors: Anna Petrasova, Stefan Blumentrath&lt;br /&gt;
* [[GSoC_2026_Add_Spatio-Temporal_dataset_support_to_datacatalog_in_GUI|Project Wiki Page]]&lt;br /&gt;
&lt;br /&gt;
=== Support writing tests with pytest ===&lt;br /&gt;
* Student: Gulshan Kumar&lt;br /&gt;
* Mentors: Vaclav Petras, Corey White&lt;br /&gt;
* [[GRASS_GSoC_2026_Support_writing_tests_with_pytest|Project Wiki Page]]&lt;br /&gt;
&lt;br /&gt;
== AI Tool Usage Policy ==&lt;br /&gt;
We acknowledge that applicants may use AI tools (like ChatGPT, Copilot, etc.) to assist with proposal writing and coding. However:&lt;br /&gt;
&lt;br /&gt;
* Your proposal should reflect your own understanding and voice. AI-generated &amp;quot;slop&amp;quot; (overly generic or regurgitated content) is easy to spot and will hurt your application.&lt;br /&gt;
* We evaluate applications primarily on GitHub contributions and communication with the GRASS community, not just proposal polish.&lt;br /&gt;
* Show us you understand the project through high-quality pull requests on GitHub.&lt;br /&gt;
* Disclose AI usage: If you use AI tools in your proposal or code contributions, please disclose the extent to which you used them (e.g., for brainstorming, proofreading, code suggestions, etc.).&lt;br /&gt;
&lt;br /&gt;
== Ideas ==&lt;br /&gt;
If you are a student you can suggest a new idea or pick up an existing one. In any case write about it to [https://discourse.osgeo.org/c/grass/developer/61 OSGeo Discourse forum for GRASS developers], [https://github.com/OSGeo/grass/discussions GitHub Discussions], or [https://gitter.im/grassgis/community Gitter].&lt;br /&gt;
&lt;br /&gt;
You are invited as well to have a close look at ideas from previous years ([https://trac.osgeo.org/grass/wiki/GSoC/2014 2014], [https://trac.osgeo.org/grass/wiki/GSoC/2015 2015], [https://trac.osgeo.org/grass/wiki/GSoC/2016 2016],&lt;br /&gt;
[https://trac.osgeo.org/grass/wiki/GSoC/2017 2017],&lt;br /&gt;
[https://trac.osgeo.org/grass/wiki/GSoC/2018 2018],&lt;br /&gt;
[https://trac.osgeo.org/grass/wiki/GSoC/2019 2019],&lt;br /&gt;
[https://trac.osgeo.org/grass/wiki/GSoC/2020 2020],&lt;br /&gt;
[https://trac.osgeo.org/grass/wiki/GSoC/2021 2021],&lt;br /&gt;
[https://trac.osgeo.org/grass/wiki/GSoC/2022 2022],&lt;br /&gt;
[https://trac.osgeo.org/grass/wiki/GSoC/2023 2023])&lt;br /&gt;
which have not yet been implemented.&lt;br /&gt;
You can also look at accepted GRASS GSoC [https://trac.osgeo.org/grass/wiki/GSoC projects from previous years] for an idea of scope.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Parallelization of existing tools ===&lt;br /&gt;
&lt;br /&gt;
There are several tools that would benefit from parallelization with OpenMP, e.g. r.texture, r.fill.stats, r/v.surf.idw, r.viewshed, v.to.rast, r.grow.distance, v.surf.bspline, r.proj, ...&lt;br /&gt;
For overview of current state, see [[Raster_Parallelization_with_OpenMP]].&lt;br /&gt;
&lt;br /&gt;
* Requirements: familiarity with C, OpenMP&lt;br /&gt;
* Mentor: Huidae Cho&lt;br /&gt;
* Co-mentor: Vaclav Petras, Anna Petrasova&lt;br /&gt;
* Project length: Large (350 hours)&lt;br /&gt;
* Rating: difficult&lt;br /&gt;
* Expected Outcomes: parallelized 2-5 tools, depending on complexity&lt;br /&gt;
* Test of skills (one or more):&lt;br /&gt;
** Address https://github.com/OSGeo/grass/issues/5776 (carefully read the existing conversation in the issue and linked PR)&lt;br /&gt;
** Pick a tool and develop prototype implementation of the parallelization.&lt;br /&gt;
&lt;br /&gt;
=== Improve GRASS user experience in Jupyter Notebook ===&lt;br /&gt;
[[File:Jupyter_interactive_viewshed.png|500px|thumb|right|InteractiveMap in grass.jupyter library]]&lt;br /&gt;
Python package [https://grass.osgeo.org/grass-stable/manuals/libpython/grass.jupyter.html grass.jupyter] was developed during [https://trac.osgeo.org/grass/wiki/GSoC/2021/JupyterAndGRASS GSoC 2021] to simplify running GRASS from Jupyter Notebooks and displaying data. This project could focus on adding features such as better symbology handling and adding legend to InteractiveMap and better integration with matplotlib.&lt;br /&gt;
&lt;br /&gt;
* Requirements: Python&lt;br /&gt;
* Mentor: Anna Petrasova&lt;br /&gt;
* Co-mentor: Vaclav Petras, Helena Mitasova, Corey White&lt;br /&gt;
* Project length: Large (350 hours)&lt;br /&gt;
* Rating: easy to medium&lt;br /&gt;
* Expected Outcomes: improved user experience when using GRASS through notebooks&lt;br /&gt;
* Test of skills: write a test for [https://github.com/OSGeo/grass/tree/main/python/grass/jupyter grass.jupyter library] using python unittest or pytest, more info [https://grass.osgeo.org/grass-devel/manuals/libpython/gunittest_testing.html here] or rewrite some of the functions in grass.jupyter library using the new [https://grass.osgeo.org/grass-devel/manuals/python_intro.html#running-tools Tools API].&lt;br /&gt;
&lt;br /&gt;
=== Add JSON output to different tools ===&lt;br /&gt;
There are several tools in GRASS that would benefit from a JSON-formatted output.&lt;br /&gt;
Besides adding the JSON output, the work would also include adding tests and basic documentation.&lt;br /&gt;
* Requirements: C, Python&lt;br /&gt;
* Mentor: Vaclav Petras&lt;br /&gt;
* Co-mentor: Anna Petrasova, Corey White&lt;br /&gt;
* Project length: Large (350 hours)&lt;br /&gt;
* Rating: easy to medium&lt;br /&gt;
* Expected Outcomes: 10-20 tools (depending on project length and complexity of the tool) tools with well tested JSON output&lt;br /&gt;
* Note: A lot of work on JSON was already done, but there is more! Some of the remaining tools require more design. There are also Python tools (not just C which was the focus previously) and then also the grass-addons repo. Some tools also don't have any machine readable output right now and should. Also current tools which use other tools should use the new JSON as opposed to what they are using now. Preparing a well-reasoned list of tasks is a part of the application.&lt;br /&gt;
* Test of skills (pick one or more): &lt;br /&gt;
** https://github.com/OSGeo/grass/issues/6968&lt;br /&gt;
** https://github.com/OSGeo/grass/issues/6969&lt;br /&gt;
** https://github.com/OSGeo/grass/issues/6970&lt;br /&gt;
&lt;br /&gt;
=== Support writing tests with pytest ===&lt;br /&gt;
&lt;br /&gt;
* The current testing framework, ''[https://grass.osgeo.org/grass-stable/manuals/libpython/gunittest.html grass.gunittest]'', was written before migration to Git/GitHub and when long free runs in 3rd party services were unthinkable. Additionally, some no longer relevant goals were prioritized, such as independence on the current code, detailed custom HTML reports, success tracking over time, and high specialization towards GRASS-specifics.&lt;br /&gt;
* ''grass.gunittest'' is based on Python ''unittest'' package and many projects since then migrated to //pytest//, e.g., GDAL and Numpy. While ''unittest'' is inspired by Java's JUnit, ''pytest'' is designed to support writing small, readable tests, and uses plain `assert` statements instead of many different assert methods.&lt;br /&gt;
* Using ''pytest'' should lead to tests which feel more like Python scripts and to minimum of testing-specific code.&lt;br /&gt;
* An example issue of ''grass.gunittest'' is that it doesn't work well with tests of the main GRASS executable (prominence of `grass ... --exec` is yet another new thing which changed since ''grass.gunittest'' was designed).&lt;br /&gt;
* Two main things needed:&lt;br /&gt;
** Create general comparison functions from the ''grass.gunittest'' assert methods so that they can be used with pytest.&lt;br /&gt;
** Current grass.script.setup.init function and grass.script.core.create_location function don't work well in the context of a pytest test function. More  &lt;br /&gt;
* Additional things needed:&lt;br /&gt;
** Fixture for pytest to set up and tear down a GRASS session in a temporary mapset.&lt;br /&gt;
&lt;br /&gt;
* Requirements: Python&lt;br /&gt;
* Project length: Large (350 hours)&lt;br /&gt;
* Mentor: Vaclav Petras&lt;br /&gt;
* Co-mentor: Stefan Blumentrath&lt;br /&gt;
* Proposed by: Vaclav Petras&lt;br /&gt;
* Rating: easy to medium&lt;br /&gt;
* Expected Outcomes: Convenient way of writing tests with pytest&lt;br /&gt;
* Test of skills: Fix failing tests and/or write new tests (more is better). Alternatively, addressing a smaller problem in the testing framework is a good task, too.&lt;br /&gt;
&lt;br /&gt;
=== Fix known code defects ===&lt;br /&gt;
&lt;br /&gt;
* Fix code defects (security or code quality) such as those reported by Coverity Scan.&lt;br /&gt;
* Mentors: Vaclav Petras&lt;br /&gt;
* Co-mentors: Nicklas Larsson&lt;br /&gt;
* Proposed by: Vaclav Petras&lt;br /&gt;
* Project length: Large (350 hours)&lt;br /&gt;
* Rating: medium&lt;br /&gt;
* Requirements:&lt;br /&gt;
** Language: C&lt;br /&gt;
** Proposal: Define milestones which will be used during the evaluation.&lt;br /&gt;
* Expected outcomes:&lt;br /&gt;
** Reduction of issues by 70-100%.&lt;br /&gt;
** New tests for changed code if missing.&lt;br /&gt;
* Test and training tasks (complete more than one): Fix e.g., [https://gcc.gnu.org/onlinedocs/gcc/Static-Analyzer-Options.html GCC Static Analysis], [https://clang.llvm.org/docs/ClangStaticAnalyzer.html Clang Static Analyzer] or [https://cppcheck.sourceforge.io Cppcheck] issues.&lt;br /&gt;
&lt;br /&gt;
=== Subcommand CLI for GRASS ===&lt;br /&gt;
&lt;br /&gt;
* Make running of GRASS tools in command line as easy as possible.&lt;br /&gt;
** `grass run r.slope.aspect elevation=elevation.tiff slope=slope.tiff aspect=aspect.tiff`&lt;br /&gt;
* Project length: Large (350 hours)&lt;br /&gt;
* Rating: medium&lt;br /&gt;
* Requirements:&lt;br /&gt;
** Language: Python&lt;br /&gt;
** Proposal: Student needs to show sufficient understanding of data and project handling in GRASS. Furthermore, the proposal needs to present, at least, concrete formulation of ideas, identification of missing and existing parts, and new subcommands.&lt;br /&gt;
* Mentors: Vaclav Petras&lt;br /&gt;
* Co-mentors: Stefan Blumentrath, Corey White&lt;br /&gt;
* Proposed by: Vaclav Petras&lt;br /&gt;
* Expected outcomes:&lt;br /&gt;
** A subcommand which runs a GRASS tool on GeoTiff and GeoPackage in one step.&lt;br /&gt;
** A complete parity with the existing CLI.&lt;br /&gt;
** An underlying Python API which will be used to implement the CLI.&lt;br /&gt;
* Test and training tasks (complete one or more): Add a subcommand, sub-subcommand, or an option to the experimental interface (with tests).&lt;br /&gt;
** Add `--region` to set a temporary computational region for the execution, e.g. `--region=&amp;quot;raster=raster_name&amp;quot;`.&lt;br /&gt;
** Add `--import-raster=some/file.tiff` which imports (r.import) a raster file (same for vector and similarly for export).&lt;br /&gt;
** Add `--link-raster=some/file.tiff` which links (r.external) a raster file (same for vector and similarly for r.external.out).&lt;br /&gt;
&lt;br /&gt;
Current state:&lt;br /&gt;
&lt;br /&gt;
 # Reveals the existing subcommands&lt;br /&gt;
 PYTHONPATH=$(grass --config python-path) python -m grass.app --help&lt;br /&gt;
 # Allows running subset of commands&lt;br /&gt;
 grass run --help&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
=== STAC (SpatioTemporal Asset Catalog) Integration ===&lt;br /&gt;
&lt;br /&gt;
Create new import and export capabilities for GRASS which allow users to easily ingest data from STAC catalogs and export locations and mapsets as STAC specs for data discovery within STAC browsers. &lt;br /&gt;
&lt;br /&gt;
* Requirements: familiar with python, STAC specs&lt;br /&gt;
* Mentor: Corey White&lt;br /&gt;
* Co-mentor: Vaclav Petras, Anna Petrasova&lt;br /&gt;
* Project length: Large (350 hours)&lt;br /&gt;
* Rating: medium&lt;br /&gt;
* Expected Outcomes: completion of t.in.stac and t.out.stac&lt;br /&gt;
* Test of skills:&lt;br /&gt;
** suggest or implement solution for implementing t.out.stac using the prototype STAC spec https://github.com/tomorrownow/grass-stac-extension &lt;br /&gt;
** suggest/implement solution for completing https://github.com/OSGeo/grass-addons/pull/802&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== GUI: Add space-time datasets support in Data Catalog ===&lt;br /&gt;
[[File:GUI_data_tab.png|400px|thumb|right|Data catalog]]&lt;br /&gt;
Currently GRASS Data Catalog shows only raster and vector maps. The goal of this project is to add support for space-time datasets. It is mainly space-time raster datasets. In the next phase of the project support for other types of space-time datasets (vector and 3D raster) could be added. Besides displaying space-time datasets in the layer tree, it is also about adding the equivalent functionality currently available for raster and vector layers from the context menu. &lt;br /&gt;
&lt;br /&gt;
* Requirements: familiar with Python&lt;br /&gt;
* Project length: Large (350 hours)&lt;br /&gt;
* Mentor: Martin Landa&lt;br /&gt;
* Co-mentor: Anna Petrasova&lt;br /&gt;
* Proposed by: Martin Landa&lt;br /&gt;
* Rating: medium&lt;br /&gt;
* Expected Outcomes:  175 hours basic support for space-time raster datasets; 350 extended support also for other space-time datasets types (vector, 3D raster)&lt;br /&gt;
* Test of skills:&lt;br /&gt;
** suggest/implement solution for completing https://github.com/OSGeo/grass/issues/2599&lt;br /&gt;
&lt;br /&gt;
=== Searchable metadata in Space Time Datasets ===&lt;br /&gt;
The temporal framework in GRASS was initially developed almost 15 years ago. Spatio-temporal data has become more widely available since then and new standards emerged like e.g. ''[https://docs.ogc.org/cs/25-004/25-004.html STAC]'' with ''[https://github.com/stac-extensions/stac-extensions.github.io extensions]'', or the ''[https://cfconventions.org/ CF-conventions]''. The aim of this project is to extend the metadata model in the temporal framework to improve discoverability of map datasets registered in TGIS and to allow users to embed extended metadata with the registered maps in a Space Time Dataset in a searchable way. Ideally, the new model is able to account for the standards mentioned above.&lt;br /&gt;
 &lt;br /&gt;
See also: https://github.com/OSGeo/grass/issues/1938&lt;br /&gt;
&lt;br /&gt;
* Requirements: Python, SQL, JSON&lt;br /&gt;
* Project length: Large (350 hours)&lt;br /&gt;
* Mentor: Stefan Blumentrath&lt;br /&gt;
* Co-mentor: ???&lt;br /&gt;
* Proposed by: Stefan Blumentrath&lt;br /&gt;
* Rating: medium&lt;br /&gt;
* Expected Outcomes:&lt;br /&gt;
** an updated TGIS database model (version 4) that:&lt;br /&gt;
*** is oriented on relevant metadata standards (STAC, CF-Convention, ...)&lt;br /&gt;
*** allows to use metadata in temporal_where to select relevant elements of Space time datasets&lt;br /&gt;
** updated tool to create space time datasets (t.create) in the TGIS database with extended metadata&lt;br /&gt;
** updated tool to register map datasets (t.register) in the TGIS database with extended metadata&lt;br /&gt;
** Conversion tool for database Upgrades (v3 to v4)&lt;br /&gt;
** a new tool to update / modify metadata in the TGIS database&lt;br /&gt;
** Storage of timeseries metadata for both C-based and temporal Tools&lt;br /&gt;
&lt;br /&gt;
* Test of skills (e.g.):&lt;br /&gt;
** address one or more sub-tasks from https://github.com/OSGeo/grass/issues/3427 (add append-mode to selected new tool(s))&lt;br /&gt;
** suggest/implement solution for https://github.com/OSGeo/grass/issues/3394 (more complex task)&lt;br /&gt;
** suggest/implement solution for https://github.com/OSGeo/grass/issues/7041&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Add {your research idea} to GRASS ===&lt;br /&gt;
&lt;br /&gt;
* In general, you can propose any topic, but you can specifically propose integrating your research or research idea into GRASS.&lt;br /&gt;
* Requirements:&lt;br /&gt;
** Language:&lt;br /&gt;
*** Depends on the project, often Python, sometimes C.&lt;br /&gt;
*** Adding your latest ecological analysis &lt;br /&gt;
** Proposal:&lt;br /&gt;
*** Discuss relevance to GRASS.&lt;br /&gt;
*** Describe technical steps needed for integration.&lt;br /&gt;
*** Describe whether it is an addition of a tool (module) or a change in one of the libraries. If it is a tool, specify if it should be included in the core grass repository or in grass-addons repository and why.&lt;br /&gt;
*** Specify what research was done and what needs to be accomplished in order to have usable product at the end of summer.&lt;br /&gt;
*** Specify who will provide the research expertise.&lt;br /&gt;
* Project length: Large (350 hours)&lt;br /&gt;
* Rating: from low to hard&lt;br /&gt;
* Mentors:&lt;br /&gt;
** GRASS project will provide technical mentors, but it is up to the applicant to ensure the research part is mentored well. An exception may be granted to applicants which can demonstrate that the research is finished or that they have enough expertise themselves.&lt;br /&gt;
** Possible technical mentors: Vaclav Petras, Anna Petrasova&lt;br /&gt;
** Research mentors: Bring in an expert from your field, e.g., your academic advisor or project principal investigator (if needed).&lt;br /&gt;
* Proposed by: Vaclav Petras&lt;br /&gt;
* Expected outcome: Working feature which is integrated and merged at the end of the project.&lt;br /&gt;
* Test and training tasks:&lt;br /&gt;
** Create a test in Python for an existing tool in the grass-addons repository or in the core grass repository.&lt;br /&gt;
&lt;br /&gt;
=== Title of idea ===&lt;br /&gt;
&lt;br /&gt;
Description here&lt;br /&gt;
&lt;br /&gt;
* Requirements:&lt;br /&gt;
* Project length: (175 or 350 hours) &lt;br /&gt;
* Mentor: &lt;br /&gt;
* Proposed by: &lt;br /&gt;
* Rating: &lt;br /&gt;
* Expected Outcomes:  &lt;br /&gt;
* Test of skills: &lt;br /&gt;
* Other:&lt;br /&gt;
&lt;br /&gt;
== Tips for students ==&lt;br /&gt;
* Follow official [https://github.com/numfocus/gsoc/blob/master/CONTRIBUTING-contributors.md NumFOCUS guidelines].&lt;br /&gt;
* Include &amp;quot;GRASS&amp;quot; in the title of our idea to easily distinguish ideas and projects inside NumFOCUS.&lt;br /&gt;
* If you have your own ideas we encourage you to propose them. Explain them on the [https://discourse.osgeo.org/c/grass/developer/61 on our Discourse].&lt;br /&gt;
* Follow some good practices in your ideas and proposals:&lt;br /&gt;
** Stress why the project would be useful.&lt;br /&gt;
** Show that you know how you will proceed. That is, make sure that you can demonstrate that the proposal is feasible in the given time frame.&lt;br /&gt;
** Be specific in the implementation (or at least as specific as you can).&lt;br /&gt;
** Explain what the final product will look like and how it will work. You can add drawings or mock-ups.&lt;br /&gt;
** Explain how the idea relates to existing GRASS functions, features, and needs.&lt;br /&gt;
** Do not include steps such as &amp;quot;install GRASS&amp;quot;, &amp;quot;compile GRASS libraries (on my machine)&amp;quot;, &amp;quot;read about the API&amp;quot;. You should do this before applying to GSoC.&lt;br /&gt;
* Compile GRASS from source and prepare environment for development:&lt;br /&gt;
** Read [https://github.com/OSGeo/grass/blob/main/CONTRIBUTING.md CONTRIBUTING file].&lt;br /&gt;
* Prove your worth by being active on the [https://discourse.osgeo.org/c/grass/developer/61 GRASS Discourse] or other channels ([https://github.com/OSGeo/grass/discussions GitHub Discussions], fix some [https://github.com/OSGeo/grass/issues bugs], and/or implement some (smaller) features, or write some (simpler) GRASS module, and post it to mailing list. There's no better way to demonstrate your willingness and abilities. Do this before start you apply to GSoC. &lt;br /&gt;
* Also note that fixing existing bugs and/or implementing enhancements will be a part of student evaluation.&lt;br /&gt;
&lt;br /&gt;
{{GSoC}}&lt;/div&gt;</summary>
		<author><name>Kaushikraja</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2026_Parallelizing_r.proj_and_Raster_Processing_Modules_in_GRASS&amp;diff=28869</id>
		<title>GRASS GSoC 2026 Parallelizing r.proj and Raster Processing Modules in GRASS</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2026_Parallelizing_r.proj_and_Raster_Processing_Modules_in_GRASS&amp;diff=28869"/>
		<updated>2026-05-07T06:30:02Z</updated>

		<summary type="html">&lt;p&gt;Kaushikraja: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Kaushik Raja&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://numfocus.org/ NumFOCUS]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Huidae Cho, Anna Petrasova, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/krcoder123/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''LinkedIn Profile''' || [https://www.linkedin.com/in/kaushikrraja/ View LinkedIn]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
r.proj is one of the most commonly used modules in GRASS, reprojecting raster maps between coordinate systems. Despite running on modern multi-core hardware, it is entirely single-threaded, leaving most CPU cores idle and making large raster reprojections slower than necessary.&lt;br /&gt;
&lt;br /&gt;
This project parallelizes r.proj using OpenMP. The main obstacles are GRASS's readcell tile cache, and the PROJ library. The readcell tile cache is not thread-safe and the PROJ library requires each thread to have its own context. The solution is a two-path memory architecture: a fast RAM buffer for maps that fit in memory, and a thread-local tile cache for larger maps. The project will also resolve issue #5776, which makes the progress reporting function G_percent unsafe in parallel code.&lt;br /&gt;
&lt;br /&gt;
The same RAM preload pattern applies directly to r.param.scale, a terrain analysis module whose sequential sliding buffer currently prevents row-level parallelism. r.geomorphon will also be parallelized as a third module. Together, these changes establish a reusable parallelization framework for future GRASS contributors.&lt;br /&gt;
&lt;br /&gt;
== Project Scope ==&lt;br /&gt;
# Implement the two-path memory architecture for r.proj: RAM buffer for maps within the memory threshold, thread-local tile caches for larger maps&lt;br /&gt;
# Implement per-thread PJ_CONTEXT initialization for PROJ library thread safety&lt;br /&gt;
# Fix issue #5776: replace unsafe G_percent calls in parallel code with atomic counter and master-thread-only progress reporting&lt;br /&gt;
# Add a user-controlled memory threshold parameter&lt;br /&gt;
# Parallelize r.param.scale by replacing the sequential sliding buffer with a RAM preload pattern&lt;br /&gt;
# Parallelize r.geomorphon as a third module&lt;br /&gt;
# Write pixel parity regression tests and scalability benchmarks across multiple core counts&lt;br /&gt;
# Document all parallelized modules&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline !! Tasks !! Status&lt;br /&gt;
|-&lt;br /&gt;
| Community Bonding Period&lt;br /&gt;
| May 1 - May 25&lt;br /&gt;
|&lt;br /&gt;
# Thread-safety audit of gprojects library calls&lt;br /&gt;
# Study readcell.c internals&lt;br /&gt;
# Set up benchmarking infrastructure&lt;br /&gt;
# Source audit of remaining modules&lt;br /&gt;
# Finalize Linux dev environment&lt;br /&gt;
# Confirm benchmarks are reproducible&lt;br /&gt;
# Agree on final implementation details with mentors&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;8&amp;quot; | Official Coding Period&lt;br /&gt;
| May 25 - June 8&lt;br /&gt;
|&lt;br /&gt;
# Benchmark Path A vs Path B&lt;br /&gt;
# Wire HAVE_OPENMP into configure system&lt;br /&gt;
# Implement per-thread PJ_CONTEXT&lt;br /&gt;
# Implement user-controlled memory threshold&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| June 9 - June 22&lt;br /&gt;
|&lt;br /&gt;
# Indexed row output buffer&lt;br /&gt;
# Fix G_percent thread safety (issue #5776)&lt;br /&gt;
# Pixel parity regression tests for nearest-neighbor&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| June 23 - July 6&lt;br /&gt;
|&lt;br /&gt;
# Thread-local cache allocation&lt;br /&gt;
# Two-path decision logic&lt;br /&gt;
# r.proj complete&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | July 7 - July 11&lt;br /&gt;
|&lt;br /&gt;
# Submit midterm evaluation&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| July 7 - July 20&lt;br /&gt;
|&lt;br /&gt;
# Test Path B on large maps&lt;br /&gt;
# Parallelize bilinear, bicubic, lanczos kernels&lt;br /&gt;
# Scalability benchmarks (1/2/4/8/16 cores)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| July 21 - August 3&lt;br /&gt;
|&lt;br /&gt;
# Production-quality r.param.scale&lt;br /&gt;
# Regression tests for all method types&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| August 4 - August 11&lt;br /&gt;
|&lt;br /&gt;
# r.geomorphon parallelization&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| August 12 - August 18&lt;br /&gt;
|&lt;br /&gt;
# Pre-commit fixes, manual pages, final PR polish&lt;br /&gt;
# Blog post for OSGeo Planet&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Final Week&lt;br /&gt;
| August 19 - August 26&lt;br /&gt;
|&lt;br /&gt;
# Submit final evaluation&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reports ==&lt;br /&gt;
=== Community Bonding Period ===&lt;br /&gt;
&lt;br /&gt;
=== Coding Period ===&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7185 PR #7185] - r.proj OpenMP parallelization proof of concept&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7236 PR #7236] - r.param.scale parallelization proof of concept&lt;/div&gt;</summary>
		<author><name>Kaushikraja</name></author>
	</entry>
	<entry>
		<id>https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2026_Parallelizing_r.proj_and_Raster_Processing_Modules_in_GRASS&amp;diff=28868</id>
		<title>GRASS GSoC 2026 Parallelizing r.proj and Raster Processing Modules in GRASS</title>
		<link rel="alternate" type="text/html" href="https://grasswiki.osgeo.org/w/index.php?title=GRASS_GSoC_2026_Parallelizing_r.proj_and_Raster_Processing_Modules_in_GRASS&amp;diff=28868"/>
		<updated>2026-05-07T06:17:10Z</updated>

		<summary type="html">&lt;p&gt;Kaushikraja: Initial GSoC 2026 project page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| '''Student Name''' || Kaushik Raja&lt;br /&gt;
|-&lt;br /&gt;
| '''Organization''' || [https://numfocus.org/ NumFOCUS]&lt;br /&gt;
|-&lt;br /&gt;
| '''Mentor Name''' || Huidae Cho, Anna Petrasova, Vaclav Petras&lt;br /&gt;
|-&lt;br /&gt;
| '''GitHub Fork''' || [https://github.com/krcoder123/grass View Repo]&lt;br /&gt;
|-&lt;br /&gt;
| '''LinkedIn Profile''' || [https://www.linkedin.com/in/kaushikrraja/]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Abstract ==&lt;br /&gt;
r.proj is one of the most commonly used modules in GRASS, reprojecting raster maps between coordinate systems. Despite running on modern multi-core hardware, it is entirely single-threaded, leaving most CPU cores idle and making large raster reprojections slower than necessary.&lt;br /&gt;
&lt;br /&gt;
This project parallelizes r.proj using OpenMP. The main obstacles are GRASS's readcell tile cache, and the PROJ library. The readcell tile cache is not thread-safe and the PROJ library requires each thread to have its own context. The solution is a two-path memory architecture: a fast RAM buffer for maps that fit in memory, and a thread-local tile cache for larger maps. The project will also resolve issue #5776, which makes the progress reporting function G_percent unsafe in parallel code.&lt;br /&gt;
&lt;br /&gt;
The same RAM preload pattern applies directly to r.param.scale, a terrain analysis module whose sequential sliding buffer currently prevents row-level parallelism. r.geomorphon will also be parallelized as a third module. Together, these changes establish a reusable parallelization framework for future GRASS contributors.&lt;br /&gt;
&lt;br /&gt;
== Project Scope ==&lt;br /&gt;
# Implement the two-path memory architecture for r.proj: RAM buffer for maps within the memory threshold, thread-local tile caches for larger maps&lt;br /&gt;
# Implement per-thread PJ_CONTEXT initialization for PROJ library thread safety&lt;br /&gt;
# Fix issue #5776: replace unsafe G_percent calls in parallel code with atomic counter and master-thread-only progress reporting&lt;br /&gt;
# Add a user-controlled memory threshold parameter&lt;br /&gt;
# Parallelize r.param.scale by replacing the sequential sliding buffer with a RAM preload pattern&lt;br /&gt;
# Parallelize r.geomorphon as a third module&lt;br /&gt;
# Write pixel parity regression tests and scalability benchmarks across multiple core counts&lt;br /&gt;
# Document all parallelized modules&lt;br /&gt;
&lt;br /&gt;
== Timeline ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Period !! Timeline !! Tasks !! Status&lt;br /&gt;
|-&lt;br /&gt;
| Community Bonding Period&lt;br /&gt;
| May 1 - May 25&lt;br /&gt;
|&lt;br /&gt;
# Thread-safety audit of gprojects library calls&lt;br /&gt;
# Study readcell.c internals&lt;br /&gt;
# Set up benchmarking infrastructure&lt;br /&gt;
# Source audit of remaining modules&lt;br /&gt;
# Finalize Linux dev environment&lt;br /&gt;
# Confirm benchmarks are reproducible&lt;br /&gt;
# Agree on final implementation details with mentors&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;6&amp;quot; | Official Coding Period&lt;br /&gt;
|-&lt;br /&gt;
| May 25 - June 8&lt;br /&gt;
|&lt;br /&gt;
# Benchmark Path A vs Path B&lt;br /&gt;
# Wire HAVE_OPENMP into configure system&lt;br /&gt;
# Implement per-thread PJ_CONTEXT&lt;br /&gt;
# Implement user-controlled memory threshold&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| June 9 - June 22&lt;br /&gt;
|&lt;br /&gt;
# Indexed row output buffer&lt;br /&gt;
# Fix G_percent thread safety (issue #5776)&lt;br /&gt;
# Pixel parity regression tests for nearest-neighbor&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| June 23 - July 6&lt;br /&gt;
|&lt;br /&gt;
# Thread-local cache allocation&lt;br /&gt;
# Two-path decision logic&lt;br /&gt;
# r.proj complete&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; | Midterm Evaluation&lt;br /&gt;
| July 7 - July 11&lt;br /&gt;
|&lt;br /&gt;
# Submit midterm evaluation&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| July 7 - July 20&lt;br /&gt;
|&lt;br /&gt;
# Test Path B on large maps&lt;br /&gt;
# Parallelize bilinear, bicubic, lanczos kernels&lt;br /&gt;
# Scalability benchmarks (1/2/4/8/16 cores)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| July 21 - August 3&lt;br /&gt;
|&lt;br /&gt;
# Production-quality r.param.scale&lt;br /&gt;
# Regression tests for all method types&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| August 4 - August 11&lt;br /&gt;
|&lt;br /&gt;
# r.geomorphon parallelization&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| August 12 - August 18&lt;br /&gt;
|&lt;br /&gt;
# Pre-commit fixes, manual pages, final PR polish&lt;br /&gt;
# Blog post for OSGeo Planet&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Final Week&lt;br /&gt;
| August 19 - August 26&lt;br /&gt;
|&lt;br /&gt;
# Submit final evaluation&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Reports ==&lt;br /&gt;
=== Community Bonding Period ===&lt;br /&gt;
&lt;br /&gt;
=== Coding Period ===&lt;br /&gt;
&lt;br /&gt;
== Log of Pull Requests ==&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7185 PR #7185] - r.proj OpenMP parallelization proof of concept&lt;br /&gt;
* [https://github.com/OSGeo/grass/pull/7236 PR #7236] - r.param.scale parallelization proof of concept&lt;/div&gt;</summary>
		<author><name>Kaushikraja</name></author>
	</entry>
</feed>