Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

The future of NCL in the ESMValTool #1057

Open
mattiarighi opened this issue May 8, 2019 · 31 comments
Open

The future of NCL in the ESMValTool #1057

mattiarighi opened this issue May 8, 2019 · 31 comments

Comments

@mattiarighi
Copy link
Contributor

The discussion about the future of NCL support in the ESMValTool has come up quite frequently in the last weeks in various GitHub issues here.

The reason behind this discussion is (should be) well known: NCAR has decided to stop the development of NCL, which has been put into maintenance mode. Graphics routine have been translated to Python and are available via the PyNGL library. This means that NCL is still available and will be available "for the foreseeable future" (as NCAR itself states in its letter to users), but the transition to Python is recommended.

Some general considerations to trigger the discussion:

  • stopping NCL support in the ESMValTool right now is not realistic and the upcoming v2.0 will still need to support NCL (for the diagnostics and the CMORizers).
  • external diagnostic packages that are (or are going to be) implemented in the ESMValTool and are written in NCL still exist (e.g., CVDP).
  • several (how many?) ESMValTool developers can only contribute NCL diagnostics and may not want to contribute code in another language or may not have the resources to do that. A survey across all ESMValTool users and developers might help us to get a better feeling on this.
  • according to NCAR: "we want to stress that NCL is not going away. NCL users will be able to download NCL and execute their scripts for the foreseeable future". It would be good to get in touch with the NCL development team to better understand the actual perspectives. Are we talking about months or years? What happens in case of NCL installation issues on new systems? Would support still be provided in such cases? Etc.
  • after the release of v2.0, we should start recommending our NCL develoeprs to switch to Python, maybe using the aforementioned PyNGL package to make this transition smooth (a transition guide by DKRZ is also available).
  • based on my experience in coordinating the v2.0 development, the coding quality standards of the ESMValTool require a non negligible amount of additional resources (for both developers and reviewers), which might discourage the newbies to switch from NCL to python.
  • we should be aware that by reducing the multi-language support, we face the risk of losing a (significant?) part of the ESMValTool community.

@ESMValGroup/esmvaltool-coreteam
@zklaus @hb326 @LisaBock @ruthlorenz (please tag other non-core members who might be interested in this topic).

@bouweandela
Copy link
Member

external diagnostic packages that are (or are going to be) implemented in the ESMValTool and are written in NCL still exist (e.g., CVDP).

A bit of good news here is that they are translating this particular example to Python as a pilot, see: NCAR/ncl#64 (comment)

@bouweandela
Copy link
Member

From the roadmap it also looks like there will be training available.

@zklaus
Copy link

zklaus commented May 9, 2019

Thanks for picking this up, @mattiarighi !

stopping NCL support in the ESMValTool right now is not realistic and the upcoming v2.0 will still need to support NCL (for the diagnostics and the CMORizers).

I completely agree that this is a process, cannot happen over night, and should have (almost) zero bearing on v2.0 (the exception just being that, all else being equal, I wouldn't prefer NCL for new developments).
I think your suggestion below for recommendations to developers is a good thing, more on that below.

external diagnostic packages that are (or are going to be) implemented in the ESMValTool and are written in NCL still exist (e.g., CVDP).

@bouweandela has that covered. I think therefore CVDP isn't a blocker, but maybe we should collect all such packages that we have in some place (extra ticket, wiki?)?

several (how many?) ESMValTool developers can only contribute NCL diagnostics and may not want to contribute code in another language or may not have the resources to do that. A survey across all ESMValTool users and developers might help us to get a better feeling on this.

That is unfortunate, but adding substantial new NCL code seems to go in the wrong direction. In most cases those developers will have to adapt to the changing environment for reasons entirely outside of ESMValTool.

according to NCAR: "we want to stress that NCL is not going away. NCL users will be able to download NCL and execute their scripts for the foreseeable future". It would be good to get in touch with the NCL development team to better understand the actual perspectives. Are we talking about months or years? What happens in case of NCL installation issues on new systems? Would support still be provided in such cases? Etc.

👍 Though of course, as you know, intentions aside, the limits will always be funding and man-power. Usually, few people with the necessary skill are eager to maintain things after a few years without the mandate to change them.

after the release of v2.0, we should start recommending our NCL develoeprs to switch to Python, maybe using the aforementioned PyNGL package to make this transition smooth (a transition guide by DKRZ is also available).

To formalize this: With the release after v2.0 or with v2.0 itself, we should formally deprecate it. Imho, we can already now give the general recommendation to rather prefer python, making it clear that NCL contributions are still acceptable for now. But if somebody is on the fence on what to choose, they should go for python.

based on my experience in coordinating the v2.0 development, the coding quality standards of the ESMValTool require a non negligible amount of additional resources (for both developers and reviewers), which might discourage the newbies to switch from NCL to python.

Hm, this shouldn't be specific to python. If it seems that the burden on python contributions is higher than on other languages, we should rather see how we can achieve the same high standards in those languages. At the moment we are rather lenient there, probably for lack of automatic qa. As an example, we know that, no matter the language, functions should be short. I find around 45 lines as an upper limit a good guide rule. If in python you make much longer functions, you are likely to get a complexity warning or too-many-local-variables from our code checkers. In NCL this malpractice is still wide-spread.

Bottom line: Quality standards should be equally high for all languages, the effort comparable.

we should be aware that by reducing the multi-language support, we face the risk of losing a (significant?) part of the ESMValTool community.

Interesting question. Looking at the list of contributors (here for the private repository for those who have access), my impression is that most would be comfortable with python. What do you think? Of course, this is just a personal impression. To get a better picture we could do a survey, best limited to those having contributed at least one commit, or try automatic numbercrunching, eg see what fraction of lines added per person where in NCL. I think a survey can be done quickly with (eg) google forms; number crunching would take more effort.

It would be very interesting to hear from NCL developers on this.

@mattiarighi mattiarighi pinned this issue May 9, 2019
@valeriupredoi
Copy link
Contributor

I got 0 NCL lines 🤣

So this will be easier to discuss when we will have split ESMValTool (at least) into core and diagnostics. The core is and will be Python; the diagnostics are a bit more relaxed and the shepherding of the scientists developing them towards Python (and away from NCL) can be done in a bit more of a relxaed way rather than at gun point if it was for the core

@mattiarighi
Copy link
Contributor Author

DKRZ is still organizing NCL workshops for the users, so they are probably not planning to retire NCL support soon.

@jvegreg
Copy link
Contributor

jvegreg commented May 30, 2019

DKRZ is still organizing NCL workshops for the users, so they are probably not planning to retire NCL support soon.

Just remember that the end of python 2 support seemed to be far far away

@valeriupredoi
Copy link
Contributor

DKRZ is still organizing NCL workshops for the users, so they are probably not planning to retire NCL support soon.

Just remember that the end of python 2 support seemed to be far far away

I am working with Met Office software which is (as expected) Python2 and everytime I try and update Py2 deps I get warnings about the looming dat of January 1st 2020 😁

@bascrezee bascrezee unpinned this issue Jul 23, 2019
@mattiarighi
Copy link
Contributor Author

There are some news about the future of NCL:

http://www.ncl.ucar.edu/Document/Pivot_to_Python/september_2019_update.shtml

"To summarize the status of NCL, the project is "feature frozen". CISL does not have plans at this time to add new features to NCL. We will, however, prepare maintenance releases containing critical bug fixes and user-contributed code on an infrequent basis. Thus, there is no reason for members of the community with substantial investments in NCL to consider porting their NCL code to Python (unless you want to take advantage of the improved scalability afforded by our use of Dask)."

@bouweandela
Copy link
Member

A new update from 11 November 2020 by the NCL authors:

In January of 2019 NCAR announced plans to transition away from the NCL language and focus efforts on providing geosciences analysis tools that were based on the Python Scientific Ecosystem. Furthermore, we announced that NCL would be put into “maintenance mode”, and due to limited staffing resources, would no longer be actively developed by NCAR.

I wanted to take this opportunity to elaborate further on what “maintenance mode” means for the community, and hopefully relieve anxiety that some may be feeling. Maintenance mode means that NCAR will not add new features to the NCL language or function library, nor will we fix sub-critical software defects. However, NCAR will for as long as we are reasonably able and there is a sufficient demand - put out periodic bug-fix releases and ensure NCL continues to build on currently supported platforms. In addition, we will do our best to timely address installation questions that are related to the Conda package management system. Furthermore, as part of our embracement of Open Development practices, we will facilitate community contributions of all types (e.g. bug fixes, new functions, etc.). Stay tuned for more information on Open Development.

I fully recognize that many in the community have substantial investments in NCL scripts and I do not expect, nor would I advise, translating thousands of lines of NCL code into Python. That said, I would caution against making substantial new investments in workflows based on NCL. To repeat, it is our intent to ensure that existing NCL scripts will continue to run for as long as reasonably possible, but NCAR’s priority for the future will be on modern Python tools.

@zklaus
Copy link

zklaus commented Sep 27, 2021

NCL in conda-forge has been a bit neglected for a while. This means that it has not been (re-)build against more recent versions of the usual libraries (libgdal, libnetcdf, proj,...) which makes it hard for us to install recent versions that are required by other parts of the ESMValTool eco system.

I have spent a good chunk of the last week and the beginning of this week trying to improve the situation, but this is a real drain on resources and it is not clear how long we can keep this up.

@mattiarighi
Copy link
Contributor Author

Related to this, you might be interested in the python GeoCAT package, which translates many of the original NCL function in Python.

It could be a way to encourage NCL users to move to Python...

@zklaus
Copy link

zklaus commented Mar 14, 2022

I think it really is time to phase out NCL. The conda-forge build is broken again and it is clear now that NCAR is no longer performing maintenance. The existing builds will continue to work for a while and we can make some effort to keep the car running, but sooner rather than later this becomes too much of a burden.

I propose that we develop a concrete plan for the removal of NCL. Something along the lines of

  1. Forbid introduction of new NCL code and cleanup documentation to reflect that
  2. Cleanout any and all open PRs with NCL
  3. Form an expert group of NCLers to convert or remove existing NCL code

@ESMValGroup/esmvaltool-coreteam, @ESMValGroup/esmvaltool-developmentteam, thoughts?

@katjaweigel
Copy link
Contributor

katjaweigel commented Mar 14, 2022

There are NCL PRs (e.g. #2156, which should be merged because it was described in one of the ESMValTool paper) which have been there kind of forever and I'm afraid nobody has the resources to convert that all to python.
There are probably more, where papers are published but the code is not yet in the ESMValTool main?
On the other hand it is probably never a good time for everybody to finally drop NCL but gets more complicated to keep it running the longer we wait.

@valeriupredoi
Copy link
Contributor

valeriupredoi commented Mar 14, 2022

Hi @zklaus I fully support we migrate from NCL to Python soon, but that is a very resource-intensive task, who gonna do it? Points 1 and 2 are most welcome, afraid 3 is needed, but much harder than it sounds

The conda-forge build is broken again

where do you see that? GA and feedstock tests still passing...

@zklaus
Copy link

zklaus commented Mar 14, 2022

Hi @zklaus I fully support we migrate from NCL to Python soon, but that is a very resource-intensive task, who gonna do it?

TBD. But one thing is crystal clear: It will become infeasible to have NCL as a conda-forge dependency. The only question is when.

The conda-forge build is broken again
where do you see that?

There are two PRs outstanding to rebuild for new versions of Proj and HDF. Both are failing. If they are not fixed, installing NCL from conda-forge will block updating Proj and HDF, which in turn will prevent the installation of dependencies like netcdf and iris when they depend on those. This is some time in the future, for sure, but as you note, we will need some time.

GA and feedstock tests still passing...

Not sure what you are referring to: Tests in this repo and the core one? Our own feedstock? The NCL feedstock?

@valeriupredoi
Copy link
Contributor

There are two PRs outstanding to rebuild for new versions of Proj and HDF. Both are failing. If they are not fixed, installing NCL from conda-forge will block updating Proj and HDF, which in turn will prevent the installation of dependencies like netcdf and iris when they depend on those. This is some time in the future, for sure, but as you note, we will need some time.

Gotcha! I was suspecting it was one of the big deps

Yeah I was referring to our esmvaltool GA tests (which obv don't contain the pkg build test no more) and the esmvaltool feedstock tests

@valeriupredoi
Copy link
Contributor

cheers for raising this BTW, Klaus! It's getting very tight indeed

@bouweandela
Copy link
Member

bouweandela commented Mar 14, 2022

This might be a good point for discussion in the upcoming workshop https://github.com/ESMValGroup/ESMValTool/discussions/2588. At the moment, slightly less than half of all diagnostic code is NCL, but maybe Python and/or R code is just more compact. It seems unlikely that there will ever be enough time to translate all (or even many) NCL diagnostics to Python. Maybe the @ESMValGroup/scientific-lead-development-team could think about which diagnostics are required as a minimum for the tool to remain interesting from a scientific point of view?

I do agree that it would be good to stop introducing new NCL diagnostics in the tool, as seems a waste of time in the longer run.

If installation from conda really becomes a problem and dropping support for NCL is just not feasible from a scientific point of view, an alternative to completely dropping support for NCL would be to just no longer install NCL from conda. The installation of the NCL interpreter would then be left to the users. They might be able to install the NCL interpreter

  1. using their usual package manager e.g. apt get install ncl-ncarg
  2. module load ncl it if they're on a cluster
  3. install it in a separate conda environment and link just the interpreter like we used to do for synda when it was still on Python 2
  4. run the NCL interpreter from a Docker or Singularity container

@axel-lauer
Copy link
Contributor

I am not really sure I fully understand why some people are so eager to get rid of NCL. Even if installation from conda gets too difficult to maintain, there are other options as @bouweandela pointed out.

At the moment, 17 recipes with about 100 diagnostic scripts are based on NCL. Among those are some of our flagship diagnostics such as IPCC AR5, SMPI and perfmetrics. I do not see any realistic possibility to convert so many diagnostics to Python. When transitioning from ESMValTool v1.1 to v2.0, a lot of diagnostics could not be converted because it was way beyond our resources (even though we had quite a few coding workshops). And that did not even involve changing the original programming language. Dropping NCL would change the ESMValTool significantly from what has been advertised over the last years and for this reason alone, I am strongly advising against such a step. In the end, it does not matter too much if people would have to install NCL on their own, the main point is that diagnostics such as IPCC AR5 are in and could (at least in theory) be used. That said, I also find it difficult to simply decide to trash the work of quite a few contributers over the last years just like that.

@remi-kazeroni
Copy link
Contributor

Note that flagship diagnostics will soon also include code used for IPCC AR6 (first PR in #2533). I think a majority of the ESMValTool produced figures for AR6 are based on NCL diagnostics (new ones but also already existing ones). I guess here as well, a translation of the diagnostics to Python is not feasible in practice... It would be quite unfortunate to continue advertising ESMValTool for the produced AR6 figures and at the same time not being able to merge the code to the main branch and not being able to use the Tool to reproduce these figures because support for NCL was completely dropped... I support the idea of considering alternative ways to install the NCL interpreter if such installation from conda becomes problematic.

@zklaus
Copy link

zklaus commented Mar 18, 2022

I think there is some misunderstanding. It certainly is not my intention to "trash" anybody's work. Quite the contrary, I will come back to that. But it is my assessment that NCL will become unavailable. That is not due to some weird behavior by conda-forge, but because NCL's code quality is not up to modern standards and because it depends on other libraries that are still developing and that we need to keep updated, such as Proj. As for alternate installation methods, note that they all will face similar issues as conda-forge. For apt, you can follow the bug trackers for the debian package and the ubuntu package (FTBFS means "fails to build from source"). Currently, DKRZ does not offer an NCL module on Levante, though they certainly may (be willing to) change that as Levante develops.

Even if things can be kept running, it will never be made to parallelize or updated to deal with CF 1.10 or UGRID, which means that we risk breaking another promise of ESMValTool. After all, the AR6 recipes (just as an example) are not interesting to produce the exact same figures from the exact same data---those are published---but rather because it is easy to add CMIP7 and CMIP8 models in there. Will NCL diagnostics be able to handle that? I doubt it.

Will all of this happen overnight? No. Within one year? Probably not. Two? Perhaps. Three? Probably.

Some of this may be mitigated by maintenance. However, NCAR's GeoCAT team does seem to take a rather hands-off approach to maintenance. Have a look at the NCL issue tracker and think whether you want to rely on that level of support. Also note, that the two packages touted at the time as a replacement and bridge to Python, PyNGL and PyNIO also have since been placed into "maintenance mode" and require patches just to make them compile. It seems currently the CI on the official NCL repo is not able to build NCL. Despite conda being the officially suggested mode of installation and the promise to make bugfix releases and keep the conda install working, you have to go back to May 2020 to find contributions from the NCL team to the conda build.

The community has tried to apply enough duct tape to hold things together. I myself have spent weeks to keep NCL and PyNGL running in the current conda-forge. We can keep this up for a bit longer, but I won't be doing that in 5 years.

What I am saying is: With NCL, we are on a train that is slowly falling apart. We still have time, let's salvage what we can by making a plan now. Let's not wait until it just disintegrates below us.

So returning to what I said at the top: I don't want to trash the work. I don't want to lose those diagnostics. That is precisely why we should think about how best to deal with them now. Then we will have some time and we will be able to preserve the most important diagnostics and recipes for use with CMIP7, 8, and beyond. Perhaps they will even acquire a few new tricks along the way.

@zklaus
Copy link

zklaus commented Mar 23, 2022

In case we need to contact NCL developers, the following is the complete list of users that have touched .ncl code in the ESMValTool repository. I have categorized them as possibly active, known retired (from ESMValTool), and technical (people that are not known as NCL developing scientists, but rather have been in contact due to housekeeping. I have erred on the side of counting people as active when I didn't know for sure, though likely not everyone on the active list is actually still active.

Edit: To clarify, this is git authors of ncl files currently in the main branch. It does not capture branches that are not integrated yet and it does also not capture possible authors/collaborators outside of git, which particularly means authors of ESMValTool version one diagnostics that have later been ported by someone else. This seems reasonable to me because those are old contributions and absent further involvement since then, we probably don't expect those contributors to resume maintenance of their code.

Possibly Active

  • Amarjiit Pandde
  • Axel Lauer
  • Bettina Gier
  • Birgit Hassler
  • Lisa Bock
  • Manuel Schlund
  • Ruth Lorenz
  • Sabrina Zechlau

Retired

  • Björn Brötz
  • Daniel Senftleben
  • Javier Vegas-Regidor
  • Mattia Righi

Technical

  • Bouwe Andela
  • Klaus Zimmermann
  • Valeriu Predoi

@katjaweigel
Copy link
Contributor

Although I'm not writing new software in NCL, I'm involved in pull requests containing NCL as a maintainer for a tool from @irenecionni (#2156) and there is a PR planned for things from the AR6 repository, where I build up on an existing NCL cmorizer. In the second case I maybe could convert it to python, for the PR #2156 I don't see that I, or @irenecionni would have the resources to change these diagnostics to python.

@Peter9192
Copy link
Contributor

We still have time, let's salvage what we can by making a plan now.

Could it be an interesting internship/MSc graduation project?

@remi-kazeroni
Copy link
Contributor

To clarify, this is git authors of ncl files currently in the main branch

Could you maybe also give estimates of how many NCL functions and lines of code we have in the main branch? It would give an idea of the effort to translate NCL code into Python given the number of persons listed above. But this would not count NCL code waiting to be merged in some PRs (e.g. #2156), or AR6 diagnostics... So this effort would certainly be larger than that.

@zklaus
Copy link

zklaus commented Mar 24, 2022

Here is the number of all non-empty non-comment lines of all ncl files in diag_scripts except for cvdp and shared:

number of lines diag_script
66 xco2_analysis/stat.ncl
72 examples/diagnostic.ncl
83 bock20jgr/corr_pattern.ncl
83 ipcc_ar5/ch09_fig09_6.ncl
96 carbon_ec/carbon_aux.ncl
96 perfmetrics/cycle_zonal.ncl
98 perfmetrics/cycle.ncl
100 perfmetrics/cycle_latlon.ncl
116 russell18jgr/russell18jgr-fig5.ncl
119 russell18jgr/russell18jgr-fig2.ncl
132 russell18jgr/russell18jgr-fig7h.ncl
157 carbon_cycle/two_variables.ncl
158 perfmetrics/zonal.ncl
158 russell18jgr/russell18jgr-polar.ncl
160 russell18jgr/russell18jgr-fig7i.ncl
165 mder/select_for_mder.ncl
171 perfmetrics/latlon.ncl
171 seaice/seaice_aux.ncl
173 ipcc_ar5/ch09_fig09_3.ncl
180 russell18jgr/russell18jgr-fig5g.ncl
199 carbon_ec/carbon_beta.ncl
202 seaice/seaice_trends.ncl
205 ipcc_ar5/ch12_map_diff_each_model_fig12-9.ncl
205 ipcc_ar5/ch12_plot_ts_line_mean_spread.ncl
208 austral_jet/asr.ncl
208 xco2_analysis/carbon_plots.ncl
210 russell18jgr/russell18jgr-fig3b.ncl
211 russell18jgr/russell18jgr-fig3b-2.ncl
220 russell18jgr/russell18jgr-fig9a.ncl
225 carbon_ec/carbon_constraint.ncl
225 russell18jgr/russell18jgr-fig9c.ncl
232 russell18jgr/russell18jgr-fig9b.ncl
233 bock20jgr/model_bias.ncl
235 carbon_ec/carbon_gammaHist.ncl
237 clouds/clouds_interannual.ncl
251 seaice/seaice_tsline.ncl
256 xco2_analysis/delta_T.ncl
262 bock20jgr/tsline_collect.ncl
267 ipcc_ar5/ch12_calc_map_diff_scaleT_mmm_stipp.ncl
268 eyring06jgr/eyring06jgr_fig01.ncl
272 eyring13jgr/eyring13jgr_fig12.ncl
273 clouds/clouds_bias.ncl
274 perfmetrics/main.ncl
276 russell18jgr/russell18jgr-fig4.ncl
280 eyring06jgr/eyring06jgr_fig05b.ncl
282 xco2_analysis/sat_masks.ncl
284 seaice/seaice_ecs.ncl
288 ipcc_ar5/ch09_fig09_6_collect.ncl
291 eyring06jgr/eyring06jgr_fig05a.ncl
296 xco2_analysis/panel_plots.ncl
316 ipcc_ar5/ch12_calc_IAV_for_stippandhatch.ncl
317 ipcc_ar5/ch12_plot_zonal_diff_mmm_stipp.ncl
324 mder/absolute_correlation.ncl
329 bock20jgr/corr_pattern_collect.ncl
337 ipcc_ar5/tsline.ncl
346 ipcc_ar5/ch12_plot_map_diff_mmm_stipp.ncl
354 carbon_ec/carbon_co2_cycle.ncl
358 carbon_cycle/mvi.ncl
360 perfmetrics/collect.ncl
365 seaice/seaice_yod.ncl
366 ipcc_ar5/ch12_calc_map_diff_mmm_stippandhatch.ncl
376 ipcc_ar5/ch12_calc_zonal_cont_diff_mmm_stippandhatch.ncl
379 carbon_ec/carbon_tsline.ncl
388 xco2_analysis/station_comparison.ncl
398 bock20jgr/tsline.ncl
398 eyring06jgr/eyring06jgr_fig15.ncl
411 carbon_cycle/main.ncl
433 emergent_constraints/snowalbedo.ncl
433 ipcc_ar5/ch12_ts_line_mean_spread.ncl
471 clouds/clouds_ipcc.ncl
472 xco2_analysis/global_maps.ncl
480 ipcc_ar5/ch12_snw_area_change_fig12-32.ncl
499 xco2_analysis/main.ncl
532 clouds/clouds_taylor.ncl
535 russell18jgr/russell18jgr-fig6b.ncl
550 russell18jgr/russell18jgr-fig6a.ncl
563 austral_jet/main.ncl
852 mder/regression_stepwise.ncl
901 clouds/clouds.ncl
1243 emergent_constraints/ecs_scatter.ncl
24015 grand total

@phillips-ad
Copy link

phillips-ad commented Apr 1, 2022

A brief introduction: I am the author of the CVDP, and for many years served as a scientific advisor to the NCL Development Team. Since the dissolution of the NCL Dev Team and the formation of the GeoCAT Dev Team, I no longer am directly involved with NCL/GeoCAT development efforts, and do not speak for GeoCAT. However, I have been following this discussion for a while, and thought it was important to speak up, but only after I discussed the situation with the GeoCAT Team lead @erogluorhan.

Since the dissolution of the NCL Dev Team, I have been assured many times by NCAR/GeoCAT leadership that NCL builds will be supported as long as the community asks for it. There is no doubt at the present time that the community (beyond ESMValTool) still wants supported builds. @erogluorhan has stated providing stable builds via conda is the number one NCL-related priority for the GeoCAT team. Another priority of the team is to support community contributions to NCL. There is no doubt that these priorities have not been treated as such over the past couple of years, and there are 2 principal reasons why: 1 - GeoCAT has not had the personnel to be able to support all of their external packages and to pursue their funded mandate to build new python tools. 2 - Due to retirements and people switching jobs, there is very little NCL institutional knowledge left within GeoCAT.

I find it completely understandable that NCL users and system/package maintainers have expressed frustration with the current situation. Regardless, for now, GeoCAT has agreed to evaluate and fix NCL's conda builds and to address @zklaus proj pull request NCAR/ncl#173, both in short order.

Some other items from the discussion above that I would like to chime in on:

  • NCL's github issue tracker is a bit of a mess, but at least some of the postings on there should have been posted to the ncl-talk/ncl-install email support lists and not filed on github. Feature requests have faced the same problems NCL builds and pull requests have, but both ncl-talk and ncl-install email support lists are carrying on and are active.
  • Both pyNIO and pyNGL were initially planned to be carried forward when NCL was placed into maintenance mode, but the GeoCAT team quickly decided that equitable plotting and I/O tools already existed in python. pyNIO and pyNGL were then placed into maintenance mode similar to NCL. (I didn't agree with this decision with regards to pyNGL, as I believe NCL's graphics to be world class and would have liked them to be carried on.)
  • Regarding NCL's future in ESMValTool: There are numerous stories out there about how hard it can be to translate large code bases from one language to another, and most of them are not very uplifting. At some point I will likely have to translate the CVDP's ~21,000 lines of NCL to python (or to create a new package). However, with GeoCAT's NCL build assurances and my beginner-level knowledge of python, I do not feel the pressure to do so at the present time. That being said, I would understand if ESMValTool (sometime soon) no longer allows new NCL packages to be brought into the fold. At the same time, I think updates to existing packages should be encouraged and allowed. I realize I am not unbiased on this topic, but I think this makes the most sense in the near term.

I hope the above provides some clarity with respect to NCL and advances the discussion!

@zklaus
Copy link

zklaus commented Apr 4, 2022

Thanks, @phillips-ad for your comments. It's nice to hear from the NCL side!

It would be great if the NCAR could pick up the maintenance of NCL again. In that case, we may push the other bugfixes that reside only in the conda-forge feedstock at the moment upstream as well. This may even have to happen before the integration of NCAR/ncl#173 to make it possible again for NCL's CI to build NCL. Please don't hesitate to ask for assistance with that if you would like that.
Sustaining this kind of maintenance could really help us to keep things running in the transition phase.

On the other items you raised:

  • NCL can obviously organize their communication as they see fit, and while e-mail lists might come across as a bit archaic, I personally am still a fan. In any case, neither means of communication seems to enjoy much engagement from the GeoCAT team.
  • I suppose the problem with pyNIO and pyNGL was that they were linking to the underlying code in NCL, thus introducing, at least to a degree, the same problems with the tricky legacy code base. Anyways, I suppose that's water under the bridge now; pyNGL and pyNIO are effectively in the same situation as NCL itself; as such they pose no reasonable option for someone who wants to migrate away from NCL for these reasons.
  • You are right that translations are not always straight-forward (to say the least). For ESMValTool, that is likely less of an issue since NCL is not used in its core, but rather in individual pieces of the outer layer that don't form one large code base, but rather a loose and largely optional collection of individual diagnostics.

We do make frequent use of CVDP via ESMValTool at my institute, so I am very happy to hear that you are still interested in maintaining it and possibly moving it to Python. Perhaps you might want to consider doing that directly in ESMValTool. This way, you can benefit from a lot of the standard preprocessors for data fixing, regridding, spatial and temporal statistics, and more. Where there are gaps in the preprocessors, adding those needed for CVDP might prove useful beyond that application for recipes and we can likely give a little bit of support in these developments.
If you decide that it should stay in a separate package, I personally would still be interested to have a look at a possible Python version.

Thanks again for you input, and do get/stay in touch about anything we can do to help with NCL or CVDP.

@erogluorhan
Copy link

erogluorhan commented Apr 4, 2022

Hello all, I am Orhan from the GeoCAT team. @phillips-ad already shared significant insights about our team and NCL commitments, and I'd like to make a few more:

  • Keeping NCL builds stable via conda is the number one NCL-related priority for the GeoCAT team, but I am sad to say, this is not the priority of the GeoCAT team in its broader roadmap. This is only because we already have several projects that we are funded to develop and maintain in the Python ecosystem for the worldwide geoscience community in an open development approach, and we are both short-staffed and has limited-knowledge on NCL internals. That said, for most of the time we even can't respond to issues and NCL emailing lists (We could actually respond to them saying we received them, but I am not sure if it would be helpful at all since we could still not be able to provide actual timely support after then). This does not mean we won't maintain NCL, but I am aware that we have not been and will unlikely be able to provide timely support on our commitments. That said, the NCL user community is always welcomed to be part of the NCL developers/collaborators list and get things moving forward (either on Github or on email lists).

  • Regardless of the above clarification, maintaining NCL is still in our agenda for a foreseeable future whenever time permits. Therefore, I am personally working on the repository right now to address critical issues mentioned here and in some other channels to get its users up and using the tool without any issues.

    • @zklaus please feel free to get your conda-forge feedstock-related bugfixes in. I'll do my best to help with them.
  • Regarding PyNGL and NCL's graphics power in general, we have developed the GeoCAT-examples plotting gallery that has been quite successful to replicate NCL plots in several categories. Th relation of this development to PyNGL going into maintenance mode was detailed in our November 2020 community update. We have been receiving strong feedback about how GeoCAT-examples is capable of regenerating NCL plots in Python and how it is going above and beyond being replication of NCL, especially nowadays, with some novel plotting examples, e.g. see interactive MPAS plotting example.

@zklaus
Copy link

zklaus commented Apr 4, 2022

Hi @erogluorhan, it's really good to hear from you, too!

I understand that there are no long term plans for NCL and that it is difficult to maintain such software with limited resources.
I am happy to help feeding the existing bug fixes upstream to keep things running a bit longer. I guess the first question is how to approach the issue of CI. Right now, it seems the CI scripts cannot build NCL, which renders all testing impossible. Clearly, you would like to have the testing before allowing PRs in.
It is possible that some of the *.patchs in the conda-forge feedstock can contribute to fixing this, but it would be good to understand how you want to tackle this, i.e. fix the circleci or pick up your work on github actions in NCAR/ncl#170?

With the CI in place, it should be straightforward to integrate the proj6 port and the boz fixes. From there, we might be able to tackle some of the open issues.

Here is probably not the place to discuss how to fix the NCL CI, but let me know if you want to take it up in the NCL repo or any other way.

@erogluorhan
Copy link

Hi @zklaus , yes, let us not clutter this repo much, but just to quickly answer: I am currently working on getting the CI up and running again. My first priority would be to get Github Actions configured as you pointed out my PR (This would also help GeoCAT team address future maintenance needs hopefully more timely in NCL as we have much experience with Github actions). However, if I feel like setting up Github Actions would take much time, I'd also consider fixing th existing CircleCI config just to expedite the things. Let us follow up the rest of this conversation under either NCAR/ncl PR#170 or your NCAR/ncl PR#173.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests