Module riskmodels.c_build.build_bivarmargins

Expand source code
from cffi import FFI
import os

from pathlib import Path

project_dir = Path(__file__).resolve().parents[2]

ffibuilder = FFI()

ffibuilder.cdef(
    """ 

        double triangle_prob_py_interface(
            int origin_x,
            int origin_y,
            int triangle_length,
            int min_gen1,
            int min_gen2,
            int max_gen1,
            int max_gen2,
            double* gen1_cdf_array,
            double* gen2_cdf_array);

        double cond_eeu_veto_py_interface(
          int v1,
          int v2,
          int c,
          int min_gen1,
          int min_gen2,
          int max_gen1,
          int max_gen2,
          double* gen1_cdf_array,
          double* gen2_cdf_array,
          double* gen1_expectation);

        double cond_eeu_share_py_interface(
          int d1, 
          int d2,
          int v1,
          int v2,
          int c,
          int min_gen1,
          int min_gen2,
          int max_gen1,
          int max_gen2,
          double* gen1_cdf_array,
          double* gen2_cdf_array,
          double* gen1_expectation);

        double trapezoid_prob_py_interface(
          int ul_x,
          int ul_y,
          int width,
          int min_gen1,
          int min_gen2,
          int max_gen1,
          int max_gen2,
          double* gen1_cdf_array,
          double* gen2_cdf_array);

        void region_simulation_py_interface(
          int n,
          int* simulations,
          int min_gen1,
          int min_gen2,
          int max_gen1,
          int max_gen2,
          double* gen1_cdf_array,
          double* gen2_cdf_array,
          int* net_demand,
          int* demand,
          int* row_weights,
          int n_rows,
          int m1,
          int m2,
          int c,
          int seed,
          int intersection,
          int share_policy);

        void conditioned_simulation_py_interface(
          int n,
          int* simulations,
          int min_gen1,
          int min_gen2,
          int max_gen1,
          int max_gen2,
          double* gen1_cdf_array,
          double* gen2_cdf_array,
          int* net_demand,
          int* demand,
          int* row_weights,
          int n_rows,
          int m1,
          int c,
          int seed,
          int share_policy);

        double cond_bivariate_power_margin_cdf_py_interface(
          int min_gen1,
          int min_gen2,
          int max_gen1,
          int max_gen2,
          double* gen1_cdf_array,
          double* gen2_cdf_array,
          int v1,
          int v2,
          int d1,
          int d2,
          int m1,
          int m2,
          int c,
          int share_policy);

        """
)

# with open('riskmodels/_c/libbivarmargins.h','r') as f:
#       ffibuilder.cdef(f.read())

header = f'#include "{project_dir / "riskmodels" / "c" / "libbivarmargins.h"}"'

ffibuilder.set_source(
    "c_bivariate_surplus_api",  # name of the output C extension
    # """
    # #include "../../riskmodels/_c/libbivarmargins.h"
    # """,
    header,
    sources=[
        "riskmodels/c/libbivarmargins.c",
        "riskmodels/c/libunivarmargins.c",
        "riskmodels/c/mtwist-1.5/mtwist.c",
    ],
    libraries=["m"],
)  # on Unix, link with the math library

if __name__ == "__main__":
    ffibuilder.compile(verbose=True)