diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
 # Changelog for `jacobi-elliptic`
 
+
+## 0.1.1.0 - 2023-02-27
+
+Added the amplitude function.
+
+
 ## 0.1.0.0 - 2023-02-20
 
 First release.
diff --git a/jacobi-elliptic.cabal b/jacobi-elliptic.cabal
--- a/jacobi-elliptic.cabal
+++ b/jacobi-elliptic.cabal
@@ -1,5 +1,5 @@
 name:                jacobi-elliptic
-version:             0.1.0.0
+version:             0.1.1.0
 synopsis:            Neville Theta Functions and Jacobi Elliptic Functions
 description:         Evaluation of the Neville theta functions and the Jacobi elliptic functions.
 homepage:            https://github.com/stla/jacobi-elliptic#readme
@@ -19,7 +19,7 @@
   exposed-modules:     Math.NevilleTheta
                      , Math.JacobiElliptic
   build-depends:       base >= 4.7 && < 5
-                     , jacobi-theta >= 0.1.0.0
+                     , jacobi-theta >= 0.1.1.0
                      , elliptic-integrals >= 0.1.0.0
   default-language:    Haskell2010
   ghc-options:         -Wall
@@ -41,6 +41,7 @@
                       , tasty
                       , tasty-hunit
                       , jacobi-elliptic
+                      , elliptic-integrals
   Default-Language:     Haskell2010
 
 source-repository head
diff --git a/src/Math/JacobiElliptic.hs b/src/Math/JacobiElliptic.hs
--- a/src/Math/JacobiElliptic.hs
+++ b/src/Math/JacobiElliptic.hs
@@ -1,27 +1,27 @@
 module Math.JacobiElliptic
     ( jellip,
-      jellip'
+      jellip',
+      am
     ) where
-import Data.Complex ( Complex )
+import Data.Complex       ( Complex, realPart, imagPart )
 import Math.NevilleTheta
-    ( theta_c,
-      theta_d,
-      theta_n,
-      theta_s,
-      theta_c',
-      theta_d',
-      theta_n',
-      theta_s' )
+                          ( theta_c,
+                            theta_d,
+                            theta_n,
+                            theta_s,
+                            theta_c',
+                            theta_d',
+                            theta_n',
+                            theta_s' )
 
-type Cplx = Complex Double
 
 -- | Jacobi elliptic function in terms of the nome.
 jellip :: 
      Char -- ^ a letter among 'c', 'd', 'n', 's' identifying the Neville function at the numerator
   -> Char -- ^ a letter among 'c', 'd', 'n', 's' identifying the Neville function at the denominator
-  -> Cplx -- ^ z, the variable
-  -> Cplx -- ^ q, the nome
-  -> Cplx
+  -> Complex Double -- ^ z, the variable
+  -> Complex Double -- ^ q, the nome
+  -> Complex Double
 jellip p q z nome = 
   theta_num z nome / theta_den z nome
   where
@@ -42,9 +42,9 @@
 jellip' :: 
      Char -- ^ a letter among 'c', 'd', 'n', 's' identifying the Neville function at the numerator
   -> Char -- ^ a letter among 'c', 'd', 'n', 's' identifying the Neville function at the denominator
-  -> Cplx -- ^ z, the variable
-  -> Cplx -- ^ m, the squared modulus
-  -> Cplx
+  -> Complex Double -- ^ z, the variable
+  -> Complex Double -- ^ m, the squared modulus
+  -> Complex Double
 jellip' p q z m = 
   theta_num z m / theta_den z m
   where
@@ -60,3 +60,14 @@
       'n' -> theta_n'
       's' -> theta_s'
       _   -> error "Invalid denominator identifier."
+
+-- | The amplitude function.
+am ::
+     Complex Double -- ^ u, a complex number 
+  -> Complex Double -- ^ m, the squared elliptic modulus
+  -> Complex Double
+am u m = fromInteger ((-1)^k) * w + k' * pi
+  where
+    k = round (realPart u / pi) + round (imagPart u / pi)
+    k' = fromInteger k
+    w = asin (jellip' 's' 'n' u m)
diff --git a/src/Math/NevilleTheta.hs b/src/Math/NevilleTheta.hs
--- a/src/Math/NevilleTheta.hs
+++ b/src/Math/NevilleTheta.hs
@@ -13,22 +13,21 @@
 import Math.JacobiTheta
     ( jtheta1, jtheta1Dash, jtheta2, jtheta3, jtheta4 )
 
-type Cplx = Complex Double
 
-i_ :: Cplx
+i_ :: Complex Double
 i_ = 0.0 :+ 1.0
 
-tauFromM :: Cplx -> Cplx
+tauFromM :: Complex Double -> Complex Double
 tauFromM m = i_ * ellipticF (pi/2) (1 - m) / ellipticF (pi/2) m
 
-nomeFromM :: Cplx -> Cplx
+nomeFromM :: Complex Double -> Complex Double
 nomeFromM m = exp (i_ * pi * tauFromM m)
 
 -- | Neville theta-c function in terms of the nome.
 theta_c :: 
-     Cplx -- ^ z
-  -> Cplx -- ^ q, the nome
-  -> Cplx
+     Complex Double -- ^ z
+  -> Complex Double -- ^ q, the nome
+  -> Complex Double
 theta_c z q = 
   jtheta2 z' q / jtheta2 0 q
   where
@@ -37,9 +36,9 @@
 
 -- | Neville theta-d function in terms of the nome.
 theta_d :: 
-     Cplx -- ^ z
-  -> Cplx -- ^ q, the nome
-  -> Cplx
+     Complex Double -- ^ z
+  -> Complex Double -- ^ q, the nome
+  -> Complex Double
 theta_d z q = 
   jtheta3 z' q / jtheta3 0 q
   where
@@ -48,9 +47,9 @@
 
 -- | Neville theta-n function in terms of the nome.
 theta_n :: 
-     Cplx -- ^ z
-  -> Cplx -- ^ q, the nome
-  -> Cplx
+     Complex Double -- ^ z
+  -> Complex Double -- ^ q, the nome
+  -> Complex Double
 theta_n z q = 
   jtheta4 z' q / jtheta4 0 q
   where
@@ -59,9 +58,9 @@
 
 -- | Neville theta-d function in terms of the nome.
 theta_s :: 
-     Cplx -- ^ z
-  -> Cplx -- ^ q, the nome
-  -> Cplx
+     Complex Double -- ^ z
+  -> Complex Double -- ^ q, the nome
+  -> Complex Double
 theta_s z q = 
   j3sq * jtheta1 z' q / jtheta1Dash 0 q
   where
@@ -71,28 +70,28 @@
 
 -- | Neville theta-c function in terms of the squared modulus.
 theta_c' :: 
-     Cplx -- ^ z
-  -> Cplx -- ^ m, the squared modulus
-  -> Cplx
+     Complex Double -- ^ z
+  -> Complex Double -- ^ m, the squared modulus
+  -> Complex Double
 theta_c' z m = theta_c z (nomeFromM m)
 
 -- | Neville theta-d function in terms of the squared modulus.
 theta_d' :: 
-     Cplx -- ^ z
-  -> Cplx -- ^ m, the squared modulus
-  -> Cplx
+     Complex Double -- ^ z
+  -> Complex Double -- ^ m, the squared modulus
+  -> Complex Double
 theta_d' z m = theta_d z (nomeFromM m)
 
 -- | Neville theta-n function in terms of the squared modulus.
 theta_n' :: 
-     Cplx -- ^ z
-  -> Cplx -- ^ m, the squared modulus
-  -> Cplx
+     Complex Double -- ^ z
+  -> Complex Double -- ^ m, the squared modulus
+  -> Complex Double
 theta_n' z m = theta_n z (nomeFromM m)
 
 -- | Neville theta-s function in terms of the squared modulus.
 theta_s' :: 
-     Cplx -- ^ z
-  -> Cplx -- ^ m, the squared modulus
-  -> Cplx
+     Complex Double -- ^ z
+  -> Complex Double -- ^ m, the squared modulus
+  -> Complex Double
 theta_s' z m = theta_s z (nomeFromM m)
diff --git a/tests/Main.hs b/tests/Main.hs
--- a/tests/Main.hs
+++ b/tests/Main.hs
@@ -1,18 +1,18 @@
 module Main where
-import           Approx               ( assertApproxEqual )
-import           Data.Complex         ( Complex(..) )
-import           Math.NevilleTheta
-                                      ( theta_c,
-                                        theta_d,
-                                        theta_n,
-                                        theta_s,
-                                        theta_c',
-                                        theta_d',
-                                        theta_n',
-                                        theta_s' )
-import           Math.JacobiElliptic  ( jellip' )
-import           Test.Tasty           ( defaultMain, testGroup )
-import           Test.Tasty.HUnit     ( testCase )
+import           Approx                 ( assertApproxEqual )
+import           Data.Complex           ( Complex(..) )
+import           Math.NevilleTheta      ( theta_c,
+                                          theta_d,
+                                          theta_n,
+                                          theta_s,
+                                          theta_c',
+                                          theta_d',
+                                          theta_n',
+                                          theta_s' )
+import           Math.EllipticIntegrals ( ellipticF )
+import           Math.JacobiElliptic    ( jellip', am )
+import           Test.Tasty             ( defaultMain, testGroup )
+import           Test.Tasty.HUnit       ( testCase )
 
 i_ :: Complex Double
 i_ = 0.0 :+ 1.0
@@ -125,7 +125,7 @@
     testCase "jellip relation 1" $ do
       let z1 = jellip' 'c' 'n' u m 
           z2 = jellip' 'n' 'c' (i_ * u) (1 - m) 
-      assertApproxEqual "" 14 z1 z2, 
+      assertApproxEqual "" 13 z1 z2, 
 
     testCase "jellip relation 2" $ do
       let z1 = jellip' 's' 'n' u m 
@@ -135,6 +135,12 @@
     testCase "jellip relation 3" $ do
       let z1 = jellip' 'd' 'n' u m 
           z2 = jellip' 'd' 'c' (i_ * u) (1 - m) 
-      assertApproxEqual "" 14 z1 z2
+      assertApproxEqual "" 13 z1 z2,
+
+    testCase "amplitude function" $ do
+      let phi = 1 :+ 1
+          ell = ellipticF phi 2
+          obtained = am ell 2
+      assertApproxEqual "" 14 obtained phi
 
   ]
