Skip to content

Commit 5f97d09

Browse files
committed
working on f2py interface
1 parent 90fd216 commit 5f97d09

7 files changed

Lines changed: 126 additions & 5 deletions

File tree

.f2py_f2cmap

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
dict(
2+
real=dict(
3+
real64="double",
4+
real32="float",
5+
c_double="double",
6+
c_float="float"),
7+
integer=dict(
8+
int64="long long",
9+
int32="int",
10+
c_int="int",
11+
c_long="long",
12+
c_intptr_t="long long",
13+
c_long_long="long long"),
14+
logical=dict(
15+
c_bool="int"),
16+
)

build_f2py.sh

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#!/bin/bash
2+
set -e
3+
4+
# Build Fortran library with fpm
5+
fpm install --prefix ./install --profile release
6+
7+
# Build f2py extension
8+
python -m numpy.f2py -c \
9+
--include-paths $(pwd)/install/include \
10+
$(pwd)/src/simulated_annealing.pyf \
11+
$(pwd)/install/lib/libsimulated-annealing.a
12+
13+
mv $(pwd)/simulated_annealing_f2py.*.so $(pwd)/sa_fortran

env/pixi.lock

Lines changed: 23 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

env/pixi.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,4 @@ python = ">=3.14.3,<3.15"
1313
matplotlib = ">=3.10.8,<4"
1414
pandas = ">=3.0.1,<4"
1515
hatch = ">=1.16.5,<2"
16+
meson = ">=1.10.1,<2"

sa_fortran/__init__.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44
`fpm install --prefix ./sa_fortran/lib --profile release`
55
"""
66

7-
from .interface import (sa_fortran,
8-
CALLBACK_FUNC,
9-
CALLBACK_N_INPUTS,
10-
CALLBACK_PARALLEL_INPUT,
11-
CALLBACK_PARALLEL_OUTPUT)
7+
from .ctypes_interface import (sa_fortran,
8+
CALLBACK_FUNC,
9+
CALLBACK_N_INPUTS,
10+
CALLBACK_PARALLEL_INPUT,
11+
CALLBACK_PARALLEL_OUTPUT)
1212

1313
__version__ = '0.0.1'
1414

src/simulated_annealing.pyf

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
! -*- f90 -*-
2+
! Note: the context of this file is case sensitive.
3+
4+
python module simulated_annealing_f2py ! in
5+
interface ! in :simulated_annealing_f2py
6+
module simulated_annealing_module_c ! in :simulated_annealing_f2py:src/simulated_annealing_module_c.f90
7+
use iso_c_binding
8+
9+
subroutine initialize_simulated_annealing(iproblem,n,lb,ub,c,maximize,eps,ns,nt,neps,maxevl,iprint,iseed1,iseed2,step_mode,vms,iunit,use_initial_guess,n_resets,cooling_schedule,cooling_param,optimal_f_specified,optimal_f,optimal_f_tol,distribution_mode,dist_std_dev,dist_scale,dist_shape,fcn,n_inputs_to_send,fcn_parallel_input,fcn_parallel_output) ! in :simulated_annealing_f2py:src/simulated_annealing_module_c.f90:simulated_annealing_module_c
10+
integer(c_intptr_t) intent(out) :: iproblem
11+
integer(c_int) intent(in) :: n
12+
real(c_double) dimension(n),intent(in) :: lb
13+
real(c_double) dimension(n),intent(in) :: ub
14+
real(c_double) dimension(n),intent(in) :: c
15+
integer intent(in) :: maximize
16+
real(c_double) intent(in) :: eps
17+
integer(c_int) intent(in) :: ns
18+
integer(c_int) intent(in) :: nt
19+
integer(c_int) intent(in) :: neps
20+
integer(c_int) intent(in) :: maxevl
21+
integer(c_int) intent(in) :: iprint
22+
integer(c_int) intent(in) :: iseed1
23+
integer(c_int) intent(in) :: iseed2
24+
integer(c_int) intent(in) :: step_mode
25+
real(c_double) intent(in) :: vms
26+
integer(c_int) intent(in) :: iunit
27+
integer intent(in) :: use_initial_guess
28+
integer(c_int) intent(in) :: n_resets
29+
integer(c_int) intent(in) :: cooling_schedule
30+
real(c_double) intent(in) :: cooling_param
31+
integer intent(in) :: optimal_f_specified
32+
real(c_double) intent(in) :: optimal_f
33+
real(c_double) intent(in) :: optimal_f_tol
34+
integer(c_int) dimension(n),intent(in),depend(n) :: distribution_mode
35+
real(c_double) dimension(n),intent(in),depend(n) :: dist_std_dev
36+
real(c_double) dimension(n),intent(in),depend(n) :: dist_scale
37+
real(c_double) dimension(n),intent(in),depend(n) :: dist_shape
38+
integer(c_intptr_t) intent(in) :: fcn
39+
integer(c_intptr_t) intent(in) :: n_inputs_to_send
40+
integer(c_intptr_t) intent(in) :: fcn_parallel_input
41+
integer(c_intptr_t) intent(in) :: fcn_parallel_output
42+
end subroutine initialize_simulated_annealing
43+
44+
subroutine destroy_simulated_annealing(iproblem) ! in :simulated_annealing_f2py:src/simulated_annealing_module_c.f90:simulated_annealing_module_c
45+
integer(c_intptr_t) intent(in) :: iproblem
46+
end subroutine destroy_simulated_annealing
47+
48+
subroutine solve_simulated_annealing(iproblem,n,x,rt,t,vm,xopt,fopt,nacc,nfcnev,ier) ! in :simulated_annealing_f2py:src/simulated_annealing_module_c.f90:simulated_annealing_module_c
49+
integer(c_intptr_t) intent(in) :: iproblem
50+
integer(c_int) intent(in) :: n
51+
real(c_double) dimension(n),intent(in,out),depend(n) :: x
52+
real(c_double) intent(in) :: rt
53+
real(c_double) intent(in,out) :: t
54+
real(c_double) dimension(n),intent(in,out),depend(n) :: vm
55+
real(c_double) dimension(n),intent(out),depend(n) :: xopt
56+
real(c_double) intent(out) :: fopt
57+
integer(c_int) intent(out) :: nacc
58+
integer(c_int) intent(out) :: nfcnev
59+
integer(c_int) intent(out) :: ier
60+
end subroutine solve_simulated_annealing
61+
62+
end module simulated_annealing_module_c
63+
end interface
64+
end python module simulated_annealing_f2py
65+
66+
! This file was auto-generated with f2py (version:2).
67+
! See:
68+
! https://web.archive.org/web/20140822061353/http://cens.ioc.ee/projects/f2py2e

0 commit comments

Comments
 (0)