def test_density(array, stack):
    density, (x, y, z) = struc.density(array)
    assert np.array_equal(x, [0.5, 1.5, 2.5])
    assert np.array_equal(y, [0.5, 1.5, 2.5, 3.5])
    assert np.array_equal(z, [1.0, 2.0])
    assert density.sum() == 6
    assert density[0, 2] == 2
    assert density[1, 0] == 3
    assert density[1, 1] == 1

    density, (x, y, z) = struc.density(stack)
    assert np.array_equal(x, [0.5, 1.5, 2.5])
    assert np.array_equal(y, [0.5, 1.5, 2.5, 3.5])
    assert np.array_equal(z, [1.0, 2.0])
    assert density.sum() == 12
    assert density[0, 2] == 4
    assert density[1, 0] == 6
    assert density[1, 1] == 2
def test_density_with_bins(array):
    bins = np.array([[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]])
    density, (x, y, z) = struc.density(array, bins=bins)
    assert np.array_equal(x, [0, 1, 2, 3])
    assert np.array_equal(y, [0, 1, 2, 3])
    assert np.array_equal(z, [0, 1, 2, 3])
    assert density.sum() == 6
    assert density[0, 2, 1] == 2
    assert density[1, 1, 1] == 1
    assert density[2, 0, 1] == 3
def test_density_weights(array, stack):
    # assign weights to coordinates
    atomic_weights = np.arange(0.1, 0.7, 0.1)

    # weights should be applied correctly
    density, (x, y, z) = struc.density(array, weights=atomic_weights)
    assert density.sum() == atomic_weights.sum()
    assert density[0, 2] == atomic_weights[0] + atomic_weights[1]
    assert density[1, 0] == atomic_weights[3:].sum()
    assert density[1, 1] == atomic_weights[2]

    # weights should be repeated along stack dimensions and lead to the same
    # result independent of shape
    density, (x, y, z) = struc.density(stack, weights=atomic_weights)
    density2, (x, y, z) = struc.density(stack,
                                        weights=np.array(
                                            [atomic_weights, atomic_weights]))
    assert density.sum() == density2.sum()
    assert density[0, 2] == density2[0, 2]
    assert density[1, 0] == density2[1, 0]
    assert density[1, 1] == density2[1, 1]
def test_density_normalized(array):
    density, (x, y, z) = struc.density(array, density=True)
    assert np.abs(density.sum() - 1.0) < 0.0001
    assert np.abs(density[0, 2] - 2.0 / 6.0) < 0.0001
def test_density_with_delta(array):
    density, (x, y, z) = struc.density(array, delta=5.0)
    assert density.shape == (1, 1, 1)
    assert density.sum() == 6
    assert density[0, 0, 0] == 6