Ejemplo n.º 1
0
 def test_hash_reversability_3d_valid(self):
     assert pm.deinterleave3(pm.interleave(100, 30, 50)) == (100, 30, 50)
     if getattr(sys, 'maxint', 0) and sys.maxint <= 2 ** 31 - 1:
         max_v = 0xff
     else:
         max_v = 0xffff
     for i in range(100):
         p1 = (random.randint(0, max_v), random.randint(0, max_v), random.randint(0, max_v))
         print(p1, pm.deinterleave3(pm.interleave(*p1)))
         assert p1 == pm.deinterleave3(pm.interleave(*p1))
Ejemplo n.º 2
0
def to_zcurve(prctls):
    """ A mapping from R^n -> R based on the Morton z-curve """
    dim = len(prctls)
    SCALE = morton_scale(dim)
    int_prctls = [int(math.floor(p * SCALE)) for p in prctls]
    m1 = pymorton.interleave(*int_prctls)
    int_prctls_back = pymorton.deinterleave2(
        m1) if dim == 2 else pymorton.deinterleave3(m1)
    assert all(i1 == i2 for i1, i2 in zip(int_prctls, int_prctls_back))
    m2 = pymorton.interleave(*[SCALE - 1 for _ in range(dim)])
    return m1 / m2
Ejemplo n.º 3
0
    def test_pymorton(self):
        # Test standard hashing
        assert (pm.interleave(100, 50) == pm.interleave2(100, 50))
        assert (pm.interleave(10, 50, 40) == pm.interleave3(10, 50, 40))
        assert ((100, 30) == pm.deinterleave2(pm.interleave(100, 30)))
        assert (pm.deinterleave2(pm.interleave(100, 30)) == (100, 30))
        assert (pm.deinterleave3(pm.interleave(100, 30, 50)) == (100, 30, 50))

        # Test geo-hashing
        lat, lng = 40.712014, -74.008164
        latlng_morton = pm.interleave_latlng(lat, lng)
        assert('03023211232311330231120312032231' == \
                latlng_morton)
        assert(pm.deinterleave_latlng(latlng_morton) == \
                (40.712013971060514, -74.00816400535405))
Ejemplo n.º 4
0
    def test_pymorton(self):
        # Test standard hashing
        assert(pm.interleave(100, 50) == pm.interleave2(100, 50)) 
        assert(pm.interleave(10, 50, 40) == pm.interleave3(10, 50, 40))
        assert((100, 30) == pm.deinterleave2(pm.interleave(100, 30)))
        assert(pm.deinterleave2(pm.interleave(100,30)) == (100, 30))
        assert(pm.deinterleave3(pm.interleave(100, 30, 50)) == (100, 30, 50))

        # Test geo-hashing
        lat, lng = 40.712014, -74.008164
        latlng_morton = pm.interleave_latlng(lat, lng)
        assert('03023211232311330231120312032231' == \
                latlng_morton)
        assert(pm.deinterleave_latlng(latlng_morton) == \
                (40.712013971060514, -74.00816400535405))
Ejemplo n.º 5
0
    def create_agent_id_embedding_dic(self):
        z_order_dic = {}
        agent_embedding_dic = {}
        for agent_id in self.agent_dic:
            position = traci.junction.getPosition(agent_id)
            unique_Z_ID = pm.interleave(int(position[0]), int(position[1]))
            if self.config.Constants['Analysis_Mode']:
                try:
                    assert (unique_Z_ID not in z_order_dic)
                except Exception as e:
                    breakpoint()

            z_order_dic[unique_Z_ID] = agent_id
        sorted_z_vals = list(z_order_dic)
        sorted_z_vals.sort()

        ID_size = len(format(len(sorted_z_vals) - 1, 'b'))
        for index in range(0, len(sorted_z_vals)):
            z_val = sorted_z_vals[index]
            agent_id = z_order_dic[z_val]
            agent_id_embedding = [0] * ID_size
            index_bin = format(index, 'b')
            for i in range(len(index_bin)):
                agent_id_embedding[-i - 1] = int(index_bin[-i - 1])
            agent_embedding_dic[agent_id] = torch.tensor(
                agent_id_embedding,
                dtype=torch.float,
                device=self.config.device)

        return agent_embedding_dic, ID_size
Ejemplo n.º 6
0
 def from_cube(self, prctls: List[float]) -> float:
     """
         Inverse of space filling curve  I^n -> I
     """
     dim = len(prctls)
     SAFE = False  # relic
     SCALE = self.morton_scale(dim)
     int_prctls = [int(math.floor(p * SCALE)) for p in prctls]
     m1 = pymorton.interleave(*int_prctls)
     if SAFE:
         int_prctls_back = pymorton.deinterleave2(
             m1) if dim == 2 else pymorton.deinterleave3(m1)
         assert all(i1 == i2 for i1, i2 in zip(int_prctls, int_prctls_back))
     m2 = pymorton.interleave(*[SCALE - 1 for _ in range(dim)])
     zpercentile = m1 / m2
     return zpercentile
 def to_zcurve(self, prctls: List[float] ):
     """ A mapping from R^n -> R based on the Morton z-curve """
     SAFE = False
     dim = len(prctls)
     if dim==1:
         return self.to_zscores(prctls)[0]
     else:
         SCALE = self.morton_scale(dim)
         int_prctls = [ int(math.floor(p*SCALE)) for p in prctls ]
         m1         = pymorton.interleave(*int_prctls)
         if SAFE:
             int_prctls_back = pymorton.deinterleave2(m1) if dim==2 else  pymorton.deinterleave3(m1)
             assert all( i1==i2 for i1,i2 in zip(int_prctls, int_prctls_back))
         m2         = pymorton.interleave(*[ SCALE-1 for _ in range(dim) ])
         zpercentile =  m1/m2
         return StatsConventions.norminv(zpercentile)
Ejemplo n.º 8
0
def morton_distance_dask(geoseries):

    bounds = geoseries.bounds.to_numpy()
    total_bounds = geoseries.total_bounds
    x_coords, y_coords = _continuous_to_discrete_coords(
        bounds, level=16, total_bounds=total_bounds)

    ddf = from_geopandas(geoseries, npartitions=1)
    result = ddf.morton_distance().compute()

    expected = []

    for i in range(len(x_coords)):
        x = int(x_coords[i])
        y = int(y_coords[i])
        expected.append(interleave(x, y))

    assert list(result) == expected
    assert isinstance(result, pd.Series)
    assert_index_equal(ddf.index.compute(), result.index)
Ejemplo n.º 9
0
 def morton_large(dim):
     SCALE = ZCurveHelper.morton_scale(dim=dim)
     return pymorton.interleave(*[SCALE - 1 for _ in range(dim)])
Ejemplo n.º 10
0
 def test_hash_ordinality_3d(self):
     assert pm.interleave(10, 25, 50) < pm.interleave(10, 25, 100)
Ejemplo n.º 11
0
 def test_hash_ordinality_2d(self):
     assert pm.interleave(10, 25) < pm.interleave(10, 50)
Ejemplo n.º 12
0
 def test_hash_reversability_3d_valid(self):
     assert pm.deinterleave3(pm.interleave(100, 30, 50)) == (100, 30, 50)
Ejemplo n.º 13
0
 def test_hash_reversability_2d_valid(self):
     assert (100, 30) == pm.deinterleave2(pm.interleave(100, 30))
Ejemplo n.º 14
0
 def test_hashing_3d_valid(self):
     assert pm.interleave(10, 50, 40) == pm.interleave3(10, 50, 40)
Ejemplo n.º 15
0
 def test_hashing_2d_valid(self):
     assert pm.interleave(100, 50) == pm.interleave2(100, 50)
 def morton_large(dim):
     SCALE = ZCurveConventions.morton_scale(dim=dim)
     return pymorton.interleave(*[SCALE - 1 for _ in range(dim)])