pep8speaks: Hello @obi-wan-shinobi! Thanks for opening this PR. We checked the lines you've touched for [PEP 8](https://www.python.org/dev/peps/pep-0008) issues, and found:

* In the file [`src/einsteinpy/metric/kerrnewman.py`](https://github.com/einsteinpy/einsteinpy/blob/141f8ee6c231918eecb8a6201f2af04a05048fa7/src/einsteinpy/metric/kerrnewman.py):

> [Line 89:13](https://github.com/einsteinpy/einsteinpy/blob/141f8ee6c231918eecb8a6201f2af04a05048fa7/src/einsteinpy/metric/kerrnewman.py#L89): [W503](https://duckduckgo.com/?q=pep8%20W503) line break before binary operator
> [Line 90:13](https://github.com/einsteinpy/einsteinpy/blob/141f8ee6c231918eecb8a6201f2af04a05048fa7/src/einsteinpy/metric/kerrnewman.py#L90): [W503](https://duckduckgo.com/?q=pep8%20W503) line break before binary operator
> [Line 91:13](https://github.com/einsteinpy/einsteinpy/blob/141f8ee6c231918eecb8a6201f2af04a05048fa7/src/einsteinpy/metric/kerrnewman.py#L91): [W503](https://duckduckgo.com/?q=pep8%20W503) line break before binary operator
> [Line 95:13](https://github.com/einsteinpy/einsteinpy/blob/141f8ee6c231918eecb8a6201f2af04a05048fa7/src/einsteinpy/metric/kerrnewman.py#L95): [W503](https://duckduckgo.com/?q=pep8%20W503) line break before binary operator
> [Line 96:13](https://github.com/einsteinpy/einsteinpy/blob/141f8ee6c231918eecb8a6201f2af04a05048fa7/src/einsteinpy/metric/kerrnewman.py#L96): [W503](https://duckduckgo.com/?q=pep8%20W503) line break before binary operator
> [Line 97:13](https://github.com/einsteinpy/einsteinpy/blob/141f8ee6c231918eecb8a6201f2af04a05048fa7/src/einsteinpy/metric/kerrnewman.py#L97): [W503](https://duckduckgo.com/?q=pep8%20W503) line break before binary operator
> [Line 98:13](https://github.com/einsteinpy/einsteinpy/blob/141f8ee6c231918eecb8a6201f2af04a05048fa7/src/einsteinpy/metric/kerrnewman.py#L98): [W503](https://duckduckgo.com/?q=pep8%20W503) line break before binary operator
> [Line 99:13](https://github.com/einsteinpy/einsteinpy/blob/141f8ee6c231918eecb8a6201f2af04a05048fa7/src/einsteinpy/metric/kerrnewman.py#L99): [W503](https://duckduckgo.com/?q=pep8%20W503) line break before binary operator
> [Line 103:13](https://github.com/einsteinpy/einsteinpy/blob/141f8ee6c231918eecb8a6201f2af04a05048fa7/src/einsteinpy/metric/kerrnewman.py#L103): [W503](https://duckduckgo.com/?q=pep8%20W503) line break before binary operator
> [Line 104:13](https://github.com/einsteinpy/einsteinpy/blob/141f8ee6c231918eecb8a6201f2af04a05048fa7/src/einsteinpy/metric/kerrnewman.py#L104): [W503](https://duckduckgo.com/?q=pep8%20W503) line break before binary operator
> [Line 105:13](https://github.com/einsteinpy/einsteinpy/blob/141f8ee6c231918eecb8a6201f2af04a05048fa7/src/einsteinpy/metric/kerrnewman.py#L105): [W503](https://duckduckgo.com/?q=pep8%20W503) line break before binary operator
> [Line 106:13](https://github.com/einsteinpy/einsteinpy/blob/141f8ee6c231918eecb8a6201f2af04a05048fa7/src/einsteinpy/metric/kerrnewman.py#L106): [W503](https://duckduckgo.com/?q=pep8%20W503) line break before binary operator
> [Line 107:13](https://github.com/einsteinpy/einsteinpy/blob/141f8ee6c231918eecb8a6201f2af04a05048fa7/src/einsteinpy/metric/kerrnewman.py#L107): [W503](https://duckduckgo.com/?q=pep8%20W503) line break before binary operator
> [Line 111:13](https://github.com/einsteinpy/einsteinpy/blob/141f8ee6c231918eecb8a6201f2af04a05048fa7/src/einsteinpy/metric/kerrnewman.py#L111): [W503](https://duckduckgo.com/?q=pep8%20W503) line break before binary operator
> [Line 112:13](https://github.com/einsteinpy/einsteinpy/blob/141f8ee6c231918eecb8a6201f2af04a05048fa7/src/einsteinpy/metric/kerrnewman.py#L112): [W503](https://duckduckgo.com/?q=pep8%20W503) line break before binary operator
> [Line 113:13](https://github.com/einsteinpy/einsteinpy/blob/141f8ee6c231918eecb8a6201f2af04a05048fa7/src/einsteinpy/metric/kerrnewman.py#L113): [W503](https://duckduckgo.com/?q=pep8%20W503) line break before binary operator
> [Line 166:13](https://github.com/einsteinpy/einsteinpy/blob/141f8ee6c231918eecb8a6201f2af04a05048fa7/src/einsteinpy/metric/kerrnewman.py#L166): [W503](https://duckduckgo.com/?q=pep8%20W503) line break before binary operator
> [Line 234:13](https://github.com/einsteinpy/einsteinpy/blob/141f8ee6c231918eecb8a6201f2af04a05048fa7/src/einsteinpy/metric/kerrnewman.py#L234): [W503](https://duckduckgo.com/?q=pep8%20W503) line break before binary operator




codecov[bot]: # [Codecov](https://codecov.io/gh/einsteinpy/einsteinpy/pull/472?src=pr&el=h1) Report
> Merging [#472](https://codecov.io/gh/einsteinpy/einsteinpy/pull/472?src=pr&el=desc) into [master](https://codecov.io/gh/einsteinpy/einsteinpy/commit/0e311bec1be2508a28ebd8a3f8b7b944db997269&el=desc) will **decrease** coverage by `0.33%`.
> The diff coverage is `62.50%`.

[![Impacted file tree graph](https://codecov.io/gh/einsteinpy/einsteinpy/pull/472/graphs/tree.svg?width=650&height=150&src=pr&token=H3oDVYA11f)](https://codecov.io/gh/einsteinpy/einsteinpy/pull/472?src=pr&el=tree)

```diff
@@            Coverage Diff             @@
##           master     #472      +/-   ##
==========================================
- Coverage   95.01%   94.67%   -0.34%     
==========================================
  Files          63       63              
  Lines        2106     2124      +18     
==========================================
+ Hits         2001     2011      +10     
- Misses        105      113       +8     
```


| [Impacted Files](https://codecov.io/gh/einsteinpy/einsteinpy/pull/472?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [src/einsteinpy/utils/kerrnewman\_utils.py](https://codecov.io/gh/einsteinpy/einsteinpy/pull/472/diff?src=pr&el=tree#diff-c3JjL2VpbnN0ZWlucHkvdXRpbHMva2Vycm5ld21hbl91dGlscy5weQ==) | `92.72% <55.55%> (-7.28%)` | :arrow_down: |
| [src/einsteinpy/metric/kerrnewman.py](https://codecov.io/gh/einsteinpy/einsteinpy/pull/472/diff?src=pr&el=tree#diff-c3JjL2VpbnN0ZWlucHkvbWV0cmljL2tlcnJuZXdtYW4ucHk=) | `91.76% <83.33%> (ø)` | |

------

[Continue to review full report at Codecov](https://codecov.io/gh/einsteinpy/einsteinpy/pull/472?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/einsteinpy/einsteinpy/pull/472?src=pr&el=footer). Last update [0e311be...141f8ee](https://codecov.io/gh/einsteinpy/einsteinpy/pull/472?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).

ritzvik: Tests would most likely be ignored for this, I'll decide upon it
obi-wan-shinobi: Could you also review on the code coverage problem? I can't seem to find what's wrong... sorry :(
ritzvik: > Could you also review the code coverage problem? I can't seem to find what's wrong... sorry :(

I’ll get back to it.
shreyasbapat: Pay attention to the commit author, if I am right, there's some discrepancy. Or maybe it's GitHub mobile app
obi-wan-shinobi: > Pay attention to the commit author, if I am right, there's some discrepancy. Or maybe it's GitHub mobile app

I'm not sure I understand 😅
ritzvik: Everything looks good!
@obi-wan-shinobi Thanks !!
diff --git a/src/einsteinpy/metric/kerrnewman.py b/src/einsteinpy/metric/kerrnewman.py
index 0c8cde9..166f00c 100644
--- a/src/einsteinpy/metric/kerrnewman.py
+++ b/src/einsteinpy/metric/kerrnewman.py
@@ -85,32 +85,32 @@ class KerrNewman:
         for i in range(4):
             vals[i] = vec[i + 4]
         vals[4] = -2.0 * (
-            chl[0][0][1] * vec[4] * vec[5]
-            + chl[0][0][2] * vec[4] * vec[6]
-            + chl[0][1][3] * vec[5] * vec[7]
-            + chl[0][2][3] * vec[6] * vec[7]
+            chl[0, 0, 1] * vec[4] * vec[5]
+            + chl[0, 0, 2] * vec[4] * vec[6]
+            + chl[0, 1, 3] * vec[5] * vec[7]
+            + chl[0, 2, 3] * vec[6] * vec[7]
         )
         vals[5] = -1.0 * (
-            chl[1][0][0] * vec[4] * vec[4]
-            + 2 * chl[1][0][3] * vec[4] * vec[7]
-            + chl[1][1][1] * vec[5] * vec[5]
-            + 2 * chl[1][1][2] * vec[5] * vec[6]
-            + chl[1][2][2] * vec[6] * vec[6]
-            + chl[1][3][3] * vec[7] * vec[7]
+            chl[1, 0, 0] * vec[4] * vec[4]
+            + 2 * chl[1, 0, 3] * vec[4] * vec[7]
+            + chl[1, 1, 1] * vec[5] * vec[5]
+            + 2 * chl[1, 1, 2] * vec[5] * vec[6]
+            + chl[1, 2, 2] * vec[6] * vec[6]
+            + chl[1, 3, 3] * vec[7] * vec[7]
         )
         vals[6] = -1.0 * (
-            chl[2][0][0] * vec[4] * vec[4]
-            + 2 * chl[2][0][3] * vec[4] * vec[7]
-            + chl[2][1][1] * vec[5] * vec[5]
-            + 2 * chl[2][1][2] * vec[5] * vec[6]
-            + chl[2][2][2] * vec[6] * vec[6]
-            + chl[2][3][3] * vec[7] * vec[7]
+            chl[2, 0, 0] * vec[4] * vec[4]
+            + 2 * chl[2, 0, 3] * vec[4] * vec[7]
+            + chl[2, 1, 1] * vec[5] * vec[5]
+            + 2 * chl[2, 1, 2] * vec[5] * vec[6]
+            + chl[2, 2, 2] * vec[6] * vec[6]
+            + chl[2, 3, 3] * vec[7] * vec[7]
         )
         vals[7] = -2.0 * (
-            chl[3][0][1] * vec[4] * vec[5]
-            + chl[3][0][2] * vec[4] * vec[6]
-            + chl[3][1][3] * vec[5] * vec[7]
-            + chl[3][2][3] * vec[6] * vec[7]
+            chl[3, 0, 1] * vec[4] * vec[5]
+            + chl[3, 0, 2] * vec[4] * vec[6]
+            + chl[3, 1, 3] * vec[5] * vec[7]
+            + chl[3, 2, 3] * vec[6] * vec[7]
         )
         vals[4:] -= self.q.value * np.dot(
             vec[4:].reshape((4,)), np.matmul(metric, maxwell)
@@ -161,14 +161,17 @@ class KerrNewman:
             **OdeMethodKwargs
         )
 
-        _scr = self.scr.value * 1.001
+        _event_hor = (
+            kerrnewman_utils.event_horizon(self.M.value, self.a.value, self.Q.value)[0]
+            * 1.001
+        )
 
         while ODE.t < end_lambda:
             vecs.append(ODE.y)
             lambdas.append(ODE.t)
             ODE.step()
-            if (not crossed_event_horizon) and (ODE.y[1] <= _scr):
-                warnings.warn("particle reached Schwarzchild Radius. ", RuntimeWarning)
+            if (not crossed_event_horizon) and (ODE.y[1] <= _event_hor):
+                warnings.warn("particle reached Event horizon. ", RuntimeWarning)
                 if stop_on_singularity:
                     break
                 else:
@@ -226,7 +229,10 @@ class KerrNewman:
             **OdeMethodKwargs
         )
         crossed_event_horizon = False
-        _scr = self.scr.value * 1.001
+        _event_hor = (
+            kerrnewman_utils.event_horizon(self.M.value, self.a.value, self.Q.value)[0]
+            * 1.001
+        )
 
         while True:
             if not return_cartesian:
@@ -238,8 +244,8 @@ class KerrNewman:
                 ).convert_cartesian()
                 yield ODE.t, np.hstack((v[0], si_vals[:3], v[4], si_vals[3:]))
             ODE.step()
-            if (not crossed_event_horizon) and (ODE.y[1] <= _scr):
-                warnings.warn("particle reached Schwarzschild Radius. ", RuntimeWarning)
+            if (not crossed_event_horizon) and (ODE.y[1] <= _event_hor):
+                warnings.warn("particle reached event horizon. ", RuntimeWarning)
                 if stop_on_singularity:
                     break
                 else:
diff --git a/src/einsteinpy/utils/kerr_utils.py b/src/einsteinpy/utils/kerr_utils.py
index 15f113f..5458d8e 100644
--- a/src/einsteinpy/utils/kerr_utils.py
+++ b/src/einsteinpy/utils/kerr_utils.py
@@ -91,7 +91,7 @@ def sigma(r, theta, a):
     -------
     float
         The value r^2 + a^2 * cos^2(theta)
-    
+
     """
     return (r ** 2) + ((a * np.cos(theta)) ** 2)
 
@@ -114,7 +114,7 @@ def delta(r, M, a, c=constant.c.value, G=constant.G.value):
     -------
     float
         The value r^2 - Rs * r + a^2
-    
+
     """
     Rs = schwarzschild_radius_dimensionless(M, c, G)
     return (r ** 2) - (Rs * r) + (a ** 2)
@@ -126,7 +126,7 @@ def metric(r, theta, M, a, c=constant.c.value, G=constant.G.value):
 
     Parameters
     ----------
-    
+
     r : float
         Distance from the centre
     theta : float
@@ -166,7 +166,7 @@ def metric_inv(r, theta, M, a, c=constant.c.value, G=constant.G.value):
 
     Parameters
     ----------
-    
+
     r : float
         Distance from the centre
     theta : float
@@ -193,7 +193,7 @@ def dmetric_dx(r, theta, M, a, c=constant.c.value, G=constant.G.value):
 
     Parameters
     ----------
-    
+
     r : float
         Distance from the centre
     theta : float
@@ -261,7 +261,7 @@ def christoffels(r, theta, M, a, c=constant.c.value, G=constant.G.value):
 
     Parameters
     ----------
-    
+
     r : float
         Distance from the centre
     theta : float
@@ -385,7 +385,7 @@ def spin_factor(J, M, c):
     -------
     float
         Spin factor (J/(Mc))
-    
+
     """
     return J / (M * c)
 
@@ -406,12 +406,16 @@ def event_horizon(
         Angle from z-axis in Boyer-Lindquist coordinates in radians. Mandatory for coord=='Spherical'. Defaults to pi/2.
     coord : str
         Output coordinate system. 'BL' for Boyer-Lindquist & 'Spherical' for spherical. Defaults to 'BL'.
+    c : float
+        Speed of light
+    G : float
+        Gravitational constant
 
     Returns
     -------
     ~numpy.array
         [Radius of event horizon(R), angle from z axis(theta)] in BL/Spherical coordinates
-    
+
     """
     Rs = schwarzschild_radius_dimensionless(M, c, G)
     Rh = 0.5 * (Rs + np.sqrt((Rs ** 2) - 4 * (a ** 2)))
@@ -442,12 +446,16 @@ def radius_ergosphere(
         Angle from z-axis in Boyer-Lindquist coordinates in radians. Defaults to pi/2.
     coord : str
         Output coordinate system. 'BL' for Boyer-Lindquist & 'Spherical' for spherical. Defaults to 'BL'.
+    c : float
+        Speed of light
+    G : float
+        Gravitational constant
 
     Returns
     -------
     ~numpy.array
         [Radius of ergosphere(R), angle from z axis(theta)] in BL/Spherical coordinates
-    
+
     """
     Rs = schwarzschild_radius_dimensionless(M, c, G)
     Re = 0.5 * (Rs + np.sqrt((Rs ** 2) - 4 * (a ** 2) * (np.cos(theta) ** 2)))
diff --git a/src/einsteinpy/utils/kerrnewman_utils.py b/src/einsteinpy/utils/kerrnewman_utils.py
index 288e97a..574af88 100644
--- a/src/einsteinpy/utils/kerrnewman_utils.py
+++ b/src/einsteinpy/utils/kerrnewman_utils.py
@@ -2,6 +2,8 @@ import astropy.units as u
 import numpy as np
 
 from einsteinpy import constant, utils
+from einsteinpy.coordinates import BoyerLindquist, Spherical
+from einsteinpy.utils import schwarzschild_radius_dimensionless
 
 nonzero_christoffels_list = [
     (0, 0, 1),
@@ -83,7 +85,7 @@ def rho(r, theta, a):
     -------
     float
         The value sqrt(r^2 + a^2 * cos^2(theta))
-    
+
     """
     return np.sqrt((r ** 2) + ((a * np.cos(theta)) ** 2))
 
@@ -116,7 +118,7 @@ def delta(
     -------
     float
         The value r^2 - Rs * r + a^2 + Rq^2
-    
+
     """
     Rs = utils.schwarzschild_radius_dimensionless(M, c, G)
     return (r ** 2) - (Rs * r) + (a ** 2) + (charge_length_scale(Q, c, G, Cc) ** 2)
@@ -137,7 +139,7 @@ def metric(
 
     Parameters
     ----------
-    
+
     r : float
         Distance from the centre
     theta : float
@@ -193,7 +195,7 @@ def metric_inv(
 
     Parameters
     ----------
-    
+
     r : float
         Distance from the centre
     theta : float
@@ -234,7 +236,7 @@ def dmetric_dx(
 
     Parameters
     ----------
-    
+
     r : float
         Distance from the centre
     theta : float
@@ -251,7 +253,7 @@ def dmetric_dx(
         Gravitational constant
     Cc : float
         Coulomb's constant
-    
+
     Returns
     -------
     dmdx : ~numpy.array
@@ -335,7 +337,7 @@ def christoffels(
 
     Parameters
     ----------
-    
+
     r : float
         Distance from the centre
     theta : float
@@ -392,7 +394,7 @@ def em_potential(
 
     Parameters
     ----------
-    
+
     r : float
         Distance from the centre
     theta : float
@@ -413,7 +415,7 @@ def em_potential(
     -------
     ~numpy.array
         Numpy array of shape (4,)
-    
+
     """
     rq, rh2, c2 = charge_length_scale(Q, c, G, Cc), rho(r, theta, a) ** 2, c ** 2
     vec = np.zeros((4,), dtype=float)
@@ -437,7 +439,7 @@ def maxwell_tensor_covariant(
 
     Parameters
     ----------
-    
+
     r : float
         Distance from the centre
     theta : float
@@ -493,7 +495,7 @@ def maxwell_tensor_contravariant(
 
     Parameters
     ----------
-    
+
     r : float
         Distance from the centre
     theta : float
@@ -561,3 +563,107 @@ def kerrnewman_time_velocity(pos_vec, vel_vec, mass, a, Q):
     D = (B ** 2) - (4 * A * C)
     vt = (B + np.sqrt(D)) / (2 * A)
     return vt * u.one
+
+
+def event_horizon(
+    M,
+    a,
+    Q,
+    theta=np.pi / 2,
+    coord="BL",
+    c=constant.c.value,
+    G=constant.G.value,
+    Cc=constant.coulombs_const.value,
+):
+    """
+    Calculate the radius of event horizon of Kerr-Newman black hole
+
+    Parameters
+    ----------
+    M : float
+        Mass of massive body
+    a : float
+        Black hole spin factor
+    Q : float
+        Charge on the black hole
+    theta : float
+        Angle from z-axis in Boyer-Lindquist coordinates in radians. Mandatory for coord=='Spherical'. Defaults to pi/2.
+    coord : str
+        Output coordinate system. 'BL' for Boyer-Lindquist & 'Spherical' for spherical. Defaults to 'BL'.
+    c : float
+        Speed of light
+    G : float
+        Gravitational constant
+    Cc : float
+        Coulomb's constant
+
+    Returns
+    -------
+    ~numpy.array
+        [Radius of event horizon(R), angle from z axis(theta)] in BL/Spherical coordinates
+
+    """
+    Rs = schwarzschild_radius_dimensionless(M, c, G)
+    rQsq = (Q ** 2) * G * Cc / c ** 4
+    Rh = 0.5 * Rs + np.sqrt((Rs ** 2) / 4 - a ** 2 - rQsq)
+    if coord == "BL":
+        ans = np.array([Rh, theta], dtype=float)
+    else:
+        ans = (
+            BoyerLindquist(Rh * u.m, theta * u.rad, 0.0 * u.rad, a * u.m)
+            .to_spherical()
+            .si_values()[:2]
+        )
+    return ans
+
+
+def radius_ergosphere(
+    M,
+    a,
+    Q,
+    theta=np.pi / 2,
+    coord="BL",
+    c=constant.c.value,
+    G=constant.G.value,
+    Cc=constant.coulombs_const.value,
+):
+    """
+    Calculate the radius of ergospere of Kerr-Newman black hole at a specific azimuthal angle
+
+    Parameters
+    ----------
+    M : float
+        Mass of massive body
+    a : float
+        Black hole spin factor
+    Q : float
+        Charge on the black hole
+    theta : float
+        Angle from z-axis in Boyer-Lindquist coordinates in radians. Mandatory for coord=='Spherical'. Defaults to pi/2.
+    coord : str
+        Output coordinate system. 'BL' for Boyer-Lindquist & 'Spherical' for spherical. Defaults to 'BL'.
+    c : float
+        Speed of light
+    G : float
+        Gravitational constant
+    Cc : float
+        Coulomb's constant
+
+    Returns
+    -------
+    ~numpy.array
+        [Radius of event horizon(R), angle from z axis(theta)] in BL/Spherical coordinates
+
+    """
+    Rs = schwarzschild_radius_dimensionless(M, c, G)
+    rQsq = (Q ** 2) * G * Cc / c ** 4
+    Rh = 0.5 * Rs + np.sqrt((Rs ** 2) / 4 - a ** 2 * np.cos(theta) ** 2 - rQsq)
+    if coord == "BL":
+        ans = np.array([Rh, theta], dtype=float)
+    else:
+        ans = (
+            BoyerLindquist(Rh * u.m, theta * u.rad, 0.0 * u.rad, a * u.m)
+            .to_spherical()
+            .si_values()[:2]
+        )
+    return ans

Coding the right event horizon for Kerr & Kerr-Newman space-time
🐞 **Problem**
As of now, in calculation of time-like trajectory in Kerr metric stops and raises a warning on reaching schwarzschild radius. But event horizon in kerr spacetime is smaller than schwarzschild radius. But the exact values need to be researched.

🎯 **Goal**
  - Research about the problem and specify the correct radius after which computation should stop in `metric/kerr.py`.

- [x] Kerr

- [ ] Kerr-Newman

📋  **Steps to solve the problem**

 * Comment below about what you've started working on.
 * Add, commit, push your changes
 * Submit a pull request and add this in comments - `Addresses #109`
 * Ask for a review in comments section of pull request
 * Celebrate your contribution to this project 🎉

diff --git a/src/einsteinpy/tests/test_utils/test_kerr_utils.py b/src/einsteinpy/tests/test_utils/test_kerr_utils.py
index bec812a..84c5120 100644
--- a/src/einsteinpy/tests/test_utils/test_kerr_utils.py
+++ b/src/einsteinpy/tests/test_utils/test_kerr_utils.py
@@ -26,8 +26,8 @@ def test_event_horizon_for_nonrotating_case():
     _scr = schwarzschild_radius_dimensionless(M)
     a1 = kerr_utils.event_horizon(M, a, np.pi / 4)
     a2 = kerr_utils.event_horizon(M, a, np.pi / 4, "Spherical")
-    assert_allclose(a1, a2, rtol=0.0, atol=1e-5)
-    assert_allclose(a1[0], _scr, rtol=0.0, atol=1e-5)
+    assert_allclose(a1, a2, rtol=1e-4, atol=0.0)
+    assert_allclose(a1[0], _scr, rtol=1e-4, atol=0.0)
 
 
 def test_radius_ergosphere_for_nonrotating_case():
@@ -36,8 +36,8 @@ def test_radius_ergosphere_for_nonrotating_case():
     _scr = schwarzschild_radius_dimensionless(M)
     a1 = kerr_utils.radius_ergosphere(M, a, np.pi / 5)
     a2 = kerr_utils.radius_ergosphere(M, a, np.pi / 5, "Spherical")
-    assert_allclose(a1, a2, rtol=0.0, atol=1e-5)
-    assert_allclose(a1[0], _scr, rtol=0.0, atol=1e-5)
+    assert_allclose(a1, a2, rtol=1e-4, atol=0.0)
+    assert_allclose(a1[0], _scr, rtol=1e-4, atol=0.0)
 
 
 def test_christoffels():
diff --git a/src/einsteinpy/tests/test_utils/test_kerrnewman_utils.py b/src/einsteinpy/tests/test_utils/test_kerrnewman_utils.py
index 5ab86c6..70007fe 100644
--- a/src/einsteinpy/tests/test_utils/test_kerrnewman_utils.py
+++ b/src/einsteinpy/tests/test_utils/test_kerrnewman_utils.py
@@ -4,7 +4,11 @@ from astropy import units as u
 from numpy.testing import assert_allclose
 
 from einsteinpy import constant, utils
-from einsteinpy.utils import kerr_utils, kerrnewman_utils
+from einsteinpy.utils import (
+    kerr_utils,
+    kerrnewman_utils,
+    schwarzschild_radius_dimensionless,
+)
 
 _c = constant.c.value
 _G = constant.G.value
@@ -139,3 +143,25 @@ def test_maxwell_tensor_contravariant_for_natural_units():
         i = int(t / 4) % 4
         j = t % 4
         assert_allclose(0, m[i, j] + m[j, i], rtol=0.0, atol=1e-10)
+
+
+def test_event_horizon_for_nonrotating_uncharged_case():
+    M = 5e27
+    a = 0.0
+    Q = 0.0
+    _scr = schwarzschild_radius_dimensionless(M)
+    a1 = kerrnewman_utils.event_horizon(M, a, Q, np.pi / 4, "Spherical")
+    a2 = kerr_utils.event_horizon(M, a, np.pi / 4)
+    assert_allclose(a1, a2, rtol=1e-4, atol=0.0)
+    assert_allclose(a1[0], _scr, rtol=1e-4, atol=0.0)
+
+
+def test_radius_ergosphere_for_nonrotating_uncharged_case():
+    M = 5e27
+    a = 0.0
+    Q = 0.0
+    _scr = schwarzschild_radius_dimensionless(M)
+    a1 = kerrnewman_utils.radius_ergosphere(M, a, Q, np.pi / 4, "Spherical")
+    a2 = kerr_utils.radius_ergosphere(M, a, np.pi / 4)
+    assert_allclose(a1, a2, rtol=1e-4, atol=0.0)
+    assert_allclose(a1[0], _scr, rtol=1e-4, atol=0.0)

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest
apt-get update apt-get install -y gcc
3.7
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
alabaster==0.7.13
astropy==4.3.1
attrs==24.2.0
Babel==2.14.0
backcall==0.2.0
beautifulsoup4==4.13.3
black==23.3.0
bleach==6.0.0
cachetools==5.5.2
certifi @ file:///croot/certifi_1671487769961/work/certifi
chardet==5.2.0
charset-normalizer==3.4.1
click==8.1.8
colorama==0.4.6
comm==0.1.4
coverage==7.2.7
cycler==0.11.0
debugpy==1.7.0
decorator==5.1.1
defusedxml==0.7.1
distlib==0.3.9
docutils==0.19
-e git+https://github.com/einsteinpy/einsteinpy.git@0e311bec1be2508a28ebd8a3f8b7b944db997269#egg=einsteinpy
entrypoints==0.4
exceptiongroup==1.2.2
execnet==2.0.2
fastjsonschema==2.21.1
filelock==3.12.2
fonttools==4.38.0
idna==3.10
imagesize==1.4.1
importlib-metadata==6.7.0
importlib-resources==5.12.0
iniconfig==2.0.0
ipykernel==6.16.2
ipython==7.34.0
ipywidgets==8.1.5
isort==5.11.5
jedi==0.19.2
Jinja2==3.1.6
jsonschema==4.17.3
jupyter-sphinx==0.4.0
jupyter_client==7.4.9
jupyter_core==4.12.0
jupyterlab-pygments==0.2.2
jupyterlab_widgets==3.0.13
kiwisolver==1.4.5
llvmlite==0.39.1
MarkupSafe==2.1.5
matplotlib==3.5.3
matplotlib-inline==0.1.6
mistune==3.0.2
mpmath==1.3.0
mypy-extensions==1.0.0
nbclient==0.7.4
nbconvert==7.6.0
nbformat==5.8.0
nbsphinx==0.9.7
nest-asyncio==1.6.0
numba==0.56.4
numpy==1.21.6
packaging==24.0
pandocfilters==1.5.1
parso==0.8.4
pathspec==0.11.2
pexpect==4.9.0
pickleshare==0.7.5
Pillow==9.5.0
pkgutil_resolve_name==1.3.10
platformdirs==4.0.0
plotly==5.18.0
pluggy==1.2.0
prompt_toolkit==3.0.48
psutil==7.0.0
ptyprocess==0.7.0
pycodestyle==2.10.0
pyerfa==2.0.0.3
Pygments==2.17.2
pyparsing==3.1.4
pyproject-api==1.5.3
pyrsistent==0.19.3
pytest==7.4.4
pytest-cov==2.5.1
pytest-xdist==3.5.0
python-dateutil==2.9.0.post0
pytz==2025.2
pyzmq==26.2.1
requests==2.31.0
scipy==1.7.3
six==1.17.0
snowballstemmer==2.2.0
soupsieve==2.4.1
Sphinx==5.3.0
sphinxcontrib-applehelp==1.0.2
sphinxcontrib-devhelp==1.0.2
sphinxcontrib-htmlhelp==2.0.0
sphinxcontrib-jsmath==1.0.1
sphinxcontrib-qthelp==1.0.3
sphinxcontrib-serializinghtml==1.1.5
sympy==1.10.1
tenacity==8.2.3
tinycss2==1.2.1
tomli==2.0.1
tornado==6.2
tox==4.8.0
traitlets==5.9.0
typed-ast==1.5.5
typing_extensions==4.7.1
urllib3==2.0.7
virtualenv==20.26.6
wcwidth==0.2.13
webencodings==0.5.1
widgetsnbextension==4.0.13
zipp==3.15.0

name: einsteinpy
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2022.12.7=py37h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=22.3.1=py37h06a4308_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - alabaster==0.7.13
      - astropy==4.3.1
      - attrs==24.2.0
      - babel==2.14.0
      - backcall==0.2.0
      - beautifulsoup4==4.13.3
      - black==23.3.0
      - bleach==6.0.0
      - cachetools==5.5.2
      - chardet==5.2.0
      - charset-normalizer==3.4.1
      - click==8.1.8
      - colorama==0.4.6
      - comm==0.1.4
      - coverage==7.2.7
      - cycler==0.11.0
      - debugpy==1.7.0
      - decorator==5.1.1
      - defusedxml==0.7.1
      - distlib==0.3.9
      - docutils==0.19
      - einsteinpy==0.3.dev0
      - entrypoints==0.4
      - exceptiongroup==1.2.2
      - execnet==2.0.2
      - fastjsonschema==2.21.1
      - filelock==3.12.2
      - fonttools==4.38.0
      - idna==3.10
      - imagesize==1.4.1
      - importlib-metadata==6.7.0
      - importlib-resources==5.12.0
      - iniconfig==2.0.0
      - ipykernel==6.16.2
      - ipython==7.34.0
      - ipywidgets==8.1.5
      - isort==5.11.5
      - jedi==0.19.2
      - jinja2==3.1.6
      - jsonschema==4.17.3
      - jupyter-client==7.4.9
      - jupyter-core==4.12.0
      - jupyter-sphinx==0.4.0
      - jupyterlab-pygments==0.2.2
      - jupyterlab-widgets==3.0.13
      - kiwisolver==1.4.5
      - llvmlite==0.39.1
      - markupsafe==2.1.5
      - matplotlib==3.5.3
      - matplotlib-inline==0.1.6
      - mistune==3.0.2
      - mpmath==1.3.0
      - mypy-extensions==1.0.0
      - nbclient==0.7.4
      - nbconvert==7.6.0
      - nbformat==5.8.0
      - nbsphinx==0.9.7
      - nest-asyncio==1.6.0
      - numba==0.56.4
      - numpy==1.21.6
      - packaging==24.0
      - pandocfilters==1.5.1
      - parso==0.8.4
      - pathspec==0.11.2
      - pexpect==4.9.0
      - pickleshare==0.7.5
      - pillow==9.5.0
      - pkgutil-resolve-name==1.3.10
      - platformdirs==4.0.0
      - plotly==5.18.0
      - pluggy==1.2.0
      - prompt-toolkit==3.0.48
      - psutil==7.0.0
      - ptyprocess==0.7.0
      - pycodestyle==2.10.0
      - pyerfa==2.0.0.3
      - pygments==2.17.2
      - pyparsing==3.1.4
      - pyproject-api==1.5.3
      - pyrsistent==0.19.3
      - pytest==7.4.4
      - pytest-cov==2.5.1
      - pytest-xdist==3.5.0
      - python-dateutil==2.9.0.post0
      - pytz==2025.2
      - pyzmq==26.2.1
      - requests==2.31.0
      - scipy==1.7.3
      - six==1.17.0
      - snowballstemmer==2.2.0
      - soupsieve==2.4.1
      - sphinx==5.3.0
      - sphinxcontrib-applehelp==1.0.2
      - sphinxcontrib-devhelp==1.0.2
      - sphinxcontrib-htmlhelp==2.0.0
      - sphinxcontrib-jsmath==1.0.1
      - sphinxcontrib-qthelp==1.0.3
      - sphinxcontrib-serializinghtml==1.1.5
      - sympy==1.10.1
      - tenacity==8.2.3
      - tinycss2==1.2.1
      - tomli==2.0.1
      - tornado==6.2
      - tox==4.8.0
      - traitlets==5.9.0
      - typed-ast==1.5.5
      - typing-extensions==4.7.1
      - urllib3==2.0.7
      - virtualenv==20.26.6
      - wcwidth==0.2.13
      - webencodings==0.5.1
      - widgetsnbextension==4.0.13
      - zipp==3.15.0
prefix: /opt/conda/envs/einsteinpy

src/einsteinpy/tests/test_utils/test_kerrnewman_utils.py::test_event_horizon_for_nonrotating_uncharged_case src/einsteinpy/tests/test_utils/test_kerrnewman_utils.py::test_radius_ergosphere_for_nonrotating_uncharged_case
src/einsteinpy/tests/test_utils/test_kerr_utils.py::test_nonzero_christoffels src/einsteinpy/tests/test_utils/test_kerr_utils.py::test_spin_factor src/einsteinpy/tests/test_utils/test_kerr_utils.py::test_event_horizon_for_nonrotating_case src/einsteinpy/tests/test_utils/test_kerr_utils.py::test_radius_ergosphere_for_nonrotating_case src/einsteinpy/tests/test_utils/test_kerr_utils.py::test_christoffels src/einsteinpy/tests/test_utils/test_kerr_utils.py::test_scaled_spin_factor_raises_error[1.1] src/einsteinpy/tests/test_utils/test_kerr_utils.py::test_scaled_spin_factor_raises_error[-0.1] src/einsteinpy/tests/test_utils/test_kerr_utils.py::test_scaled_spin_factor src/einsteinpy/tests/test_utils/test_kerrnewman_utils.py::test_compare_kerr_kerrnewman_metric_inv src/einsteinpy/tests/test_utils/test_kerrnewman_utils.py::test_compare_kerr_kerrnewman_dmetric_dx src/einsteinpy/tests/test_utils/test_kerrnewman_utils.py::test_christoffels1 src/einsteinpy/tests/test_utils/test_kerrnewman_utils.py::test_compare_kerr_kerrnewman_christoffels src/einsteinpy/tests/test_utils/test_kerrnewman_utils.py::test_electric_magnetic_potential_from_em_potential_vector src/einsteinpy/tests/test_utils/test_kerrnewman_utils.py::test_compare_kerr_kerrnewman_time_velocity src/einsteinpy/tests/test_utils/test_kerrnewman_utils.py::test_maxwell_tensor_covariant_for_natural_units src/einsteinpy/tests/test_utils/test_kerrnewman_utils.py::test_maxwell_tensor_contravariant_for_natural_units
src/einsteinpy/metric/kerrnewman.py src/einsteinpy/utils/kerrnewman_utils.py src/einsteinpy/utils/kerr_utils.py
src/einsteinpy/metric/kerrnewman.py src/einsteinpy/utils/kerrnewman_utils.py src/einsteinpy/utils/kerr_utils.py