def test_gen_fortran_one_arg_func(): one_arg = pyf.Subroutine( name='one_arg', args=[pyf.Argument(name='a', dtype=pyf.default_integer, intent="in")]) one_arg_wrapped = fc_wrap.SubroutineWrapper(wrapped=one_arg) buf = CodeBuffer() one_arg_wrapped.generate_wrapper(buf) fort_file = '''\ subroutine one_arg_c(a, fw_iserr__, fw_errstr__) bind(c, name="one_arg_c") use fwrap_ktp_mod implicit none integer(kind=fwi_integer_t), intent(in) :: a integer(kind=fwi_integer_t), intent(out) :: fw_iserr__ character(kind=fw_character_t, len=1), dimension(fw_errstr_len) :: fw_errstr__ interface subroutine one_arg(a) use fwrap_ktp_mod implicit none integer(kind=fwi_integer_t), intent(in) :: a end subroutine one_arg end interface fw_iserr__ = FW_INIT_ERR__ call one_arg(a) fw_iserr__ = FW_NO_ERR__ end subroutine one_arg_c ''' compare(fort_file, buf.getvalue())
def test_assumed_shape_int_array(): arr_arg = pyf.Subroutine(name='arr_arg', args=[ pyf.Argument(name='arr', dtype=pyf.default_integer, dimension=(':', ':'), intent="inout") ]) arr_arg_wrapped = fc_wrap.SubroutineWrapper(wrapped=arr_arg) buf = CodeBuffer() arr_arg_wrapped.generate_wrapper(buf) fort_file = '''\ subroutine arr_arg_c(arr_d1, arr_d2, arr, fw_iserr__, fw_errstr__) bind(c, name="arr_arg_c") use fwrap_ktp_mod implicit none integer(kind=fwi_npy_intp_t), intent(in) :: arr_d1 integer(kind=fwi_npy_intp_t), intent(in) :: arr_d2 integer(kind=fwi_integer_t), dimension(arr_d1, arr_d2), intent(inout) :: arr integer(kind=fwi_integer_t), intent(out) :: fw_iserr__ character(kind=fw_character_t, len=1), dimension(fw_errstr_len) :: fw_errstr__ interface subroutine arr_arg(arr) use fwrap_ktp_mod implicit none integer(kind=fwi_integer_t), dimension(:, :), intent(inout) :: arr end subroutine arr_arg end interface fw_iserr__ = FW_INIT_ERR__ call arr_arg(arr) fw_iserr__ = FW_NO_ERR__ end subroutine arr_arg_c ''' compare(fort_file, buf.getvalue())
def test_logical_wrapper(): args = [ pyf.Argument(name='lgcl', dtype=pyf.LogicalType(fw_ktp='lgcl_ktp'), intent="inout") ] lgcl_arg = pyf.Subroutine(name='lgcl_arg', args=args) lgcl_arg_wrapped = fc_wrap.SubroutineWrapper(wrapped=lgcl_arg) buf = CodeBuffer() lgcl_arg_wrapped.generate_wrapper(buf) fort_file = '''\ subroutine lgcl_arg_c(lgcl, fw_iserr__, fw_errstr__) bind(c, name="lgcl_arg_c") use fwrap_ktp_mod implicit none type(c_ptr), value :: lgcl integer(kind=fwi_integer_t), intent(out) :: fw_iserr__ character(kind=fw_character_t, len=1), dimension(fw_errstr_len) :: fw_errstr__ interface subroutine lgcl_arg(lgcl) use fwrap_ktp_mod implicit none logical(kind=fwl_lgcl_ktp_t), intent(inout) :: lgcl end subroutine lgcl_arg end interface logical(kind=fwl_lgcl_ktp_t), pointer :: fw_lgcl fw_iserr__ = FW_INIT_ERR__ call c_f_pointer(lgcl, fw_lgcl) call lgcl_arg(fw_lgcl) fw_iserr__ = FW_NO_ERR__ end subroutine lgcl_arg_c ''' compare(fort_file, buf.getvalue())
def test_intent_hide(): hide_arg_subr = pyf.Subroutine('hide_subr', args=[ pyf.HiddenArgument( 'hide_arg', dtype=pyf.default_integer, intent='hide', value='10') ]) wppr = fc_wrap.SubroutineWrapper(wrapped=hide_arg_subr) buf = CodeBuffer() wppr.generate_wrapper(buf) check = '''\ subroutine hide_subr_c(fw_iserr__, fw_errstr__) bind(c, name="hide_subr_c") use fwrap_ktp_mod implicit none integer(kind=fwi_integer_t), intent(out) :: fw_iserr__ character(kind=fw_character_t, len=1), dimension(fw_errstr_len) :: fw_errstr__ interface subroutine hide_subr(hide_arg) use fwrap_ktp_mod implicit none integer(kind=fwi_integer_t) :: hide_arg end subroutine hide_subr end interface integer(kind=fwi_integer_t) :: hide_arg fw_iserr__ = FW_INIT_ERR__ hide_arg = (10) call hide_subr(hide_arg) fw_iserr__ = FW_NO_ERR__ end subroutine hide_subr_c ''' compare(check, buf.getvalue())
def test_empty_ret(self): int_args_in = [ pyf.Argument('a1', pyf.default_integer, 'in'), pyf.Argument('a2', pyf.default_integer, 'in') ] subr = pyf.Subroutine(name='dummy', args=int_args_in) fc_wrapper = fc_wrap.SubroutineWrapper(wrapped=subr) cy_wrapper = cy_wrap.ProcWrapper(wrapped=fc_wrapper) eq_(cy_wrapper.return_tuple(), '')
def test_pds_declare(self): args = [ pyf.Argument('array', dtype=pyf.default_integer, dimension=['p3']) ] subr = pyf.Subroutine(name='subr', args=args, params=self.params) subr_wrapper = fc_wrap.SubroutineWrapper(wrapped=subr) pds = [ 'integer(kind=fwi_integer_t), parameter :: p1 = 1', 'integer(kind=fwi_integer_t), parameter :: p2 = p1**2-1', 'integer(kind=fwi_integer_t), parameter :: p3 = p1+p2' ] eq_(subr_wrapper.param_declarations(), pds)
def test_empty_subr_dstring(self): subr = pyf.Subroutine("empty", args=()) fs = fc_wrap.SubroutineWrapper(subr) cs = cy_wrap.ProcWrapper(fs) eq_(cs.dstring_signature(), ["empty()"]) dstring = '''\ empty() Parameters ---------- None ''' compare("\n".join(cs.docstring()), dstring)
def test_c_prototype_empty(self): return_arg = pyf.Argument(name="empty_func", dtype=pyf.default_integer) empty_func = pyf.Function(name='empty_func', args=(), return_arg=return_arg) empty_func_wrapper = fc_wrap.FunctionWrapper(wrapped=empty_func) eq_(empty_func_wrapper.c_prototype(), ( 'void empty_func_c(fwi_integer_t *, fwi_integer_t *, fw_character_t *);' )) empty_subr = pyf.Subroutine(name='empty_subr', args=()) empty_subr_wrapper = fc_wrap.SubroutineWrapper(wrapped=empty_subr) eq_(empty_subr_wrapper.c_prototype(), 'void empty_subr_c(fwi_integer_t *, fw_character_t *);')
def test_explicit_shape_int_array(): args = [ pyf.Argument(name='arr', dtype=pyf.default_integer, dimension=('d1', 'd2'), intent="inout"), pyf.Argument(name='d1', dtype=pyf.default_integer, intent='in'), pyf.Argument(name='d2', dtype=pyf.default_integer, intent='in') ] arr_arg = pyf.Subroutine(name='arr_arg', args=args) arr_arg_wrapped = fc_wrap.SubroutineWrapper(wrapped=arr_arg) buf = CodeBuffer() arr_arg_wrapped.generate_wrapper(buf) fort_file = '''\ subroutine arr_arg_c(arr_d1, arr_d2, arr, d1, d2, fw_iserr__, fw_errstr__) bind(c, name="arr_arg_c") use fwrap_ktp_mod implicit none integer(kind=fwi_npy_intp_t), intent(in) :: arr_d1 integer(kind=fwi_npy_intp_t), intent(in) :: arr_d2 integer(kind=fwi_integer_t), dimension(arr_d1, arr_d2), intent(inout) :: arr integer(kind=fwi_integer_t), intent(in) :: d1 integer(kind=fwi_integer_t), intent(in) :: d2 integer(kind=fwi_integer_t), intent(out) :: fw_iserr__ character(kind=fw_character_t, len=1), dimension(fw_errstr_len) :: fw_errstr__ interface subroutine arr_arg(arr, d1, d2) use fwrap_ktp_mod implicit none integer(kind=fwi_integer_t), intent(in) :: d1 integer(kind=fwi_integer_t), intent(in) :: d2 integer(kind=fwi_integer_t), dimension(d1, d2), intent(inout) :: arr end subroutine arr_arg end interface fw_iserr__ = FW_INIT_ERR__ if ((d1) .ne. (arr_d1) .or. (d2) .ne. (arr_d2)) then fw_iserr__ = FW_ARR_DIM__ fw_errstr__ = transfer("arr ", fw_errstr__) fw_errstr__(fw_errstr_len) = C_NULL_CHAR return endif call arr_arg(arr, d1, d2) fw_iserr__ = FW_NO_ERR__ end subroutine arr_arg_c ''' compare(fort_file, buf.getvalue())
def setup(self): int_arg_in = pyf.Argument("int_arg_in", pyf.default_integer, 'in') int_arg_inout = pyf.Argument("int_arg_inout", pyf.default_integer, 'inout') int_arg_out = pyf.Argument("int_arg_out", pyf.default_integer, 'out') real_arg = pyf.Argument("real_arg", pyf.default_real) all_args = [int_arg_in, int_arg_inout, int_arg_out, real_arg] return_arg = pyf.Argument(name="fort_func", dtype=pyf.default_integer) pyf_func = pyf.Function(name="fort_func", args=all_args, return_arg=return_arg) func_wrapper = fc_wrap.FunctionWrapper(wrapped=pyf_func) self.cy_func_wrapper = cy_wrap.ProcWrapper(wrapped=func_wrapper) pyf_subr = pyf.Subroutine(name="fort_subr", args=all_args) subr_wrapper = fc_wrap.SubroutineWrapper(wrapped=pyf_subr) self.cy_subr_wrapper = cy_wrap.ProcWrapper(wrapped=subr_wrapper)
def test_many_arrays(): args = [ pyf.Argument('assumed_size', pyf.default_integer, "inout", dimension=('d1', '*')), pyf.Argument('d1', pyf.default_integer, 'in'), pyf.Argument('assumed_shape', pyf.default_logical, 'out', dimension=(':', ':')), pyf.Argument('explicit_shape', pyf.default_complex, 'inout', ('c1', 'c2')), pyf.Argument('c1', pyf.default_integer, 'inout'), pyf.Argument('c2', pyf.default_integer) ] arr_args = pyf.Subroutine(name='arr_args', args=args) arr_args_wrapped = fc_wrap.SubroutineWrapper(wrapped=arr_args) buf = CodeBuffer() arr_args_wrapped.generate_wrapper(buf) compare(many_arrays_text, buf.getvalue())
def test_pds_no_declare(self): subr = pyf.Subroutine(name='subr', args=(), params=self.params) subr_wrapper = fc_wrap.SubroutineWrapper(wrapped=subr) eq_(subr_wrapper.param_declarations(), [])