diff --git a/src/templates_front/templator_front.org b/src/templates_front/templator_front.org index 150a419..1d4b36e 100644 --- a/src/templates_front/templator_front.org +++ b/src/templates_front/templator_front.org @@ -188,9 +188,13 @@ __trexio_path__ = None | ~TREXIO_ATTR_MISSING~ | 24 | 'Attribute does not exist in the file' | | ~TREXIO_DSET_MISSING~ | 25 | 'Dataset does not exist in the file' | | ~TREXIO_BACK_END_MISSING~ | 26 | 'Requested back end is disabled' | + | ~TREXIO_INVALID_ARG_6~ | 27 | 'Invalid argument 6' | + | ~TREXIO_INVALID_ARG_7~ | 28 | 'Invalid argument 7' | + | ~TREXIO_INVALID_ARG_8~ | 29 | 'Invalid argument 8' | | ~TREXIO_INVALID_STR_LEN~ | 30 | 'Invalid max_str_len' | | ~TREXIO_INT_SIZE_OVERFLOW~ | 31 | 'Possible integer overflow' | | ~TREXIO_SAFE_MODE~ | 32 | 'Unsafe operation in safe mode' | + | ~TREXIO_INVALID_STATE~ | 33 | 'Inconsistent state of the file' | # We need to force Emacs not to indent the Python code: # -*- org-src-preserve-indentation: t @@ -264,9 +268,13 @@ return '\n'.join(result) #define TREXIO_ATTR_MISSING ((trexio_exit_code) 24) #define TREXIO_DSET_MISSING ((trexio_exit_code) 25) #define TREXIO_BACK_END_MISSING ((trexio_exit_code) 26) + #define TREXIO_INVALID_ARG_6 ((trexio_exit_code) 27) + #define TREXIO_INVALID_ARG_7 ((trexio_exit_code) 28) + #define TREXIO_INVALID_ARG_8 ((trexio_exit_code) 29) #define TREXIO_INVALID_STR_LEN ((trexio_exit_code) 30) #define TREXIO_INT_SIZE_OVERFLOW ((trexio_exit_code) 31) #define TREXIO_SAFE_MODE ((trexio_exit_code) 32) + #define TREXIO_INVALID_STATE ((trexio_exit_code) 33) #+end_src #+begin_src f90 :tangle prefix_fortran.f90 :exports none @@ -298,9 +306,13 @@ return '\n'.join(result) integer(trexio_exit_code), parameter :: TREXIO_ATTR_MISSING = 24 integer(trexio_exit_code), parameter :: TREXIO_DSET_MISSING = 25 integer(trexio_exit_code), parameter :: TREXIO_BACK_END_MISSING = 26 + integer(trexio_exit_code), parameter :: TREXIO_INVALID_ARG_6 = 27 + integer(trexio_exit_code), parameter :: TREXIO_INVALID_ARG_7 = 28 + integer(trexio_exit_code), parameter :: TREXIO_INVALID_ARG_8 = 29 integer(trexio_exit_code), parameter :: TREXIO_INVALID_STR_LEN = 30 integer(trexio_exit_code), parameter :: TREXIO_INT_SIZE_OVERFLOW = 31 integer(trexio_exit_code), parameter :: TREXIO_SAFE_MODE = 32 + integer(trexio_exit_code), parameter :: TREXIO_INVALID_STATE = 33 #+end_src #+begin_src python :tangle prefix_python.py :exports none @@ -333,9 +345,13 @@ return '\n'.join(result) TREXIO_ATTR_MISSING = 24 TREXIO_DSET_MISSING = 25 TREXIO_BACK_END_MISSING = 26 + TREXIO_INVALID_ARG_6 = 27 + TREXIO_INVALID_ARG_7 = 28 + TREXIO_INVALID_ARG_8 = 29 TREXIO_INVALID_STR_LEN = 30 TREXIO_INT_SIZE_OVERFLOW = 31 TREXIO_SAFE_MODE = 32 + TREXIO_INVALID_STATE = 33 #+end_src :END: @@ -462,6 +478,15 @@ return '\n'.join(result) case TREXIO_BACK_END_MISSING: return "Requested back end is disabled"; break; + case TREXIO_INVALID_ARG_6: + return "Invalid argument 6"; + break; + case TREXIO_INVALID_ARG_7: + return "Invalid argument 7"; + break; + case TREXIO_INVALID_ARG_8: + return "Invalid argument 8"; + break; case TREXIO_INVALID_STR_LEN: return "Invalid max_str_len"; break; @@ -471,6 +496,9 @@ return '\n'.join(result) case TREXIO_SAFE_MODE: return "Unsafe operation in safe mode"; break; + case TREXIO_INVALID_STATE: + return "Inconsistent state of the file"; + break; #+end_example **** C source code @@ -4226,8 +4254,12 @@ trexio_exit_code trexio_has_determinant_list(trexio_t* const file); trexio_exit_code trexio_has_determinant_coefficient(trexio_t* const file); trexio_exit_code trexio_read_determinant_list(trexio_t* const file, const int64_t offset_file, int64_t* const buffer_size, int64_t* const dset); trexio_exit_code trexio_read_safe_determinant_list(trexio_t* const file, const int64_t offset_file, int64_t* const buffer_size_read, int64_t* const dset_out, const int64_t dim_out); +trexio_exit_code trexio_read_determinant_coefficient(trexio_t* const file, const int64_t offset_file, int64_t* const buffer_size, double* const dset); +trexio_exit_code trexio_read_safe_determinant_coefficient(trexio_t* const file, const int64_t offset_file, int64_t* const buffer_size_read, double* const dset_out, const int64_t dim_out); trexio_exit_code trexio_write_determinant_list(trexio_t* const file, const int64_t offset_file, const int64_t buffer_size, const int64_t* dset); trexio_exit_code trexio_write_safe_determinant_list(trexio_t* const file, const int64_t offset_file, const int64_t buffer_size, const int64_t* dset_in, const int64_t dim_in); +trexio_exit_code trexio_write_determinant_coefficient(trexio_t* const file, const int64_t offset_file, const int64_t buffer_size, const double* dset); +trexio_exit_code trexio_write_safe_determinant_coefficient(trexio_t* const file, const int64_t offset_file, const int64_t buffer_size, const double* dset_in, const int64_t dim_in); #+end_src #+begin_src c :tangle read_determinant_front.c @@ -4290,11 +4322,68 @@ trexio_read_determinant_list (trexio_t* const file, const int64_t offset_file, i } + +trexio_exit_code +trexio_read_determinant_coefficient (trexio_t* const file, const int64_t offset_file, int64_t* const buffer_size_read, double* const dset) +{ + + if (file == NULL) return TREXIO_INVALID_ARG_1; + if (dset == NULL) return TREXIO_INVALID_ARG_2; + if (trexio_has_determinant_coefficient(file) != TREXIO_SUCCESS) return TREXIO_DSET_MISSING; + + trexio_exit_code rc; + + uint32_t rank = 1; + uint64_t det_size = (uint64_t) (*buffer_size_read); + uint64_t dims[1] = {det_size}; + + // introduce a new variable which will be modified with the number of integrals being read if EOF is encountered + int64_t eof_read_size = 0L; + + switch (file->back_end) { + + case TREXIO_TEXT: + rc = trexio_text_read_determinant_coefficient(file, offset_file, rank, dims, &eof_read_size, dset); + break; + + case TREXIO_HDF5: +#ifdef HAVE_HDF5 + rc = trexio_hdf5_read_determinant_coefficient(file, offset_file, rank, dims, &eof_read_size, dset); + break; +#else + rc = TREXIO_BACK_END_MISSING; + break; +#endif +/* + case TREXIO_JSON: + return trexio_json_read_$group_dset$(...); + break; +,*/ + default: + rc = TREXIO_FAILURE; /* Impossible case */ + break; + } + + if (rc != TREXIO_SUCCESS && rc != TREXIO_END) return rc; + + if (rc == TREXIO_END) *buffer_size_read = eof_read_size; + + return rc; + + +} + trexio_exit_code trexio_read_safe_determinant_list (trexio_t* const file, const int64_t offset_file, int64_t* const buffer_size_read, int64_t* const dset_out, const int64_t dim_out) { return trexio_read_determinant_list(file, offset_file, buffer_size_read, dset_out); } + +trexio_exit_code +trexio_read_safe_determinant_coefficient (trexio_t* const file, const int64_t offset_file, int64_t* const buffer_size_read, double* const dset_out, const int64_t dim_out) +{ + return trexio_read_determinant_coefficient(file, offset_file, buffer_size_read, dset_out); +} #+end_src #+begin_src c :tangle write_determinant_front.c @@ -4369,11 +4458,51 @@ trexio_write_determinant_list (trexio_t* const file, const int64_t offset_file, return TREXIO_SUCCESS; } +trexio_exit_code +trexio_write_determinant_coefficient (trexio_t* const file, const int64_t offset_file, const int64_t buffer_size, const double* dset) +{ + + if (file == NULL) return TREXIO_INVALID_ARG_1; + if (dset == NULL) return TREXIO_INVALID_ARG_2; + + uint32_t rank = 1; + uint64_t dims[1] = {buffer_size}; + + assert(file->back_end < TREXIO_INVALID_BACK_END); + + switch (file->back_end) { + + case TREXIO_TEXT: + return trexio_text_write_determinant_coefficient(file, offset_file, rank, dims, dset); + break; + + case TREXIO_HDF5: +#ifdef HAVE_HDF5 + return trexio_hdf5_write_determinant_coefficient(file, offset_file, rank, dims, dset); + break; +#else + return TREXIO_BACK_END_MISSING; + break; +#endif +/* + case TREXIO_JSON: + rc = trexio_json_read_ + break; +,*/ + } +} + trexio_exit_code trexio_write_safe_determinant_list (trexio_t* const file, const int64_t offset_file, const int64_t buffer_size, const int64_t* dset_in, const int64_t dim_in) { return trexio_write_determinant_list(file, offset_file, buffer_size, dset_in); } + +trexio_exit_code +trexio_write_safe_determinant_coefficient (trexio_t* const file, const int64_t offset_file, const int64_t buffer_size, const double* dset_in, const int64_t dim_in) +{ + return trexio_write_determinant_coefficient(file, offset_file, buffer_size, dset_in); +} #+end_src #+begin_src c :tangle has_determinant_front.c @@ -4417,11 +4546,11 @@ trexio_has_determinant_coefficient (trexio_t* const file) switch (file->back_end) { case TREXIO_TEXT: - return -1; //trexio_text_has_determinant_coefficient(file); + return trexio_text_has_determinant_coefficient(file); case TREXIO_HDF5: #ifdef HAVE_HDF5 - return -1; //trexio_hdf5_has_determinant_coefficient(file); + return trexio_hdf5_has_determinant_coefficient(file); #else return TREXIO_BACK_END_MISSING; #endif