In [3]:
%install_ext https://raw.github.com/mgaitan/fortran_magic/master/fortranmagic.py


Installed fortranmagic.py. To use it, type:
  %load_ext fortranmagic

In [1]:
%load_ext fortranmagic



In [8]:
%%fortran
SUBROUTINE fortran_bubblesort(a,n)
  INTEGER, INTENT(in) :: n
  REAL, INTENT(in out), DIMENSION(n) :: a
  REAL :: temp
  INTEGER :: i, j
  LOGICAL :: swapped = .TRUE.

  DO j = SIZE(a)-1, 1, -1
    swapped = .FALSE.
    DO i = 1, j
      IF (a(i) > a(i+1)) THEN
        temp = a(i)
        a(i) = a(i+1)
        a(i+1) = temp
        swapped = .TRUE.
      END IF
    END DO
    IF (.NOT. swapped) EXIT
  END DO
END SUBROUTINE fortran_bubblesort


	Building module "_fortran_magic_eacc152546f5b4ce3887a88328b3b722"...
		Constructing wrapper function "fortran_bubblesort"...
		  fortran_bubblesort(a,[n])
	Wrote C/API module "_fortran_magic_eacc152546f5b4ce3887a88328b3b722" to file "/var/folders/5k/0pmyxbls5tg39vdv6vl3pnvh0000gn/T/tmp9uofzdg4/src.macosx-10.5-x86_64-3.4/_fortran_magic_eacc152546f5b4ce3887a88328b3b722module.c"

In [3]:
import numpy as np

In [9]:
x = np.asfortranarray([3,2,1])
y = fortran_bubblesort(x, x.shape[0])
print(x, y)


[3 2 1] None

In [18]:
b = [3,2,1]

fortran_bubblesort(x)

In [13]:
%%fortran
SUBROUTINE fortran_sum(x, y, z)
    REAL, INTENT(in) :: x,y
    REAL, INTENT(out) :: z

    z = x + y

END SUBROUTINE fortran_sum


	Building module "_fortran_magic_cbd5da19d6bdeed499c21d8d173922e1"...
		Constructing wrapper function "fortran_sum"...
		  z = fortran_sum(x,y)
	Wrote C/API module "_fortran_magic_cbd5da19d6bdeed499c21d8d173922e1" to file "/var/folders/5k/0pmyxbls5tg39vdv6vl3pnvh0000gn/T/tmpr41j973c/src.macosx-10.5-x86_64-3.4/_fortran_magic_cbd5da19d6bdeed499c21d8d173922e1module.c"

In [15]:
fortran_sum(3, 4)


Out[15]:
7.0

In [ ]: