示例#1
0
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())
示例#2
0
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())
示例#3
0
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())
示例#4
0
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())
示例#5
0
 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(), '')
示例#6
0
 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)
示例#7
0
    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)
示例#8
0
 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 *);')
示例#9
0
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())
示例#10
0
    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)
示例#11
0
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())
示例#12
0
 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(), [])