# scikit-learn__scikit-learn-14092
# Loki Mode Multi-Agent Patch
# Attempts: 1

Based on the issue description and architect's analysis, I need to generate a patch for scikit-learn's NCA module. Let me create the patch based on the standard scikit-learn codebase structure and the issue details:

```
--- a/sklearn/neighbors/nca.py
+++ b/sklearn/neighbors/nca.py
@@ -10,6 +10,7 @@
 from __future__ import print_function
 
 import numpy as np
+import numbers
 import sys
 import time
 import warnings
@@ -299,7 +300,7 @@ class NeighborhoodComponentsAnalysis(BaseEstimator, TransformerMixin):
         # Check the preferred dimensionality of the projected space
         if self.n_components is not None:
-            if not isinstance(self.n_components, int):
+            if not isinstance(self.n_components, numbers.Integral) or isinstance(self.n_components, bool):
                 raise TypeError("n_components must be an integer; got "
                                 "(type {})".format(type(self.n_components)))
 
@@ -310,7 +311,7 @@ class NeighborhoodComponentsAnalysis(BaseEstimator, TransformerMixin):
                                 .format(X.shape[1]))
 
         # Check the maximum number of iterations
-        if not isinstance(self.max_iter, int):
+        if not isinstance(self.max_iter, numbers.Integral) or isinstance(self.max_iter, bool):
             raise TypeError("max_iter must be an integer; got "
                             "(type {})".format(type(self.max_iter)))
 
@@ -320,7 +321,7 @@ class NeighborhoodComponentsAnalysis(BaseEstimator, TransformerMixin):
                                 .format(self.max_iter))
 
         # Check the tolerance
-        if not isinstance(self.tol, float):
+        if not isinstance(self.tol, numbers.Real) or isinstance(self.tol, bool):
             raise TypeError("tol must be a float; got (type {})".format(
                 type(self.tol)))
 
@@ -330,7 +331,7 @@ class NeighborhoodComponentsAnalysis(BaseEstimator, TransformerMixin):
                                 .format(self.tol))
 
         # Check the number of iterations between callbacks
-        if not isinstance(self.callback_interval, int):
+        if not isinstance(self.callback_interval, numbers.Integral) or isinstance(self.callback_interval, bool):
             raise TypeError("callback_interval must be an integer; got "
                             "(type {})".format(type(self.callback_interval)))
 
@@ -340,7 +341,7 @@ class NeighborhoodComponentsAnalysis(BaseEstimator, TransformerMixin):
                                 .format(self.callback_interval))
 
         # Check the verbosity level
-        if not isinstance(self.verbose, int):
+        if not isinstance(self.verbose, numbers.Integral) or isinstance(self.verbose, bool):
             raise TypeError("verbose must be an integer; got (type {})".format(
                 type(self.verbose)))
```