-
Notifications
You must be signed in to change notification settings - Fork 35
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
Package/module structure, code style, performance - maybe go for version 2 #46
Comments
Personally I totally agree with you (I was chocked, almost choked, by the non-Pythonic nature of hapi.py the first time I saw it) except that:
|
By the way, waiting for HAPI2; we have an object-oriented, automatically-tested, HITRAN/ExoMol LBL code at https://github.com/radis/radis from which some structuration-ideas could be taken for HAPI2 (that's the point of open source) |
@jmmelko I think the overhead from calling a module becomes negligible given that line-by-line computations of the spectra can take some time, but that's more of a detail I would say. @erwanp Thanks! I will have a definitely have a look into it! Especially the GPU acceleration looks nice 😸 |
If |
Hello,
As a developer for infrared spectroscopy software, I really like to work with the functionality that HITRAN offers (Perkin Elmer even built a patent with it for water vapour and CO2-correction of IR-spectra), but from time to time one has to look into the code which tries to summarize everything in a single
.py
-file (global constants, data-specific definitions, calculation routines, a 10 minutes Python tutorial). This fact makes it hard to understand/maintain and also increases the likelihood of errors a lot (there are still a some Pull requests and issues open regarding thins).Before tackling the issues, I think a first step could be a version 2.0 that actually makes more use of Python built-in functionalities like
UPPER_CASE_CONSTANT
)Enum
s anddataclass
es (or evenpydantic
models) rather than relying on global-constants-dict
-combinations which are hard to track back in scopetype(var) == some_type
but rather withisinstance
models
for the global constants and data models involved,database_io
for reading from the database,data
for the hard-coded data in the module,lineshapes
for the computation of lineshapes,environment
for the environment specification part,misc
for something like the tutorial ..., just a first example structure I could think of)Besides, the code contains some parts that could be improved
these 3 steps would not require a lot of effort, but make the code so much more joy to read and maintain
numba
,cython
, or evenrust
with multiprocessing/threading could reduce the computation time quite a bit (this is currently a limiting factor for me)scipy
could also be beneficial as dependency that most developers in that field have installed anywaypytest
(how is the module currently tested for correctness?) that could then be run whenever somebody makes a push or pull requestThen, it would be way easier to incorporate the changes required to resolve open issues/pull requests in less time.
Please don't see this as criticism, I would like to join as a contributor to this package and help 😄
However, I see a lot of open issues and pull requests and therefore wanted to ask if the project is still active and if there is interest in such big changes.
Thanks for your time.
The text was updated successfully, but these errors were encountered: