%load_ext fortranmagic from numpy import array, size, shape, min, max, sum a = array([1, 2, 3]) print shape(a) print size(a) print max(a) print min(a) print sum(a) %%fortran integer :: a(3) a = [1, 2, 3] print *, shape(a) print *, size(a) print *, maxval(a) print *, minval(a) print *, sum(a) from numpy import reshape a = reshape([1, 2, 3, 4, 5, 6], (2, 3)) b = reshape([1, 2, 3, 4, 5, 6], (2, 3), order="F") print a[0, :] print a[1, :] print print b[0, :] print b[1, :] %%fortran integer :: a(2, 3), b(2, 3) a = reshape([1, 2, 3, 4, 5, 6], [2, 3], order=[2, 1]) b = reshape([1, 2, 3, 4, 5, 6], [2, 3]) print *, a(1, :) print *, a(2, :) print * print *, b(1, :) print *, b(2, :) from numpy import array, size, shape, max, min a = array([[1, 2, 3], [4, 5, 6]]) print shape(a) print size(a, 0) print size(a, 1) print max(a) print min(a) print a[0, 0], a[0, 1], a[0, 2] print a[1, 0], a[1, 1], a[1, 2] print a %%fortran integer :: a(2, 3) a = reshape([1, 2, 3, 4, 5, 6], [2, 3], order=[2, 1]) print *, shape(a) print *, size(a, 1) print *, size(a, 2) print *, maxval(a) print *, minval(a) print *, a(1, 1), a(1, 2), a(1, 3) print *, a(2, 1), a(2, 2), a(2, 3) print "(3i5)", transpose(a) from numpy import array, dot a = array([[1, 2], [3, 4]]) b = array([[2, 3], [4, 5]]) print a * b print dot(a, b) %%fortran integer :: a(2, 2), b(2, 2) a = reshape([1, 2, 3, 4], [2, 2], order=[2, 1]) b = reshape([2, 3, 4, 5], [2, 2], order=[2, 1]) print *, a * b print *, matmul(a, b) %%fortran module a implicit none integer :: i = 5 contains integer function f(x) result(r) integer, intent(in) :: x r = x + 5 end function integer function g(x) result(r) integer, intent(in) :: x r = x - 5 end function end module program main use a, only: f, i implicit none print *, f(3) print *, i end program %%fortran program test use types, only: dp implicit none real(dp) x x = 5.3_dp print *, x end %%fortran use types, only: dp real(dp) x x = 5.3_dp print *, x %%fortran use types, only: dp use constants, only: pi, i_ complex(dp) x x = exp(pi*i_) print *, x from cmath import exp, pi x = exp(pi*1j) print x %%fortran print *, i ! undefined variable %%fortran use types, only: dp real(dp) :: x x = 5 print *, x print *, i ! undefined variable %%fortran integer :: i i = "str" %%fortran use types, only: dp real(dp) x(5) x = [1, 2, 3, 4, 5] print *, "OK:", x x = [1, 2, 3, 4, 5, 6] print *, "FAIL:", x %%fortran use types, only: dp real(dp) x(5) x = [1, 2, 3, 4, 5] x(5) = 0 print *, "OK:", x x(6) = 0 ! Fails %%fortran program test use types, only: dp implicit none real(dp) x(5) x = [1, 2, 3, 4, 5] call modify(x, 5) print *, "OK:", x call modify(x, 6) ! Fails contains subroutine modify(a, i) real(dp), intent(inout) :: a(:) integer, intent(in) :: i a(i) = 0 end subroutine end program