/usr/lib/python2.7/dist-packages/PySPH-1.0a4.dev0-py2.7-linux-x86_64.egg/pysph/base/tests/test_neighbor_cache.py is in python-pysph 0~20160514.git91867dc-4build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | """Tests for neighbor caching.
"""
import numpy as np
import unittest
from pysph.base.nnps import LinkedListNNPS, NeighborCache
from pysph.base.utils import get_particle_array
from pyzoltan.core.carray import UIntArray
class TestNeighborCache(unittest.TestCase):
def _make_random_parray(self, name, nx=5):
x, y, z = np.random.random((3, nx, nx, nx))
x = np.ravel(x)
y = np.ravel(y)
z = np.ravel(z)
h = np.ones_like(x)*0.2
return get_particle_array(name=name, x=x, y=y, z=z, h=h)
def test_neighbors_cached_properly(self):
# Given
pa1 = self._make_random_parray('pa1', 5)
pa2 = self._make_random_parray('pa2', 4)
particles = [pa1, pa2]
nnps = LinkedListNNPS(dim=3, particles=particles)
for dst_index in (0, 1):
for src_idx in (0, 1):
# When
cache = NeighborCache(nnps, dst_index, src_idx)
cache.update()
nb_cached = UIntArray()
nb_direct = UIntArray()
# Then.
for i in range(len(particles[dst_index].x)):
nnps.get_nearest_particles_no_cache(
src_idx, dst_index, i, nb_direct, False
)
cache.get_neighbors(src_idx, i, nb_cached)
nb_e = nb_direct.get_npy_array()
nb_c = nb_cached.get_npy_array()
self.assertTrue(np.all(nb_e == nb_c))
def test_empty_neigbors_works_correctly(self):
# Given
pa1 = self._make_random_parray('pa1', 5)
pa2 = self._make_random_parray('pa2', 2)
pa2.x += 10.0
particles = [pa1, pa2]
# When
nnps = LinkedListNNPS(dim=3, particles=particles)
# Cache for neighbors of destination 0.
cache = NeighborCache(nnps, dst_index=0, src_index=1)
cache.update()
# Then
nb_cached = UIntArray()
nb_direct = UIntArray()
for i in range(len(particles[0].x)):
nnps.get_nearest_particles_no_cache(1, 0, i,nb_direct, False)
# Get neighbors from source 1 on destination 0.
cache.get_neighbors(src_index=1, d_idx=i, nbrs=nb_cached)
nb_e = nb_direct.get_npy_array()
nb_c = nb_cached.get_npy_array()
self.assertEqual(len(nb_e), 0)
self.assertTrue(np.all(nb_e == nb_c))
def test_cache_updates_with_changed_particles(self):
# Given
pa1 = self._make_random_parray('pa1', 5)
particles = [pa1]
nnps = LinkedListNNPS(dim=3, particles=particles)
cache = NeighborCache(nnps, dst_index=0, src_index=0)
cache.update()
# When
pa2 = self._make_random_parray('pa2', 2)
pa1.add_particles(x=pa2.x, y=pa2.y, z=pa2.z)
nnps.update()
cache.update()
nb_cached = UIntArray()
nb_direct = UIntArray()
for i in range(len(particles[0].x)):
nnps.get_nearest_particles_no_cache(0, 0, i, nb_direct, False)
cache.get_neighbors(0, i, nb_cached)
nb_e = nb_direct.get_npy_array()
nb_c = nb_cached.get_npy_array()
self.assertTrue(np.all(nb_e == nb_c))
if __name__ == '__main__':
unittest.main()
|