# Path: umap/utils.py
# @numba.njit()
# def norm(vec):
#     """Compute the (standard l2) norm of a vector.
# 
#     Parameters
#     ----------
#     vec: array of shape (dim,)
# 
#     Returns
#     -------
#     The l2 norm of vec.
#     """
#     result = 0.0
#     for i in range(vec.shape[0]):
#         result += vec[i] ** 2
#     return np.sqrt(result)


import locale
import numba
import numpy as np
from umap.utils import norm
    shifted_data1 = np.empty(data1.shape[0], dtype=np.float32)
    shifted_data2 = np.empty(data2.shape[0], dtype=np.float32)

    for i in range(data1.shape[0]):
        shifted_data1[i] = data1[i] - mu_x
    for i in range(data2.shape[0]):
        shifted_data2[i] = data2[i] - mu_y

    norm1 = np.sqrt(
        (norm(shifted_data1) ** 2) + (n_features - ind1.shape[0]) * (mu_x ** 2)
    )
    norm2 = np.sqrt(
        (norm(shifted_data2) ** 2) + (n_features - ind2.shape[0]) * (mu_y ** 2)
    )

    dot_prod_inds, dot_prod_data = sparse_mul(ind1, shifted_data1, ind2, shifted_data2)

    common_indices = set(dot_prod_inds)

    for i in range(dot_prod_data.shape[0]):
        dot_product += dot_prod_data[i]

    for i in range(ind1.shape[0]):
        if ind1[i] not in common_indices:
            dot_product -= shifted_data1[i] * (mu_y)

    for i in range(ind2.shape[0]):
        if ind2[i] not in common_indices:
            dot_product -= shifted_data2[i] * (mu_x)


# Path: umap/utils.py
# @numba.njit()
# def norm(vec):
#     """Compute the (standard l2) norm of a vector.
# 
#     Parameters
#     ----------
#     vec: array of shape (dim,)
# 
#     Returns
#     -------
#     The l2 norm of vec.
#     """
#     result = 0.0
#     for i in range(vec.shape[0]):
#         result += vec[i] ** 2
#     return np.sqrt(result)


# Path: umap/sparse.py
import locale
import numba
import numpy as np
from umap.utils import norm

    shifted_data1 = np.empty(data1.shape[0], dtype=np.float32)
    shifted_data2 = np.empty(data2.shape[0], dtype=np.float32)

    for i in range(data1.shape[0]):
        shifted_data1[i] = data1[i] - mu_x
    for i in range(data2.shape[0]):
        shifted_data2[i] = data2[i] - mu_y

    norm1 = np.sqrt(
        (norm(shifted_data1) ** 2) + (n_features - ind1.shape[0]) * (mu_x ** 2)
    )
    norm2 = np.sqrt(
        (norm(shifted_data2) ** 2) + (n_features - ind2.shape[0]) * (mu_y ** 2)
    )

    dot_prod_inds, dot_prod_data = sparse_mul(ind1, shifted_data1, ind2, shifted_data2)

    common_indices = set(dot_prod_inds)

    for i in range(dot_prod_data.shape[0]):
        dot_product += dot_prod_data[i]

    for i in range(ind1.shape[0]):
        if ind1[i] not in common_indices:
            dot_product -= shifted_data1[i] * (mu_y)

    for i in range(ind2.shape[0]):
        if ind2[i] not in common_indices:
            dot_product -= shifted_data2[i] * (mu_x)


    all_indices = arr_union(ind1, ind2)