diff --git a/README.html b/README.html index ec7e1d2..4d9f75d 100644 --- a/README.html +++ b/README.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + @@ -347,7 +347,7 @@ and bug reports should be submitted at

Author: TREX-CoE

-

Created: 2021-12-23 Thu 17:50

+

Created: 2022-01-05 Wed 12:58

Validate

diff --git a/examples.html b/examples.html index 739f74f..d9b6e4a 100644 --- a/examples.html +++ b/examples.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Examples @@ -333,24 +333,24 @@ for the JavaScript code in this tag.

Table of Contents

-
-

1 Accessing sparse quantities

+
+

1 Accessing sparse quantities

-
-

1.1 Fortran

+
+

1.1 Fortran

program print_energy
@@ -413,8 +413,8 @@ One needs to read from the TREXIO file:
 
-
-

1.1.1 Declare Temporary variables

+
+

1.1.1 Declare Temporary variables

integer                       :: i, j, k, l, m
@@ -429,8 +429,8 @@ One needs to read from the TREXIO file:
 
-
-

1.1.2 Obtain the name of the TREXIO file from the command line, and open it for reading

+
+

1.1.2 Obtain the name of the TREXIO file from the command line, and open it for reading

call getarg(1, filename)
@@ -446,8 +446,8 @@ f = trexio_open (filename, 'r', TREXIO_HDF5
 
-
-

1.1.3 Read the nuclear repulsion energy

+
+

1.1.3 Read the nuclear repulsion energy

rc = trexio_read_nucleus_repulsion(f, E_nn)
@@ -461,8 +461,8 @@ f = trexio_open (filename, 'r', TREXIO_HDF5
 
-
-

1.1.4 Read the number of molecular orbitals

+
+

1.1.4 Read the number of molecular orbitals

rc = trexio_read_mo_num(f, n)
@@ -476,8 +476,8 @@ f = trexio_open (filename, 'r', TREXIO_HDF5
 
-
-

1.1.5 Allocate memory

+
+

1.1.5 Allocate memory

allocate( D(n,n), h0(n,n) )
@@ -489,8 +489,8 @@ W(:,:,:,:) = 0.d0
 
-
-

1.1.6 Read one-electron quantities

+
+

1.1.6 Read one-electron quantities

rc = trexio_has_mo_1e_int_core_hamiltonian(f)
@@ -522,8 +522,8 @@ rc = trexio_read_rdm_1e(f, D)
 
-
-

1.1.7 Read two-electron quantities

+
+

1.1.7 Read two-electron quantities

Reading is done with OpenMP. Each thread reads its own buffer, and @@ -539,8 +539,8 @@ to be protected in the critical section when modified.

-
-
1.1.7.1 Electron repulsion integrals
+
+
1.1.7.1 Electron repulsion integrals
rc = trexio_has_mo_2e_int_eri(f)
@@ -589,8 +589,8 @@ icount = BUFSIZE
 
-
-
1.1.7.2 Reduced density matrix
+
+
1.1.7.2 Reduced density matrix
rc = trexio_has_rdm_2e(f)
@@ -634,8 +634,8 @@ icount = bufsize
 
-
-

1.1.8 Compute the energy

+
+

1.1.8 Compute the energy

As \((n,m)\) 2D arrays are stored in memory as \((\n times m)\) 1D @@ -669,8 +669,8 @@ E = E + E_nn

-
-

1.1.9 Terminate

+
+

1.1.9 Terminate

  deallocate( D, h0, G, W )
@@ -685,7 +685,7 @@ E = E + E_nn
 

Author: TREX-CoE

-

Created: 2021-12-23 Thu 17:50

+

Created: 2022-01-05 Wed 12:58

Validate

diff --git a/index.html b/index.html index ec7e1d2..4d9f75d 100644 --- a/index.html +++ b/index.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + @@ -347,7 +347,7 @@ and bug reports should be submitted at

Author: TREX-CoE

-

Created: 2021-12-23 Thu 17:50

+

Created: 2022-01-05 Wed 12:58

Validate

diff --git a/templator_front.html b/templator_front.html index ddaf847..3b09068 100644 --- a/templator_front.html +++ b/templator_front.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + Front end API @@ -333,136 +333,137 @@ for the JavaScript code in this tag.

Table of Contents

-
-

1 Coding conventions

+
+

1 Coding conventions

  • integer types will be defined using types given in stdint.h
  • @@ -477,8 +478,8 @@ for the JavaScript code in this tag.
-
-

1.1 Memory allocation

+
+

1.1 Memory allocation

Memory allocation of structures can be facilitated by using the @@ -513,8 +514,8 @@ The maximum string size for the filenames is 4096 characters.

-
-

2 Front end

+
+

2 Front end

All calls to TREXIO are thread-safe. @@ -522,10 +523,10 @@ TREXIO front end is modular, which simplifies implementation of new back ends.

-
-

2.1 Error handling

+
+

2.1 Error handling

- +
@@ -766,8 +767,8 @@ and the corresponding message are not propagated to the source code. -
-

2.1.1 Decoding errors

+
+

2.1.1 Decoding errors

The trexio_string_of_error converts an exit code into a string. The @@ -793,8 +794,8 @@ and the corresponding message are not propagated to the source code.

-
-
2.1.1.1 C source code
+
+
2.1.1.1 C source code
const char*
@@ -905,8 +906,8 @@ and the corresponding message are not propagated to the source code.
 
-
-
2.1.1.2 Fortran interface
+
+
2.1.1.2 Fortran interface
interface
@@ -922,8 +923,8 @@ and the corresponding message are not propagated to the source code.
 
-
-
2.1.1.3 Python interface
+
+
2.1.1.3 Python interface
class Error(Exception):
@@ -962,8 +963,8 @@ and the corresponding message are not propagated to the source code.
 
-
-

2.2 Back ends

+
+

2.2 Back ends

TREXIO has several back ends: @@ -987,8 +988,8 @@ lines that correspond to the TREXIO_JSON back end (not implemented

-
-

2.2.1 C

+
+

2.2.1 C

typedef int32_t back_end_t;
@@ -1031,8 +1032,8 @@ This is useful due to the fact that HDF5 back end can be disabled at configure s
 
-
-

2.2.2 Fortran

+
+

2.2.2 Fortran

  integer(trexio_backend), parameter :: TREXIO_HDF5 = 0
@@ -1058,8 +1059,8 @@ The function below is a Fortran interface for the aforementioned C-compatible 
 
-
-

2.2.3 Python

+
+

2.2.3 Python

# define TREXIO back ends
@@ -1073,8 +1074,8 @@ The function below is a Fortran interface for the aforementioned C-compatible 
 
-
-

2.3 Read/write behavior

+
+

2.3 Read/write behavior

Every time a reading function is called, the data is read from the @@ -1102,8 +1103,8 @@ concurrent programs, the behavior is not specified.

-
-

2.4 TREXIO file type

+
+

2.4 TREXIO file type

trexio_s is the the main type for TREXIO files, visible to the users @@ -1137,8 +1138,8 @@ TREXIO files will have as a first argument the TREXIO file handle.

-
-

2.4.1 TREXIOFile Python class

+
+

2.4.1 TREXIOFile Python class

class File:
@@ -1211,8 +1212,8 @@ TREXIO files will have as a first argument the TREXIO file handle.
 
-
-

2.5 Polymorphism of the file handle

+
+

2.5 Polymorphism of the file handle

Polymorphism of the trexio_t type is handled by ensuring that the @@ -1231,8 +1232,8 @@ corresponding types for all back ends can be safely casted to

-
-

2.6 File opening

+
+

2.6 File opening

trexio_open creates a new TREXIO file or opens existing one. @@ -1271,8 +1272,8 @@ renaming the .txt data files.

-
-

2.6.1 C

+
+

2.6.1 C

trexio_t*
@@ -1458,8 +1459,8 @@ renaming the .txt data files.
 
-
-

2.6.2 Fortran

+
+

2.6.2 Fortran

interface
@@ -1477,8 +1478,8 @@ renaming the .txt data files.
 
-
-

2.6.3 Python

+
+

2.6.3 Python

def open(file_name: str, mode: str, back_end: int):
@@ -1526,8 +1527,8 @@ renaming the .txt data files.
 
-
-

2.6.4 Zero-based versus one-based arrays of indices

+
+

2.6.4 Zero-based versus one-based arrays of indices

Because arrays are zero-based in Fortran, we need to set a flag to @@ -1560,8 +1561,8 @@ know if we need to shift by 1 arrays of indices.

-
-

2.7 File closing

+
+

2.7 File closing

trexio_close closes an existing trexio_t file. @@ -1578,8 +1579,8 @@ output:

-
-

2.7.1 C

+
+

2.7.1 C

trexio_exit_code
@@ -1658,8 +1659,8 @@ output:
 
-
-

2.7.2 Fortran

+
+

2.7.2 Fortran

interface
@@ -1673,8 +1674,8 @@ output:
 
-
-

2.7.3 Python

+
+

2.7.3 Python

def close(trexio_file):
@@ -1696,12 +1697,12 @@ output:
 
-
-

3 Templates for front end

+
+

3 Templates for front end

-
-

3.1 Description

+
+

3.1 Description

Consider the following block of trex.json: @@ -1922,12 +1923,12 @@ value will result in TREXIO_INVALID_ARG_2 exit code.

-
-

3.2 Templates for front end has/read/write a single numerical attribute

+
+

3.2 Templates for front end has/read/write a single numerical attribute

-
-

3.2.1 Introduction

+
+

3.2.1 Introduction

This section concerns API calls related to numerical attributes, @@ -1998,8 +1999,8 @@ namely single value of int/float types.

-
-

3.2.2 C templates for front end

+
+

3.2.2 C templates for front end

The C templates that correspond to each of the abovementioned @@ -2013,12 +2014,12 @@ precision (see Table above).

-
-
3.2.2.1 Function declarations
+
+
3.2.2.1 Function declarations
-
-
3.2.2.2 Source code for double precision functions
+
+
3.2.2.2 Source code for double precision functions
trexio_exit_code
@@ -2087,8 +2088,8 @@ precision (see Table above).
 
-
-
3.2.2.3 Source code for single precision functions
+
+
3.2.2.3 Source code for single precision functions
trexio_exit_code
@@ -2164,8 +2165,8 @@ precision (see Table above).
 
-
-
3.2.2.4 Source code for default functions
+
+
3.2.2.4 Source code for default functions
trexio_exit_code
@@ -2222,8 +2223,8 @@ precision (see Table above).
 
-
-

3.2.3 Fortran templates for front end

+
+

3.2.3 Fortran templates for front end

The Fortran templates that provide an access to the C API calls from Fortran. @@ -2308,8 +2309,8 @@ These templates are based on the use of iso_c_binding. Pointers hav

-
-

3.2.4 Python templates for front end

+
+

3.2.4 Python templates for front end

def write_$group_num$(trexio_file, num_w: $group_num_py_dtype$) -> None:
@@ -2394,12 +2395,12 @@ These templates are based on the use of iso_c_binding. Pointers hav
 
-
-

3.3 Templates for front end has/read/write a dataset of numerical data

+
+

3.3 Templates for front end has/read/write a dataset of numerical data

-
-

3.3.1 Introduction

+
+

3.3.1 Introduction

This section concerns API calls related to datasets. @@ -2481,8 +2482,8 @@ This section concerns API calls related to datasets.

-
-

3.3.2 C templates for front end

+
+

3.3.2 C templates for front end

The C templates that correspond to each of the abovementioned functions can be found below. @@ -2493,12 +2494,12 @@ The basic (non-suffixed) API call on datasets deals with double precision (see T

-
-
3.3.2.1 Function declarations
+
+
3.3.2.1 Function declarations
-
-
3.3.2.2 Source code for double precision functions
+
+
3.3.2.2 Source code for double precision functions
trexio_exit_code
@@ -2634,8 +2635,8 @@ The basic (non-suffixed) API call on datasets deals with double precision (see T
 
-
-
3.3.2.3 Source code for single precision functions
+
+
3.3.2.3 Source code for single precision functions
trexio_exit_code
@@ -2784,11 +2785,11 @@ The basic (non-suffixed) API call on datasets deals with double precision (see T
 
-
-
3.3.2.4 Source code for memory-safe functions
+
+
3.3.2.4 Source code for memory-safe functions
-
trexio_exit_code rc;
+
trexio_exit_code rc;
 int64_t $group_dset_dim$ = 0;
 
 /* Error handling for this call is added by the generator */
@@ -2944,8 +2945,8 @@ rc = trexio_read_$group_dset_dim$_64(file, &($group_dset_dim$));
 
-
-
3.3.2.5 Source code for default functions
+
+
3.3.2.5 Source code for default functions
trexio_exit_code
@@ -3023,8 +3024,8 @@ rc = trexio_read_$group_dset_dim$_64(file, &($group_dset_dim$));
 
-
-

3.3.3 Fortran templates for front end

+
+

3.3.3 Fortran templates for front end

The Fortran templates that provide an access to the C API calls from Fortran. @@ -3109,8 +3110,8 @@ These templates are based on the use of iso_c_binding. Pointers hav

-
-

3.3.4 Python templates for front end

+
+

3.3.4 Python templates for front end

def write_$group_dset$(trexio_file, dset_w) -> None:
@@ -3305,12 +3306,12 @@ These templates are based on the use of iso_c_binding. Pointers hav
 
-
-

3.4 Templates for front end has/read/write a dataset of sparse data

+
+

3.4 Templates for front end has/read/write a dataset of sparse data

-
-

3.4.1 Introduction

+
+

3.4.1 Introduction

Sparse data structures are used typically for large tensors such as @@ -3360,32 +3361,142 @@ functions take two extra parameters:

    -
  • offset : how many integrals in the file should be skipped when reading. +
  • offset_file : how many integrals in the file should be skipped when reading/writing. An offset of zero implies to read the first integral.
  • -
  • size : the number of integrals to read.
  • +
  • buffer_size : the number of integrals to read/write. +If EOF is encountered upon reading, the buffer_size is overwritten with the number +of integrals that have been read before EOF and the trexio_read_ function return +TREXIO_END exit code instead of TREXIO_SUCCESS.

-We provide a function to read a chunk of indices, and a function to -read a chunk of values, because some users might want to read only -the values of the integrals, or only the indices. +The storage of int indices is internally compressed based on the maximum possible value of an index, +which is derived from the corresponding dimension of the sparse array (e.g. ao_num is the upper bound +of indices in the aforementioned ao_2e_int_eri dataset). +The upper bounds for different int types (e.g. uint16_t) can be found in the in the stdint.h C library. +Currently implemented list of compressions based on the upper bound of indices can be found below:

+ +
+ + +++ ++ + + + + + + + + + + + + + + + + + + + + + + +
Max value of indicesInternal representation (in the TREXIO file)
UINT8_MAX (e.g. \(< 255\))8-bit unsigned int
UINT16_MAX (e.g. \(< 65535\))16-bit unsigned int
Otherwise (e.g. \(\ge 65535\))32-bit signed int
+ + +

+This section concerns API calls related to sparse data structures. +

+ + + + +++ ++ ++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Function nameDescriptionPrecision
trexio_has_$group_dset$Check if a sparse dset is present in a file---
trexio_read_$group_dset$Read indices and values of a sparse dsetSingle/Double for indices/values
trexio_read_$group_dset$_sizeRead the number of sparse data elements stored in the fileDouble for size
trexio_write_$group_dset$Write indices and values of a sparse dsetSingle/Double for indices/values
trexio_read_safe_$group_dset$Safe (bounded) read of indices and values (for Python API)Single/Double for indices/values
trexio_write_safe_$group_dset$Safe (bounded) write of indices and values (for Python API)Single/Double for indices/values
-
-

3.4.2 C templates for front end

+
+

3.4.2 C templates for front end

-
-
3.4.2.1 Function declarations
+
+
3.4.2.1 Function declarations
-
-
3.4.2.2 Source code for default functions
+
+
3.4.2.2 Source code for default functions
-
trexio_exit_code
+
trexio_exit_code trexio_read_safe_$group_dset$(trexio_t* const file,
+                                               const int64_t offset_file,
+                                               int64_t* const buffer_size_read,
+                                               int32_t* const index_sparse_read,
+                                               const int64_t size_index_read,
+                                               double* const value_sparse_read,
+                                               const int64_t size_value_read
+                                               )
+{
+  return trexio_read_$group_dset$(file, offset_file, buffer_size_read, index_sparse_read, value_sparse_read);
+}
+
+trexio_exit_code
 trexio_read_$group_dset$(trexio_t* const file,
                          const int64_t offset_file,
                          int64_t* const buffer_size,
@@ -3491,13 +3602,25 @@ the values of the integrals, or only the indices.
 
 
 
-
trexio_exit_code
+
trexio_exit_code trexio_write_safe_$group_dset$(trexio_t* const file,
+                                                const int64_t offset_file,
+                                                const int64_t buffer_size,
+                                                const int32_t* index_sparse_write,
+                                                const int64_t size_index_write,
+                                                const double* value_sparse_write,
+                                                const int64_t size_value_write
+                                                )
+{
+  return trexio_write_$group_dset$(file, offset_file, buffer_size, index_sparse_write, value_sparse_write);
+}
+
+trexio_exit_code
 trexio_write_$group_dset$(trexio_t* const file,
-                           const int64_t offset_file,
-                           const int64_t buffer_size,
-                           const int32_t* index_sparse,
-                           const double* value_sparse
-                           )
+                          const int64_t offset_file,
+                          const int64_t buffer_size,
+                          const int32_t* index_sparse,
+                          const double* value_sparse
+                          )
 {
   if (file  == NULL) return TREXIO_INVALID_ARG_1;
   if (offset_file < 0L) return TREXIO_INVALID_ARG_2;
@@ -3601,8 +3724,8 @@ the values of the integrals, or only the indices.
 
-
-

3.4.3 Fortran templates for front end

+
+

3.4.3 Fortran templates for front end

The Fortran templates that provide an access to the C API calls from Fortran. @@ -3622,6 +3745,22 @@ These templates are based on the use of iso_c_binding. Pointers hav double precision, intent(in) :: value_sparse(*) end function trexio_write_$group_dset$ end interface + +interface + integer function trexio_write_safe_$group_dset$ (trex_file, & + offset_file, buffer_size, & + index_sparse, index_size, & + value_sparse, value_size) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in), value :: offset_file + integer(8), intent(in), value :: buffer_size + integer(4), intent(in) :: index_sparse(*) + integer(8), intent(in), value :: index_size + double precision, intent(in) :: value_sparse(*) + integer(8), intent(in), value :: value_size + end function trexio_write_safe_$group_dset$ +end interface

@@ -3638,6 +3777,22 @@ These templates are based on the use of iso_c_binding. Pointers hav double precision, intent(out) :: value_sparse(*) end function trexio_read_$group_dset$ end interface + +interface + integer function trexio_read_safe_$group_dset$ (trex_file, & + offset_file, buffer_size, & + index_sparse, index_size, & + value_sparse, value_size) bind(C) + use, intrinsic :: iso_c_binding + integer(8), intent(in), value :: trex_file + integer(8), intent(in), value :: offset_file + integer(8), intent(inout) :: buffer_size + integer(4), intent(out) :: index_sparse(*) + integer(8), intent(in), value :: index_size + double precision, intent(out) :: value_sparse(*) + integer(8), intent(in), value :: value_size + end function trexio_read_safe_$group_dset$ +end interface
@@ -3664,14 +3819,235 @@ These templates are based on the use of iso_c_binding. Pointers hav
+ +
+

3.4.4 Python templates for front end

+
+
+
def write_$group_dset$(trexio_file: File, offset_file: int, buffer_size: int, indices: list, values: list) -> None:
+    """Write the $group_dset$ indices and values in the TREXIO file.
+
+    Parameters:
+
+    trexio_file:
+        TREXIO File object.
+
+    offset_file: int
+        The number of integrals to be skipped in the file when writing.
+
+    buffer_size: int
+        The number of integrals to write in the file from the provided sparse arrays.
+
+    values: list OR numpy.ndarray
+        Array of $group_dset$ indices to be written. If array data type does not correspond to int32, the conversion is performed.
+
+    values: list OR numpy.ndarray
+        Array of $group_dset$ values to be written. If array data type does not correspond to float64, the conversion is performed.
+
+    Raises:
+        - Exception from AssertionError if TREXIO return code ~rc~ is different from TREXIO_SUCCESS and prints the error message using trexio_string_of_error.
+        - Exception from some other error (e.g. RuntimeError).
+    """
+
+    try:
+        import numpy as np
+    except ImportError:
+        raise Exception("NumPy cannot be imported.")
+
+    if not isinstance(offset_file, int):
+        raise TypeError("offset_file argument has to be an integer.")
+    if not isinstance(buffer_size, int):
+        raise TypeError("buffer_size argument has to be an integer.")
+    if not isinstance(indices, (list, tuple, np.ndarray)):
+        raise TypeError("indices argument has to be an array (list, tuple or NumPy ndarray).")
+    if not isinstance(values, (list, tuple, np.ndarray)):
+        raise TypeError("values argument has to be an array (list, tuple or NumPy ndarray).")
+
+    convertIndices = False
+    convertValues = False
+    flattenIndices = False
+    if isinstance(indices, np.ndarray):
+       # convert to int32 if input indices are in a different precision
+       if not indices.dtype==np.int32:
+           convertIndices = True
+
+       if len(indices.shape) > 1:
+           flattenIndices = True
+           if convertIndices:
+               indices_32 = np.int32(indices).flatten()
+           else:
+               indices_32 = np.array(indices, dtype=np.int32).flatten()
+       else:
+           if convertIndices:
+               indices_32 = np.int32(indices)
+    else:
+       # if input array is a multidimensional list or tuple, we have to convert it
+       try:
+           doFlatten = True
+           # if list of indices is flat - the attempt to compute len(indices[0]) will raise a TypeError
+           ncol = len(indices[0])
+           indices_32 = np.array(indices, dtype=np.int32).flatten()
+       except TypeError:
+           doFlatten = False
+           pass
+
+    if isinstance(values, np.ndarray):
+       # convert to float64 if input values are in a different precision
+       if not values.dtype==np.float64:
+           convertValues = True
+       if convertValues:
+           values_64 = np.float64(values)
+
+    if (convertIndices or flattenIndices) and convertValues:
+        rc = pytr.trexio_write_safe_$group_dset$(trexio_file.pytrexio_s, offset_file, buffer_size, indices_32, values_64)
+    elif (convertIndices or flattenIndices) and not convertValues:
+        rc = pytr.trexio_write_safe_$group_dset$(trexio_file.pytrexio_s, offset_file, buffer_size, indices_32, values)
+    elif not (convertIndices or flattenIndices) and convertValues:
+        rc = pytr.trexio_write_safe_$group_dset$(trexio_file.pytrexio_s, offset_file, buffer_size, indices, values_64)
+    else:
+        rc = pytr.trexio_write_safe_$group_dset$(trexio_file.pytrexio_s, offset_file, buffer_size, indices, values)
+
+    if rc != TREXIO_SUCCESS:
+        raise Error(rc)
+
-
-

3.5 Templates for front end has/read/write a dataset of strings

+
+
def read_$group_dset$(trexio_file: File, offset_file: int, buffer_size: int) -> tuple:
+    """Read the $group_dset$ indices and values from the TREXIO file.
+
+    Parameters:
+
+    trexio_file:
+        TREXIO File object.
+
+    offset_file: int
+        The number of integrals to be skipped in the file when reading.
+
+    buffer_size: int
+        The number of integrals to read from the file.
+
+    Returns:
+        (indices, values, n_int_read, eof_flag) tuple where
+          - indices and values are NumPy arrays [numpy.ndarray] with the default int32 and float64 precision, respectively;
+          - n_int_read [int] is the number of integrals read from the trexio_file
+            (either strictly equal to buffer_size or less than buffer_size if EOF has been reached);
+          - eof_flag [bool] is True when EOF has been reached (i.e. when call to low-level pytrexio API returns TREXIO_END)
+                               False otherwise.
+
+    Raises:
+        - Exception from AssertionError if TREXIO return code ~rc~ is different from TREXIO_SUCCESS
+            and prints the error message using trexio_string_of_error.
+        - Exception from some other error (e.g. RuntimeError).
+    """
+
+    try:
+        import numpy as np
+    except ImportError:
+        raise Exception("NumPy cannot be imported.")
+
+    if not isinstance(offset_file, int):
+        raise TypeError("offset_file argument has to be an integer.")
+    if not isinstance(buffer_size, int):
+        raise TypeError("buffer_size argument has to be an integer.")
+
+
+    # read the number of integrals already in the file
+    integral_num = read_$group_dset$_size(trexio_file)
+
+    # additional modification needed to avoid allocating more memory than needed if EOF will be reached during read
+    overflow = offset_file + buffer_size - integral_num
+    eof_flag = False
+    if overflow > 0:
+        verified_size = buffer_size - overflow
+        eof_flag = True
+    else:
+        verified_size = buffer_size
+
+    # main call to the low-level (SWIG-wrapped) trexio_read function, which also requires the sizes of the output to be provided
+    # as the last 2 arguments (for numpy arrays of indices and values, respectively)
+    # read_buf_size contains the number of elements being read from the file, useful when EOF has been reached
+    rc, n_int_read, indices, values = pytr.trexio_read_safe_$group_dset$(trexio_file.pytrexio_s,
+                                                                         offset_file,
+                                                                         verified_size,
+                                                                         verified_size * $group_dset_rank$,
+                                                                         verified_size)
+    if rc != TREXIO_SUCCESS:
+        raise Error(rc)
+    if n_int_read == 0:
+        raise ValueError("No integrals have been read from the file.")
+    if indices is None or values is None:
+        raise ValueError("Returned NULL array from the low-level pytrexio API.")
+
+    # conversion to custom types can be performed on the user side, here we only reshape the returned flat array of indices according to group_dset_rank
+    shape = tuple([verified_size, $group_dset_rank$])
+    indices_reshaped = np.reshape(indices, shape, order='C')
+
+    return (indices_reshaped, values, n_int_read, eof_flag)
+
+
+def read_$group_dset$_size(trexio_file) -> int:
+    """Read the number of $group_dset$ integrals stored in the TREXIO file.
+
+    Parameter is a ~TREXIO File~ object that has been created by a call to ~open~ function.
+
+    Returns:
+        ~num_integral~: int
+        Integer value of corresponding to the size of the $group_dset$ sparse array from ~trexio_file~.
+
+    Raises:
+        - Exception from AssertionError if TREXIO return code ~rc~ is different from TREXIO_SUCCESS and prints the error message using trexio_string_of_error.
+        - Exception from some other error (e.g. RuntimeError).
+    """
+
+    try:
+        rc, num_integral = pytr.trexio_read_$group_dset$_size(trexio_file.pytrexio_s)
+        if rc != TREXIO_SUCCESS:
+            raise Error(rc)
+    except:
+        raise
+
+    return num_integral
+
+
+ +
+
def has_$group_dset$(trexio_file) -> bool:
+    """Check that $group_dset$ variable exists in the TREXIO file.
+
+    Parameter is a ~TREXIO File~ object that has been created by a call to ~open~ function.
+
+    Returns:
+          True if the variable exists, False otherwise
+
+    Raises:
+        - Exception from trexio.Error class if TREXIO return code ~rc~ is TREXIO_FAILURE and prints the error message using string_of_error.
+        - Exception from some other error (e.g. RuntimeError).
+    """
+
+    try:
+        rc = pytr.trexio_has_$group_dset$(trexio_file.pytrexio_s)
+        if rc == TREXIO_FAILURE:
+            raise Error(rc)
+    except:
+        raise
+
+    if rc == TREXIO_SUCCESS:
+        return True
+    else:
+        return False
+
+
+
+
+
+ +
+

3.5 Templates for front end has/read/write a dataset of strings

-
-

3.5.1 Introduction

+
+

3.5.1 Introduction

This section concerns API calls related to datasets of strings. @@ -3711,8 +4087,8 @@ This section concerns API calls related to datasets of strings.

-
-

3.5.2 C templates for front end

+
+

3.5.2 C templates for front end

First parameter is the TREXIO file handle. Second parameter is the variable to be written/read @@ -3720,12 +4096,12 @@ to/from the TREXIO file (except for trexio_has_ functi

-
-
3.5.2.1 Function declarations
+
+
3.5.2.1 Function declarations
-
-
3.5.2.2 Source code for default functions
+
+
3.5.2.2 Source code for default functions
trexio_exit_code
@@ -3979,8 +4355,8 @@ to/from the TREXIO file (except for trexio_has_ functi
 
-
-

3.5.3 Fortran templates for front end

+
+

3.5.3 Fortran templates for front end

The Fortran templates that provide an access to the C API calls from Fortran. @@ -4076,8 +4452,8 @@ These templates are based on the use of iso_c_binding. Pointers hav

-
-

3.5.4 Python templates for front end

+
+

3.5.4 Python templates for front end

def write_$group_dset$(trexio_file, dset_w: list) -> None:
@@ -4193,12 +4569,12 @@ These templates are based on the use of iso_c_binding. Pointers hav
 
-
-

3.6 Templates for front end has/read/write a single string attribute

+
+

3.6 Templates for front end has/read/write a single string attribute

-
-

3.6.1 Introduction

+
+

3.6.1 Introduction

This section concerns API calls related to string attributes. @@ -4238,16 +4614,16 @@ This section concerns API calls related to string attributes.

-
-

3.6.2 C templates for front end

+
+

3.6.2 C templates for front end

-
-
3.6.2.1 Function declarations
+
+
3.6.2.1 Function declarations
-
-
3.6.2.2 Source code for default functions
+
+
3.6.2.2 Source code for default functions
trexio_exit_code
@@ -4359,8 +4735,8 @@ This section concerns API calls related to string attributes.
 
-
-

3.6.3 Fortran templates for front end

+
+

3.6.3 Fortran templates for front end

The Fortran templates that provide an access to the C API calls from Fortran. @@ -4437,8 +4813,8 @@ These templates are based on the use of iso_c_binding. Pointers hav

-
-

3.6.4 Python templates for front end

+
+

3.6.4 Python templates for front end

def write_$group_str$(trexio_file, str_w: str) -> None:
@@ -4528,8 +4904,8 @@ These templates are based on the use of iso_c_binding. Pointers hav
 
-
-

4 Fortran helper/wrapper functions

+
+

4 Fortran helper/wrapper functions

The function below adapts the original C-based trexio_open for Fortran. @@ -4664,7 +5040,7 @@ two code are identical, i.e. if the assert statement pass.

Author: TREX-CoE

-

Created: 2021-12-23 Thu 17:49

+

Created: 2022-01-05 Wed 12:58

Validate

diff --git a/templator_hdf5.html b/templator_hdf5.html index 236df88..be77077 100644 --- a/templator_hdf5.html +++ b/templator_hdf5.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + HDF5 back end @@ -311,29 +311,29 @@ for the JavaScript code in this tag.

Table of Contents

-
-

1 HDF5 back end

+
+

1 HDF5 back end

-
-

1.1 Template for HDF5 definitions

+
+

1.1 Template for HDF5 definitions

#define $GROUP$_GROUP_NAME          "$group$"
@@ -345,8 +345,8 @@ for the JavaScript code in this tag.
 
-
-

1.2 Template for HDF5 structures

+
+

1.2 Template for HDF5 structures

typedef struct trexio_hdf5_s {
@@ -360,8 +360,8 @@ for the JavaScript code in this tag.
 
-
-

1.3 Template for HDF5 init/deinit

+
+

1.3 Template for HDF5 init/deinit

trexio_exit_code
@@ -441,8 +441,8 @@ for the JavaScript code in this tag.
 
-
-

1.4 Template for HDF5 has/read/write the numerical attribute

+
+

1.4 Template for HDF5 has/read/write the numerical attribute

trexio_exit_code
@@ -536,8 +536,8 @@ for the JavaScript code in this tag.
 
-
-

1.5 Template for HDF5 has/read/write the dataset of numerical data

+
+

1.5 Template for HDF5 has/read/write the dataset of numerical data

trexio_exit_code
@@ -660,8 +660,8 @@ for the JavaScript code in this tag.
 
-
-

1.6 Template for HDF5 has/read/write the dataset of sparse data

+
+

1.6 Template for HDF5 has/read/write the dataset of sparse data

Sparse data is stored using extensible datasets of HDF5. Extensibility is required @@ -862,8 +862,8 @@ due to the fact that the sparse data will be written in chunks of user-defined s

-
-

1.7 Template for HDF5 has/read/write the dataset of strings

+
+

1.7 Template for HDF5 has/read/write the dataset of strings

trexio_exit_code
@@ -1068,8 +1068,8 @@ due to the fact that the sparse data will be written in chunks of user-defined s
 
-
-

1.8 Template for HDF5 has/read/write the string attribute

+
+

1.8 Template for HDF5 has/read/write the string attribute

trexio_exit_code
@@ -1192,8 +1192,8 @@ due to the fact that the sparse data will be written in chunks of user-defined s
 
-
-

1.9 Helper functions

+
+

1.9 Helper functions

trexio_exit_code
@@ -1443,7 +1443,7 @@ due to the fact that the sparse data will be written in chunks of user-defined s
 

Author: TREX-CoE

-

Created: 2021-12-23 Thu 17:49

+

Created: 2022-01-05 Wed 12:58

Validate

diff --git a/templator_text.html b/templator_text.html index 4cabdda..574baa0 100644 --- a/templator_text.html +++ b/templator_text.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + TEXT back end @@ -311,28 +311,28 @@ for the JavaScript code in this tag.

Table of Contents

-
-

1 TEXT back end

+
+

1 TEXT back end

The "file" produced by the text back end is a directory with one @@ -353,8 +353,8 @@ The file is written when closed, or when the flush function is called.

-
-

1.1 Template for group-related structures in text back end

+
+

1.1 Template for group-related structures in text back end

typedef struct $group$_s {
@@ -373,8 +373,8 @@ The file is written when closed, or when the flush function is called.
 
-
-

1.2 Template for general structure in text back end

+
+

1.2 Template for general structure in text back end

typedef struct trexio_text_s {
@@ -387,8 +387,8 @@ The file is written when closed, or when the flush function is called.
 
-
-

1.3 Initialize function (constant part)

+
+

1.3 Initialize function (constant part)

trexio_exit_code
@@ -519,8 +519,8 @@ The file is written when closed, or when the flush function is called.
 
-
-

1.4 Deinitialize function (templated part)

+
+

1.4 Deinitialize function (templated part)

trexio_exit_code
@@ -542,8 +542,8 @@ The file is written when closed, or when the flush function is called.
 
-
-

1.5 Template for text read struct

+
+

1.5 Template for text read struct

$group$_t*
@@ -835,8 +835,8 @@ trexio_text_read_$group$ (trexio_text_t* 
 
-
-

1.6 Template for text flush struct

+
+

1.6 Template for text flush struct

trexio_exit_code
@@ -901,8 +901,8 @@ trexio_text_read_$group$ (trexio_text_t* 
 
-
-

1.7 Template for text free memory

+
+

1.7 Template for text free memory

Memory is allocated when reading. The following function frees memory. @@ -947,8 +947,8 @@ Memory is allocated when reading. The following function frees memory.

-
-

1.8 Template for has/read/write the numerical attribute

+
+

1.8 Template for has/read/write the numerical attribute

trexio_exit_code
@@ -1011,8 +1011,8 @@ Memory is allocated when reading. The following function frees memory.
 
-
-

1.9 Template for has/read/write the dataset of numerical data

+
+

1.9 Template for has/read/write the dataset of numerical data

The group_dset array is assumed allocated with the appropriate size. @@ -1108,8 +1108,8 @@ The group_dset array is assumed allocated with the appropriate size

-
-

1.10 Template for has/read/write the dataset of strings

+
+

1.10 Template for has/read/write the dataset of strings

The group_dset array is assumed allocated with the appropriate size. @@ -1210,8 +1210,8 @@ The group_dset array is assumed allocated with the appropriate size

-
-

1.11 Template for has/read/write the string attribute

+
+

1.11 Template for has/read/write the string attribute

trexio_exit_code
@@ -1285,8 +1285,8 @@ The group_dset array is assumed allocated with the appropriate size
 
-
-

1.12 Template for has/read/write the dataset of sparse data

+
+

1.12 Template for has/read/write the dataset of sparse data

Each sparse array is stored in a separate .txt file due to the fact that sparse I/O has to be decoupled @@ -1563,7 +1563,7 @@ User provides indices and values of the sparse array as two separate variables.

Author: TREX-CoE

-

Created: 2021-12-23 Thu 17:50

+

Created: 2022-01-05 Wed 12:58

Validate

diff --git a/trex.html b/trex.html index 1dc6b98..46be241 100644 --- a/trex.html +++ b/trex.html @@ -3,7 +3,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + TREX Configuration file @@ -333,33 +333,33 @@ for the JavaScript code in this tag.

Table of Contents

@@ -409,8 +409,8 @@ fetched using multiple function calls to perform I/O on buffers.

-
-

1 Metadata (metadata group)

+
+

1 Metadata (metadata group)

As we expect our files to be archived in open-data repositories, we @@ -420,7 +420,7 @@ which have participated to the creation of the file, a list of authors of the file, and a textual description.

- +
@@ -487,15 +487,15 @@ authors of the file, and a textual description. -
-

2 Electron (electron group)

+
+

2 Electron (electron group)

We consider wave functions expressed in the spin-free formalism, where the number of ↑ and ↓ electrons is fixed.

-
+
@@ -534,15 +534,15 @@ the number of ↑ and ↓ electrons is fixed. -
-

3 Nucleus (nucleus group)

+
+

3 Nucleus (nucleus group)

The nuclei are considered as fixed point charges. Coordinates are given in Cartesian \((x,y,z)\) format.

-
+
@@ -609,8 +609,8 @@ given in Cartesian \((x,y,z)\) format. -
-

4 Effective core potentials (ecp group)

+
+

4 Effective core potentials (ecp group)

An effective core potential (ECP) \(V_A^{\text{ECP}}\) replacing the @@ -643,7 +643,7 @@ The functions \(V_{A\ell}\) are parameterized as: See http://dx.doi.org/10.1063/1.4984046 or https://doi.org/10.1063/1.5121006 for more info.

-
+
@@ -741,8 +741,8 @@ The latter causes issues when written before ang_mom in the TREXIO

-
-

4.1 Example

+
+

4.1 Example

For example, consider H2 molecule with the following @@ -805,8 +805,8 @@ power = [

-
-

5 Basis set (basis group)

+
+

5 Basis set (basis group)

We consider here basis functions centered on nuclei. Hence, we enable @@ -859,7 +859,7 @@ If the the basis function is not considered normalized, \(\mathcal{N}_s=1\). All the basis set parameters are stored in one-dimensional arrays:

-
+
@@ -953,8 +953,8 @@ All the basis set parameters are stored in one-dimensional arrays:
-
-

5.1 Example

+
+

5.1 Example

For example, consider H2 with the following basis set (in GAMESS @@ -1032,8 +1032,8 @@ prim_factor =

-
-

6 Atomic orbitals (ao group)

+
+

6 Atomic orbitals (ao group)

Going from the atomic basis set to AOs implies a systematic @@ -1081,13 +1081,13 @@ shell, as in the GAMESS convention where

In such a case, one should set the normalization of the shell (in -the Basis set section) to \(\mathcal{N}_{z^2}\), which is the +the Basis set section) to \(\mathcal{N}_{z^2}\), which is the normalization factor of the atomic orbitals in spherical coordinates. The normalization factor of the \(xy\) function which should be introduced here should be \(\frac{\mathcal{N}_{xy}}{\mathcal{N}_{z^2}}\).

- +
@@ -1139,8 +1139,8 @@ introduced here should be \(\frac{\mathcal{N}_{xy}}{\mathcal{N}_{z^2}}\).
-
-

6.1 One-electron integrals (ao_1e_int group)

+
+

6.1 One-electron integrals (ao_1e_int group)

  • \[ \hat{V}_{\text{ne}} = \sum_{A=1}^{N_\text{nucl}} @@ -1158,7 +1158,7 @@ The one-electron integrals for a one-electron operator \(\hat{O}\) are over atomic orbitals.

    - +
    @@ -1225,8 +1225,8 @@ over atomic orbitals. -
    -

    6.2 Two-electron integrals (ao_2e_int group)

    +
    +

    6.2 Two-electron integrals (ao_2e_int group)

    The two-electron integrals for a two-electron operator \(\hat{O}\) are @@ -1247,7 +1247,7 @@ notation. \mathbf{r}_j \vert)}{\vert \mathbf{r}_i - \mathbf{r}_j \vert} \] : electron-electron long range potential -

    +
    @@ -1287,10 +1287,10 @@ notation. -
    -

    7 Molecular orbitals (mo group)

    +
    +

    7 Molecular orbitals (mo group)

    -
    +
    @@ -1356,8 +1356,8 @@ notation.
-
-

7.1 One-electron integrals (mo_1e_int group)

+
+

7.1 One-electron integrals (mo_1e_int group)

The operators as the same as those defined in the @@ -1365,7 +1365,7 @@ The operators as the same as those defined in the the basis of molecular orbitals.

- +
@@ -1432,8 +1432,8 @@ the basis of molecular orbitals. -
-

7.2 Two-electron integrals (mo_2e_int group)

+
+

7.2 Two-electron integrals (mo_2e_int group)

The operators as the same as those defined in the @@ -1441,7 +1441,7 @@ The operators as the same as those defined in the the basis of molecular orbitals.

-
+
@@ -1481,13 +1481,13 @@ the basis of molecular orbitals. -
-

8 TODO Slater determinants

+
+

8 TODO Slater determinants

-
-

9 Reduced density matrices (rdm group)

+
+

9 Reduced density matrices (rdm group)

-
+
@@ -1563,7 +1563,7 @@ the basis of molecular orbitals.

Author: TREX-CoE

-

Created: 2021-12-23 Thu 17:50

+

Created: 2022-01-05 Wed 12:58

Validate