diff --git a/benches/curve.rs b/benches/curve.rs index b03b734..7a529c7 100644 --- a/benches/curve.rs +++ b/benches/curve.rs @@ -3,11 +3,10 @@ // Copyright (c) A5 contributors // Benchmarks for the space-filling curve: cell -> s encode (triple_to_s) and -// fractional-point location (ij_to_s). // // CI runs this same file against both the PR and its merge-base with main, so // it must compile and run on either side of the L-system migration. It uses -// ONLY the API common to both engines — `triple_to_s` and `ij_to_s` — whose +// ONLY the API common to both engines — `triple_to_s` — whose // signatures and (bit-identical) behavior are unchanged across the swap, so // both runs measure the equivalent operation on identical inputs. The decode // primitive changed name across the migration (s_to_anchor -> s_to_cell) with @@ -16,8 +15,7 @@ use criterion::{black_box, criterion_group, criterion_main, Criterion}; -use a5::coordinate_systems::IJ; -use a5::lattice::{ij_to_s, triple_in_bounds, triple_to_s, Orientation, Triple}; +use a5::lattice::{triple_in_bounds, triple_to_s, Orientation, Triple}; mod common; @@ -48,17 +46,6 @@ fn sample_triples(resolution: usize, n: usize, seed: u32) -> Vec { out } -/// The cell's centroid in IJ coordinates -/// (parity 0: (x+y+1/3, -x+1/3), parity 1: (x+y-1/3, -x+2/3)). -fn centroid_ij(t: &Triple) -> IJ { - let parity = t.x + t.y + t.z; - if parity == 0 { - IJ::new(t.x as f64 + t.y as f64 + 1.0 / 3.0, -t.x as f64 + 1.0 / 3.0) - } else { - IJ::new(t.x as f64 + t.y as f64 - 1.0 / 3.0, -t.x as f64 + 2.0 / 3.0) - } -} - fn bench_triple_to_s(c: &mut Criterion) { let mut g = c.benchmark_group("tripleToS"); for resolution in [5usize, 15, 28] { @@ -86,20 +73,5 @@ fn bench_triple_to_s(c: &mut Criterion) { g.finish(); } -fn bench_ij_to_s(c: &mut Criterion) { - let triples = sample_triples(15, N, 42); - let ijs: Vec = triples.iter().map(centroid_ij).collect(); - let mut g = c.benchmark_group("IJToS"); - let mut i = 0usize; - g.bench_function("IJToS res 15", |b| { - b.iter(|| { - let ij = ijs[i & (N - 1)]; - i += 1; - black_box(ij_to_s(black_box(ij), 15, Orientation::UV)) - }) - }); - g.finish(); -} - -criterion_group!(benches, bench_triple_to_s, bench_ij_to_s); +criterion_group!(benches, bench_triple_to_s); criterion_main!(benches); diff --git a/src/core/cell.rs b/src/core/cell.rs index fb744a1..eac8c19 100644 --- a/src/core/cell.rs +++ b/src/core/cell.rs @@ -2,27 +2,26 @@ // SPDX-License-Identifier: Apache-2.0 // Copyright (c) A5 contributors -use crate::coordinate_systems::{Cartesian, Face, LonLat, Spherical}; +use crate::coordinate_systems::{Face, LonLat, Spherical}; use crate::core::constants::PI_OVER_5; use crate::core::coordinate_transforms::{ face_to_ij, from_lon_lat, normalize_longitudes, to_lon_lat, to_polar, }; -use crate::core::origin::{ - find_nearest_origin, find_nearest_origin_cartesian, quintant_to_segment, segment_to_quintant, +use crate::core::origin::{find_nearest_origin, find_nearest_origins, quintant_tables}; +use crate::core::serialization::{ + deserialize, serialize, FIRST_HILBERT_RESOLUTION, MAX_RESOLUTION, WORLD_CELL, }; -use crate::core::serialization::{deserialize, serialize, FIRST_HILBERT_RESOLUTION, WORLD_CELL}; use crate::core::tiling::{ - get_face_vertices, get_pentagon_center, get_pentagon_vertices, get_quintant_polar, - get_quintant_vertices, + cell_margin_scaled, get_face_vertices, get_pentagon_center, get_pentagon_vertices, + get_quintant_polar, get_quintant_vertices, }; use crate::core::utils::{A5Cell, Origin, OriginId}; use crate::geometry::pentagon::PentagonShape; -use crate::lattice::{ij_to_s, s_to_cell}; +use crate::lattice::curve::round_to_triple; +use crate::lattice::{s_to_cell, triple_flavor, triple_in_bounds, triple_to_s, Triple}; use crate::projections::dodecahedron::DodecahedronProjection; -use crate::traversal::global_neighbors::get_global_cell_neighbors; -use crate::utils::spiral::{Spiral, SPIRAL_SAMPLE_COUNT}; +use crate::traversal::neighbors::NEIGHBOR_DELTAS; use std::cell::RefCell; -use std::collections::HashSet; // Single-entry cache of the most recent successful lookup. Speeds up // dense-sample workloads (polygon boundary tracing, line tracing) where @@ -40,21 +39,6 @@ thread_local! { static LAST_RESULT: RefCell> = const { RefCell::new(None) }; } -/// Update the single-entry cache with a successful (cell, cell_id) pair. -fn cache_result(cell: &A5Cell, cell_id: u64, resolution: i32) -> Result { - let pentagon = get_pentagon(cell)?; - let origin_id = cell.origin_id; - LAST_RESULT.with(|c| { - *c.borrow_mut() = Some(LastResult { - cell_id, - pentagon, - origin_id, - resolution, - }); - }); - Ok(cell_id) -} - /// Convert lon/lat coordinates to A5 cell ID pub fn lonlat_to_cell(lonlat: LonLat, resolution: i32) -> Result { spherical_to_cell(from_lon_lat(lonlat), resolution) @@ -72,13 +56,24 @@ pub fn spherical_to_cell(spherical: Spherical, resolution: i32) -> Result Result, String> { let last_ref = c.borrow(); let last = match last_ref.as_ref() { @@ -97,140 +92,227 @@ pub fn spherical_to_cell(spherical: Spherical, resolution: i32) -> Result 0.0 { - return cache_result(&first_estimate, first_key, resolution); - } - - // Spiral search: perturb the point in the tangent plane to find nearby - // estimate cells (see src/utils/spiral.rs). - let hilbert_resolution = 1 + resolution - FIRST_HILBERT_RESOLUTION; - let scale = SPIRAL_SCALE_RAD / 2.0_f64.powi(hilbert_resolution); - let mut estimate_set: HashSet = HashSet::new(); - estimate_set.insert(first_key); - let mut cells: Vec<(u64, f64)> = vec![(first_key, first_distance)]; - - let spiral = Spiral::new(spherical, scale); - for i in 0..SPIRAL_SAMPLE_COUNT { - let estimate = cartesian_to_estimate(spiral.sample(i), resolution)?; - let estimate_key = serialize(&estimate)?; - if estimate_set.contains(&estimate_key) { - continue; - } - estimate_set.insert(estimate_key); - let distance = a5cell_contains_point(&estimate, spherical)?; - if distance > 0.0 { - return cache_result(&estimate, estimate_key, resolution); - } - cells.push((estimate_key, distance)); - } - - // Spiral exhausted without finding a strict container. This is reachable - // for points right at the polar singularity at very high resolutions, - // where re-projecting any tangent sample snaps back to a small set of - // cells while the geometrically-containing cell is offset by one - // adjacency step. Fall back to direct neighbours of the closest spiral - // candidate, which always finds it. - cells.sort_by(|a, b| b.1.partial_cmp(&a.1).unwrap_or(std::cmp::Ordering::Equal)); - let k = std::cmp::min(3, cells.len()); - for j in 0..k { - let neighbors = get_global_cell_neighbors(cells[j].0, false); - for neighbor_key in neighbors { - if estimate_set.contains(&neighbor_key) { - continue; - } - estimate_set.insert(neighbor_key); - let neighbor_cell = deserialize(neighbor_key)?; - let distance = a5cell_contains_point(&neighbor_cell, spherical)?; - if distance > 0.0 { - return cache_result(&neighbor_cell, neighbor_key, resolution); - } - cells.push((neighbor_key, distance)); - } - } - - // True fallback: closest cell wins, even if technically just outside. - cells.sort_by(|a, b| b.1.partial_cmp(&a.1).unwrap_or(std::cmp::Ordering::Equal)); - let fallback_key = cells[0].0; - let fallback = deserialize(fallback_key)?; - cache_result(&fallback, fallback_key, resolution) -} - -// Spiral perturbation radius at hilbertResolution=1 (in radians of tangent -// offset). For higher resolutions we scale by 1/2^hilbertResolution. -const SPIRAL_SCALE_RAD: f64 = 70.0 * std::f64::consts::PI / 180.0; - -/// The ij_to_s function uses the triangular lattice which only approximates the pentagon lattice -/// Thus these functions only return a cell nearby, and we need to search the neighbourhood to find the correct cell -/// TODO: Implement a more accurate function -fn spherical_to_estimate(spherical: Spherical, resolution: i32) -> Result { + // Fast path: locate the containing pentagon directly. Round to the leaf + // triangle, get the closed-form flavor, and test the pentagon geometrically + // in the scaled quintant frame; the triangular and pentagonal lattices are + // not congruent, but the containing pentagon is always the triangle's cell + // or one of its fixed neighbor deltas (verified exhaustively), so at most + // one 7-candidate walk resolves it — then a single curve encode. let origin = find_nearest_origin(spherical); let dodecahedron = DodecahedronProjection::get_thread_local(); let dodec_point = dodecahedron.forward(spherical, origin.id)?; - face_to_estimate(dodec_point, origin, resolution) + let quintant = get_quintant_polar(to_polar(dodec_point)); + let best = lookup_in_quintant(dodec_point, origin, quintant, resolution)?; + if let Some(candidate) = &best { + if candidate.margin > 0.0 { + return Ok(accept_candidate(candidate)); + } + } + // No strictly-containing pentagon in the assigned frame: the point sits on + // a cell boundary or within float noise of a quintant/face seam. + spherical_to_cell_boundary(spherical, resolution, origin.id, quintant, best) } -fn cartesian_to_estimate(cartesian: Cartesian, resolution: i32) -> Result { - let origin = find_nearest_origin_cartesian(cartesian); - let dodecahedron = DodecahedronProjection::get_thread_local(); - let dodec_point = dodecahedron.forward_cartesian(cartesian, origin.id)?; - face_to_estimate(dodec_point, origin, resolution) +// The best cell for `dodec_point` (face frame of `origin`) within one +// quintant: round to the leaf triangle, closed-form flavor, geometric margin, +// and — when the triangle's cell doesn't strictly contain the point — the +// best of its fixed neighbor deltas. margin > 0 ⇔ the unique strictly- +// containing pentagon. +struct CellCandidate { + margin: f64, + cell_id: u64, + triple: Triple, + flavor: u8, + quintant: usize, + hilbert_resolution: usize, + origin_id: OriginId, + resolution: i32, } -fn face_to_estimate( - mut dodec_point: Face, +#[inline] +fn lookup_in_quintant( + dodec_point: Face, origin: &Origin, + quintant: usize, resolution: i32, -) -> Result { - let polar = to_polar(dodec_point); - let quintant = get_quintant_polar(polar); - let (segment, orientation) = quintant_to_segment(quintant, origin); - - if resolution < FIRST_HILBERT_RESOLUTION { - // For low resolutions there is no Hilbert curve - return Ok(A5Cell { - s: 0, - segment, - origin_id: origin.id, - resolution, - }); - } +) -> Result, String> { + let tables = quintant_tables(); + let global_quintant = origin.id as usize * 5 + quintant; + let segment = tables.quintant_to_segment[global_quintant] as usize; + let orientation = tables.quintant_to_orientation[global_quintant]; + + // Res-30 ids can only encode quintants 0-41 (by design: 64 bits cannot fit + // res 30 globally, so A5 covers the populous region). In the unsupported + // quintants, answer at the finest representable resolution instead — the + // res-29 cell CONTAINING the point. (Previously the cap lived only in + // serialize, which swapped in the res-29 parent of a res-30 search result — + // a cell that fails to contain the query point ~44% of the time there.) + let segment_n = (segment + 5 - origin.first_quintant) % 5; + let resolution = if resolution == MAX_RESOLUTION && 5 * origin.id as usize + segment_n > 41 { + MAX_RESOLUTION - 1 + } else { + resolution + }; - // Rotate into right fifth + let (mut px, mut py) = (dodec_point.x(), dodec_point.y()); if quintant != 0 { let extra_angle = 2.0 * PI_OVER_5.get() * quintant as f64; let cos_angle = (-extra_angle).cos(); let sin_angle = (-extra_angle).sin(); - let rotated_x = cos_angle * dodec_point.x() - sin_angle * dodec_point.y(); - let rotated_y = sin_angle * dodec_point.x() + cos_angle * dodec_point.y(); - dodec_point = Face::new(rotated_x, rotated_y); + let rotated_x = cos_angle * px - sin_angle * py; + let rotated_y = sin_angle * px + cos_angle * py; + px = rotated_x; + py = rotated_y; } - - let hilbert_resolution = 1 + resolution - FIRST_HILBERT_RESOLUTION; - let scale_factor = 2.0_f64.powi(hilbert_resolution); - dodec_point = Face::new( - dodec_point.x() * scale_factor, - dodec_point.y() * scale_factor, - ); - - let ij = face_to_ij(dodec_point); - let s = ij_to_s(ij, hilbert_resolution as usize, orientation); - - Ok(A5Cell { - s, + let hilbert_resolution = (1 + resolution - FIRST_HILBERT_RESOLUTION) as usize; + let scale = (1u64 << hilbert_resolution) as f64; + px *= scale; + py *= scale; + let ij = face_to_ij(Face::new(px, py)); + + let base = round_to_triple(ij, hilbert_resolution); + let mut triple = base; + let mut flavor = triple_flavor(&base); + let mut margin = cell_margin_scaled(px, py, base.x, base.y, flavor); + if margin <= 0.0 { + // All deltas are relative to the ROUNDED triple (the containing + // pentagon is always among its fixed neighbors), not to intermediate + // best cells. + let max_row = (1i64 << hilbert_resolution) as i32 - 1; + for d in &NEIGHBOR_DELTAS[flavor as usize].all { + let neighbor = Triple::new(base.x + d.x, base.y + d.y, base.z + d.z); + if !triple_in_bounds(&neighbor, max_row) { + continue; + } + let neighbor_flavor = triple_flavor(&neighbor); + let neighbor_margin = + cell_margin_scaled(px, py, neighbor.x, neighbor.y, neighbor_flavor); + if neighbor_margin > margin { + triple = neighbor; + flavor = neighbor_flavor; + margin = neighbor_margin; + if margin > 0.0 { + break; + } + } + } + } + let s = match triple_to_s(&triple, hilbert_resolution, orientation) { + Some(s) => s, + None => return Ok(None), + }; + let cell_id = serialize(&A5Cell { + origin_id: origin.id, segment, + s, + resolution, + })?; + Ok(Some(CellCandidate { + margin, + cell_id, + triple, + flavor, + quintant, + hilbert_resolution, origin_id: origin.id, resolution, - }) + })) +} + +/// Cache the winning pentagon for the dense-sample fast accept and return its id. +#[inline] +fn accept_candidate(c: &CellCandidate) -> u64 { + let pentagon = + get_pentagon_vertices(c.hilbert_resolution as i32, c.quintant, &c.triple, c.flavor); + let cell_id = c.cell_id; + let origin_id = c.origin_id; + let resolution = c.resolution; + LAST_RESULT.with(|cache| { + *cache.borrow_mut() = Some(LastResult { + cell_id, + pentagon, + origin_id, + resolution, + }); + }); + cell_id +} + +// Tie margin tolerance: containment margins are cross products of unit-scale +// pentagon edges against coordinates of magnitude up to 2^hilbert_resolution, +// so their float noise is ~2^(hilbert_resolution - 52); 2^-44 gives a wide +// safety factor while staying geometrically negligible (cells are unit-size +// in the scaled frame). +const TIE_EPS: f64 = 5.684341886080802e-14; // 2^-44 + +/// Boundary resolution: the point has no strictly-containing pentagon in its +/// assigned frame — it lies on a cell edge, or within float noise of a +/// quintant or face seam (where the containing cell belongs to a neighboring +/// frame). Deterministically rerun the same lookup in every frame that could +/// own the point — all 5 quintants of the 3 nearest faces (a dodecahedron +/// vertex joins 3 faces; a face center joins 5 quintants). A strictly- +/// containing pentagon is unique, so the first strict hit wins; if none +/// exists the point is exactly on a boundary shared by the near-best +/// candidates, and the tie-break is the cell that comes FIRST ALONG THE CURVE +/// — the lowest cell id (origin/segment occupy the top id bits in curve +/// order, so numeric order is curve order globally). +fn spherical_to_cell_boundary( + spherical: Spherical, + resolution: i32, + first_origin_id: OriginId, + first_quintant: usize, + first: Option, +) -> Result { + let mut candidates: Vec = Vec::with_capacity(16); + if let Some(c) = first { + candidates.push(c); + } + let dodecahedron = DodecahedronProjection::get_thread_local(); + for origin in find_nearest_origins(spherical, 3) { + let dodec_point = dodecahedron.forward(spherical, origin.id)?; + // Try this origin's assigned quintant first, then its gamma-adjacent + // neighbors: seam points resolve in the adjacent frame, so this order + // finds the strict container in 1-2 lookups instead of scanning all 5. + let q0 = get_quintant_polar(to_polar(dodec_point)); + for dq in [0usize, 1, 4, 2, 3] { + let quintant = (q0 + dq) % 5; + if origin.id == first_origin_id && quintant == first_quintant { + continue; + } + let Some(c) = lookup_in_quintant(dodec_point, origin, quintant, resolution)? else { + continue; + }; + if c.margin > 0.0 { + return Ok(accept_candidate(&c)); + } + candidates.push(c); + } + } + let mut best = f64::NEG_INFINITY; + for c in &candidates { + if c.margin > best { + best = c.margin; + } + } + let eps = TIE_EPS * (1u64 << (1 + resolution - FIRST_HILBERT_RESOLUTION)) as f64; + let mut winner: Option<&CellCandidate> = None; + for c in &candidates { + if c.margin >= best - eps && winner.is_none_or(|w| c.cell_id < w.cell_id) { + winner = Some(c); + } + } + match winner { + Some(w) => Ok(accept_candidate(w)), + None => Err("spherical_to_cell: no candidate cell found".to_string()), + } } /// Get the pentagon shape for a given A5 cell pub fn get_pentagon(cell: &A5Cell) -> Result { - let (quintant, orientation) = segment_to_quintant(cell.segment, cell.origin()); + let tables = quintant_tables(); + let global_quintant = cell.origin_id as usize * 5 + cell.segment; + let quintant = tables.segment_to_quintant[global_quintant] as usize; + let orientation = tables.segment_to_orientation[global_quintant]; if cell.resolution == FIRST_HILBERT_RESOLUTION - 1 { let pentagon_shape = get_quintant_vertices(quintant); @@ -258,7 +340,10 @@ pub fn cell_to_spherical(cell: u64) -> Result= FIRST_HILBERT_RESOLUTION { // Fast path: the pentagon center is O(1) from (triple, flavor) — no need // to construct the pentagon itself. - let (quintant, orientation) = segment_to_quintant(cell_data.segment, cell_data.origin()); + let tables = quintant_tables(); + let global_quintant = cell_data.origin_id as usize * 5 + cell_data.segment; + let quintant = tables.segment_to_quintant[global_quintant] as usize; + let orientation = tables.segment_to_orientation[global_quintant]; let hilbert_resolution = cell_data.resolution - FIRST_HILBERT_RESOLUTION + 1; let cell_geom = s_to_cell(cell_data.s, hilbert_resolution as usize, orientation); let center = get_pentagon_center( @@ -358,7 +443,8 @@ pub fn a5cell_contains_point(cell: &A5Cell, spherical: Spherical) -> Result bool { layout == CLOCKWISE_FAN.as_slice() || layout == CLOCKWISE_STEP.as_slice() } -/// Find the nearest origin to a point on the sphere -/// Uses haversine formula to calculate great-circle distance -pub fn find_nearest_origin(point: Spherical) -> &'static Origin { - let origins = get_origins(); - let mut min_distance = f64::INFINITY; - let mut nearest = &origins[0]; +/// Lookup tables for the two mappings above, built once at startup — there +/// are only 60 (origin, quintant) pairs. Indexed by origin.id * 5 + quintant +/// (resp. + segment, the global quintant number as encoded in serialized cell +/// ids). Call sites read these directly instead of calling the functions. +pub struct QuintantTables { + pub quintant_to_segment: [u8; 60], + pub quintant_to_orientation: [Orientation; 60], + pub segment_to_quintant: [u8; 60], + pub segment_to_orientation: [Orientation; 60], +} - for origin in origins { - let distance = haversine(point, origin.axis); - if distance < min_distance { - min_distance = distance; - nearest = origin; +pub fn quintant_tables() -> &'static QuintantTables { + static TABLES: OnceLock = OnceLock::new(); + TABLES.get_or_init(|| { + let mut tables = QuintantTables { + quintant_to_segment: [0; 60], + quintant_to_orientation: [Orientation::UV; 60], + segment_to_quintant: [0; 60], + segment_to_orientation: [Orientation::UV; 60], + }; + for origin in get_origins() { + for i in 0..5 { + let index = origin.id as usize * 5 + i; + let (segment, orientation) = quintant_to_segment(i, origin); + tables.quintant_to_segment[index] = segment as u8; + tables.quintant_to_orientation[index] = orientation; + let (quintant, orientation) = segment_to_quintant(i, origin); + tables.segment_to_quintant[index] = quintant as u8; + tables.segment_to_orientation[index] = orientation; + } } - } + tables + }) +} - nearest +/// The `count` origins nearest to a point, by haversine distance, nearest +/// first. Used by the boundary resolution in `spherical_to_cell`: a point on +/// (or within float noise of) a face seam or dodecahedron vertex may belong +/// to a cell of the 2nd- or 3rd-nearest face. +pub fn find_nearest_origins(point: Spherical, count: usize) -> Vec<&'static Origin> { + let origins = get_origins(); + let mut sorted: Vec<&'static Origin> = origins.iter().collect(); + sorted.sort_by(|a, b| { + haversine(point, a.axis) + .partial_cmp(&haversine(point, b.axis)) + .unwrap_or(std::cmp::Ordering::Equal) + }); + sorted.truncate(count); + sorted } -/// Same as `find_nearest_origin` but takes a Cartesian unit vector. The -/// argmin of `1 − a·b` matches the argmin of haversine, so this returns -/// the same origin without any spherical-trig conversions. -pub fn find_nearest_origin_cartesian(c: Cartesian) -> &'static Origin { +/// Find the nearest origin to a point on the sphere +/// Uses haversine formula to calculate great-circle distance +pub fn find_nearest_origin(point: Spherical) -> &'static Origin { let origins = get_origins(); let mut min_distance = f64::INFINITY; let mut nearest = &origins[0]; for origin in origins { - let ax = origin.axis_cartesian; - let distance = 1.0 - (c.x() * ax.x() + c.y() * ax.y() + c.z() * ax.z()); + let distance = haversine(point, origin.axis); if distance < min_distance { min_distance = distance; nearest = origin; diff --git a/src/core/tiling.rs b/src/core/tiling.rs index 04c599e..f7f6cef 100644 --- a/src/core/tiling.rs +++ b/src/core/tiling.rs @@ -46,6 +46,58 @@ static QUINTANT_ROTATIONS: LazyLock<[Mat2; 5]> = LazyLock::new(|| { rotations }); +/// The base PENTAGON under each flavor's orientation ops, flattened to +/// [x0,y0,...,x4,y4] for the allocation-free containment test below. +static FLAVOR_PENTAGONS: LazyLock<[[f64; 10]; 4]> = LazyLock::new(|| { + let mut out = [[0.0f64; 10]; 4]; + for (flavor, slot) in out.iter_mut().enumerate() { + let mut p = pentagon().clone(); + if flavor & 1 == 1 { + p.rotate180(); + } + if flavor & 2 == 2 { + p.reflect_y(); + } + let verts = p.get_vertices(); + for i in 0..5 { + slot[i * 2] = verts[i].x(); + slot[i * 2 + 1] = verts[i].y(); + } + } + out +}); + +/// Signed containment margin of a point in the pentagon of (triple.x, +/// triple.y, flavor) (> 0 ⇔ strictly inside; the most-violated-edge cross +/// product otherwise), tested in the SCALED quintant-0 frame (face coords rotated into +/// quintant 0 and scaled by 2^resolution — the frame `face_to_estimate` works +/// in). In this frame the cell's pentagon is the flavor-oriented base pentagon +/// translated by BASIS·(x+y, -x+(flavor&1)), so the test needs no curve +/// decode, no re-projection, and — pentagons being unit-size here — stays +/// well-conditioned at every resolution. +pub fn cell_margin_scaled(px: f64, py: f64, x: i32, y: i32, flavor: u8) -> f64 { + let rx = (x + y) as f64; + let ry = (-x + (flavor & 1) as i32) as f64; + let b = basis(); + let tx = b.m00 * rx + b.m01 * ry; + let ty = b.m10 * rx + b.m11 * ry; + let pent = &FLAVOR_PENTAGONS[flavor as usize]; + let mut margin = f64::INFINITY; + for i in 0..5 { + let j = if i == 4 { 0 } else { i + 1 }; + let v1x = pent[i * 2] + tx; + let v1y = pent[i * 2 + 1] + ty; + let v2x = pent[j * 2] + tx; + let v2y = pent[j * 2 + 1] + ty; + // (v1 - v2) × (p - v1): < 0 ⇒ strictly outside this edge + let cross = (v1x - v2x) * (py - v1y) - (v1y - v2y) * (px - v1x); + if cross < margin { + margin = cross; + } + } + margin +} + /// Transform a pentagon shape using a 2x2 matrix fn transform_pentagon(pentagon: &mut PentagonShape, matrix: &Mat2) { let vertices = pentagon.get_vertices_vec(); diff --git a/src/lattice/compat.rs b/src/lattice/compat.rs index e5c7d02..182b6d9 100644 --- a/src/lattice/compat.rs +++ b/src/lattice/compat.rs @@ -296,7 +296,7 @@ pub fn compat_triple_to_s(t: &Triple, resolution: usize, orientation: Orientatio raw = Triple::new(raw.z, raw.y, raw.x); } let (ab_a, ab_b) = triple_to_ab(&raw); - let s_geo = axiom_target_to_s(&ORIGINAL, ab_a, ab_b, resolution, *AXIOM_W, true).0; + let s_geo = axiom_target_to_s(&ORIGINAL, ab_a, ab_b, resolution, *AXIOM_W).0; let (mut digits, len) = digits_of(s_geo, resolution); inverse_shift(&mut digits[..len], rec.invert_j, rec.flip_ij); let v = pack_digits(&digits[..len]); diff --git a/src/lattice/curve.rs b/src/lattice/curve.rs index cdb30ee..0572fa2 100644 --- a/src/lattice/curve.rs +++ b/src/lattice/curve.rs @@ -7,17 +7,49 @@ // (s_to_cell / s_to_triple) and triple.rs (triple_to_s). use crate::coordinate_systems::IJ; -use crate::lattice::lsystem::sum_point_to_s; -use crate::lattice::types::Orientation; +use crate::lattice::types::Triple; -/// Fractional IJ point -> curve position `s` of the containing cell, by direct -/// L-system descent. The IJ plane maps onto the L-system's corner-sum frame by -/// the exact affine map target = (12*(i+j), -12*j). -pub fn ij_to_s(ij: IJ, resolution: usize, orientation: Orientation) -> u64 { - sum_point_to_s( - 12.0 * (ij.x() + ij.y()), - -12.0 * ij.y(), - resolution, - orientation, - ) +/// Locate the lattice triangle containing a fractional IJ point, as a triple. +/// +/// The triples tile the IJ plane as triangles: the unit square (m, n) = +/// (floor(i), floor(j)) splits along the diagonal u+v = 1 into a lower triangle +/// (the parity-0 cell (-n, m+n, -m), centroid (m+1/3, n+1/3)) and an upper +/// triangle (the parity-1 cell (-n, m+n+1, -m), centroid (m+2/3, n+2/3)) — the +/// centroid correspondences were derived from the exact IJ <-> corner-sum +/// affine map target = (12*(i+j), -12*j) and validated against the old-engine +/// discretization over all resolutions and orientations. Point location is two +/// floors + one diagonal comparison. Points exactly on a triangle edge have no unique cell; the >= +/// tie-break below is the fixed convention. +/// +/// The result is clamped into quintant bounds (m >= 0, n >= 0, m+n+parity <= +/// max_row, equivalent to triple_in_bounds): a point slightly outside the +/// quintant (as the estimate path can produce near quintant edges) must still +/// map to a valid cell for the exact encode. +pub fn round_to_triple(ij: IJ, resolution: usize) -> Triple { + let max_row = (1i64 << resolution) - 1; + let floor_i = ij.x().floor(); + let floor_j = ij.y().floor(); + let mut m = floor_i as i64; + let mut n = floor_j as i64; + let mut parity: i64 = if (ij.x() - floor_i) + (ij.y() - floor_j) >= 1.0 { + 1 + } else { + 0 + }; + if m < 0 { + m = 0; + } + if n < 0 { + n = 0; + } + if m + n + parity > max_row { + parity = 0; + if m + n > max_row { + let over = m + n - max_row; + let dm = over.min(m); + m -= dm; + n -= over - dm; + } + } + Triple::new(-n as i32, (m + n + parity) as i32, -m as i32) } diff --git a/src/lattice/lsystem/mod.rs b/src/lattice/lsystem/mod.rs index 990d5ff..a6fd011 100644 --- a/src/lattice/lsystem/mod.rs +++ b/src/lattice/lsystem/mod.rs @@ -147,53 +147,13 @@ pub fn axiom_leaf_cell(t: &CurveTables, s: u64, r: usize, axiom: usize) -> LeafC } } -// ---------- inverse: descend by which child's convex footprint contains the target ---------- -#[allow(clippy::too_many_arguments)] -fn inside_score( - t: &CurveTables, - motif: usize, - flip: u8, - lvl: usize, - pos_a: f64, - pos_b: f64, - ta: f64, - tb: f64, - best: f64, -) -> f64 { - let scale = POW2[lvl - 1]; - let k = motif * 2 + flip as usize; - let edges = &t.fp_edges[t.fp_offset[k]..t.fp_offset[k + 1]]; - // pos is fixed across this hull; fold 3*pos into the target once. - let ra = ta - 3.0 * pos_a; - let rb = tb - 3.0 * pos_b; - let mut min_cross = f64::INFINITY; - let mut e = 0; - while e < edges.len() { - let dta = ra - edges[e] * scale; - let dtb = rb - edges[e + 1] * scale; - let cross = edges[e + 2] * dtb - edges[e + 3] * dta; - if cross < min_cross { - min_cross = cross; - if min_cross <= 0.0 && min_cross <= best { - return min_cross; - } - } - e += 4; - } - min_cross -} - -// Shared descent for both leaf modes. `exact` targets are corner sums of real -// cells (leaf resolved by exact sum match); fractional targets resolve the leaf -// by point-in-cell over the 4 level-1 triangles. Internal; also used by compat.rs. -pub fn axiom_target_to_s( - t: &CurveTables, - ta: f64, - tb: f64, - r: usize, - axiom: usize, - exact: bool, -) -> (u64, u8) { +// ---------- inverse: descend by the branchless child classifier ---------- +// Shared descent: the target is the corner sum of a real cell, which is +// strictly interior at every level, so the branchless classifier is provably +// the containing child (and the leaf resolves by exact sum match). Fractional +// point location no longer descends at all — spherical_to_cell rounds to a triple +// (see curve.rs round_to_triple). Internal; also used by compat.rs. +pub fn axiom_target_to_s(t: &CurveTables, ta: f64, tb: f64, r: usize, axiom: usize) -> (u64, u8) { let mut motif = axiom; let mut flip: u8 = 0; let mut pos_a = 0.0f64; @@ -203,46 +163,13 @@ pub fn axiom_target_to_s( while level >= 2 { let scale = POW2[level - 2]; let sign = if flip == 1 { -scale } else { scale }; - // Exact targets (real cell corner sums) are strictly interior at every - // level, so the branchless classifier is provably the containing child — - // and it beats the 4-hull scan in native code. Fractional targets can sit - // on a child boundary, where the classifier's tie-break can differ from - // the argmax; there the classifier + a verify costs more than just the - // scan, so keep the exact argmax scan for that (rarer, non-hot) path. - let best_d = if exact { - classify( - t, - motif * 2 + flip as usize, - ta - 3.0 * pos_a, - tb - 3.0 * pos_b, - scale, - ) - } else { - let mut best_d = 0usize; - let mut best_score = f64::NEG_INFINITY; - for d in 0..4 { - let ci = motif * 4 + d; - let score = inside_score( - t, - t.child_token[ci] as usize, - flip ^ t.child_flip[ci], - level - 1, - pos_a + t.child_off_a[ci] * sign, - pos_b + t.child_off_b[ci] * sign, - ta, - tb, - best_score, - ); - if score > best_score { - best_score = score; - best_d = d; - if score > 0.0 { - break; - } - } - } - best_d - }; + let best_d = classify( + t, + motif * 2 + flip as usize, + ta - 3.0 * pos_a, + tb - 3.0 * pos_b, + scale, + ); let ci = motif * 4 + best_d; pos_a += t.child_off_a[ci] * sign; pos_b += t.child_off_b[ci] * sign; @@ -251,50 +178,25 @@ pub fn axiom_target_to_s( s_val |= (best_d as u64) << (2 * (level - 1)); level -= 1; } - // level 1: pick the leaf cell, by exact corner-sum match or point-in-cell + // level 1: pick the leaf cell by exact corner-sum match let base = motif * 2 + flip as usize; let mut d0 = 0usize; - if exact { - let rel_a = ta - 3.0 * pos_a; - let rel_b = tb - 3.0 * pos_b; - let mut found = false; - for d in 0..4 { - if t.leaf_sum[base * 8 + d * 2] == rel_a && t.leaf_sum[base * 8 + d * 2 + 1] == rel_b { - d0 = d; - found = true; - break; - } - } - if !found { - panic!( - "lsystem inverse: no leaf match for corner sum ({},{})", - ta, tb - ); - } - } else { - let ra = ta - 3.0 * pos_a; - let rb = tb - 3.0 * pos_b; - let mut best_score = f64::NEG_INFINITY; - for d in 0..4 { - let mut min_cross = f64::INFINITY; - for e in 0..3 { - let o = base * 48 + d * 12 + e * 4; - let dta = ra - t.leaf_tri[o]; - let dtb = rb - t.leaf_tri[o + 1]; - let cross = t.leaf_tri[o + 2] * dtb - t.leaf_tri[o + 3] * dta; - if cross < min_cross { - min_cross = cross; - } - } - if min_cross > best_score { - best_score = min_cross; - d0 = d; - if min_cross > 0.0 { - break; - } - } + let rel_a = ta - 3.0 * pos_a; + let rel_b = tb - 3.0 * pos_b; + let mut found = false; + for d in 0..4 { + if t.leaf_sum[base * 8 + d * 2] == rel_a && t.leaf_sum[base * 8 + d * 2 + 1] == rel_b { + d0 = d; + found = true; + break; } } + if !found { + panic!( + "lsystem inverse: no leaf match for corner sum ({},{})", + ta, tb + ); + } (s_val | d0 as u64, t.leaf_flavor[base * 4 + d0]) } @@ -399,42 +301,7 @@ pub fn triple_to_s_lattice(triple: &Triple, resolution: usize, orientation: Orie } else { 0.0 }; - let s_axiom = axiom_target_to_s( - &A5, - ab_a - tau_sum, - ab_b + tau_sum, - resolution, - rec.axiom, - true, - ) - .0; - if rec.reverse { - (1u64 << (2 * resolution)) - 1 - s_axiom - } else { - s_axiom - } -} - -/// Fractional point -> the curve position `s` of the containing cell, by direct -/// descent. The target is given in the corner-sum frame (= 3x the L-system (a,b) -/// point frame); callers map their coordinate system into it (for the IJ plane -/// the exact affine map is target = (12*(i+j), -12*j), see curve.rs). -pub fn sum_point_to_s(ta: f64, tb: f64, resolution: usize, orientation: Orientation) -> u64 { - let rec = &A5_ORIENT[orient_index(orientation)]; - let tau_sum = if rec.is_b { - 12.0 * POW2[resolution] - } else { - 0.0 - }; - let s_axiom = axiom_target_to_s( - &A5, - ta - tau_sum, - tb + tau_sum, - resolution, - rec.axiom, - false, - ) - .0; + let s_axiom = axiom_target_to_s(&A5, ab_a - tau_sum, ab_b + tau_sum, resolution, rec.axiom).0; if rec.reverse { (1u64 << (2 * resolution)) - 1 - s_axiom } else { diff --git a/src/lattice/lsystem/tables.rs b/src/lattice/lsystem/tables.rs index 9ad690b..f0821e4 100644 --- a/src/lattice/lsystem/tables.rs +++ b/src/lattice/lsystem/tables.rs @@ -39,10 +39,9 @@ pub struct CurveTables { // k = motif*2+flip are fp_edges[fp_offset[k]..fp_offset[k + 1]]. pub fp_edges: Vec, pub fp_offset: Vec, - // leaf tables per (motif, flip): 4 host cells as corner sums, point-in-cell - // triangle edges, and pentagon flavors + // leaf tables per (motif, flip): 4 host cells as corner sums and pentagon + // flavors pub leaf_sum: Vec, - pub leaf_tri: Vec, pub leaf_flavor: Vec, // Branchless child classifier per state k = motif*2+flip: 3 separating lines // (`class_sep[k*9 ..]` = [nx0,ny0,c0, nx1,ny1,c1, nx2,ny2,c2]) evaluated @@ -267,7 +266,6 @@ pub fn compile_grammar( // ---------- leaf tables: per (motif, flip = heading 0|3) the 4 level-1 host cells ---------- let mut leaf_sum = vec![0.0f64; motif_count * 2 * 8]; - let mut leaf_tri = vec![0.0f64; motif_count * 2 * 48]; let mut leaf_flavor = vec![0u8; motif_count * 2 * 4]; for &m in &all_motifs { let draw_str = to_draws(m, 1, rules, draws); @@ -288,21 +286,6 @@ pub fn compile_grammar( }); let is_lower = if sym == upper { 0 } else { 1 }; leaf_flavor[base * 4 + d] = fbase ^ is_lower ^ ((hh & 1) as u8); - let mut c = host_corners(sym, from, hh); - let area = (c[1].a - c[0].a) as i64 * (c[2].b - c[0].b) as i64 - - (c[1].b - c[0].b) as i64 * (c[2].a - c[0].a) as i64; - if area < 0 { - c = [c[0], c[2], c[1]]; - } - for e in 0..3 { - let c0 = c[e]; - let c1 = c[(e + 1) % 3]; - let o = base * 48 + d * 12 + e * 4; - leaf_tri[o] = 3.0 * c0.a as f64; - leaf_tri[o + 1] = 3.0 * c0.b as f64; - leaf_tri[o + 2] = (c1.a - c0.a) as f64; - leaf_tri[o + 3] = (c1.b - c0.b) as f64; - } d += 1; }, ); @@ -349,7 +332,6 @@ pub fn compile_grammar( fp_edges, fp_offset, leaf_sum, - leaf_tri, leaf_flavor, class_sep, class_lut, diff --git a/src/lattice/mod.rs b/src/lattice/mod.rs index acee6c8..eda57e7 100644 --- a/src/lattice/mod.rs +++ b/src/lattice/mod.rs @@ -2,13 +2,11 @@ // SPDX-License-Identifier: Apache-2.0 // Copyright (c) A5 contributors -// The canonical A5 curve is currently the ORIGINAL construction (compat.rs): -// the two-motif quaternary L-system with the shift_digits recode on top, so -// cell IDs remain bit-identical to previous releases. The non-self-intersecting -// L-system curve (lsystem/ + curve.rs) powers the machinery underneath and is -// fully implemented and pinned by fixtures (tests/lattice_lsystem.rs); making -// it canonical is a planned follow-up — a breaking change of all cell IDs that -// swaps the exports below to the lsystem versions and regenerates the fixtures. +// The canonical A5 curve is the non-self-intersecting L-system curve +// (lsystem/ + curve.rs): point location via round_to_triple, s <-> cell mappings via +// s_to_cell / s_to_triple / triple_to_s. This is a breaking change from previous +// releases — cell IDs differ from the original construction. The original curve +// remains available bit-for-bit via the compat_* exports below for migration. pub mod compat; pub mod curve; @@ -16,16 +14,12 @@ pub mod lsystem; pub mod triple; pub mod types; -// The engine uses the compat (original) curve, exported under the plain names. -pub use compat::{ - compat_ij_to_s as ij_to_s, compat_s_to_cell as s_to_cell, compat_s_to_triple as s_to_triple, - compat_triple_to_s as triple_to_s, -}; +pub use curve::round_to_triple; +pub use lsystem::{s_to_cell, s_to_triple, Cell}; -// Also exported under their own names, so the old-curve behavior stays pinned -// explicitly (tests/lattice_compat.rs) across the future canonical swap. -pub use compat::{compat_ij_to_s, compat_s_to_cell, compat_s_to_triple, compat_triple_to_s}; - -pub use lsystem::Cell; -pub use triple::{triple_in_bounds, triple_parity}; +pub use triple::{triple_flavor, triple_in_bounds, triple_parity, triple_to_s}; pub use types::{Orientation, Triple}; + +// The ORIGINAL (pre-L-system) curve, bit-for-bit, for the migration path — +// same cells, same pentagon flavors, old visiting order (tests/lattice_compat.rs). +pub use compat::{compat_ij_to_s, compat_s_to_cell, compat_s_to_triple, compat_triple_to_s}; diff --git a/src/lattice/triple.rs b/src/lattice/triple.rs index 3120d7f..84e3f85 100644 --- a/src/lattice/triple.rs +++ b/src/lattice/triple.rs @@ -11,6 +11,18 @@ pub fn triple_parity(t: &Triple) -> i32 { } /// Check if a triple is within valid quintant bounds. +// The pentagon flavor is a CLOSED FORM of the triple: it depends only on the +// parity and y mod 2 (the Cairo-like tiling repeats its four orientations with +// period 2). Verified exhaustively against the descent's flavor over all cells +// (see tests/curve.rs); the descent's leaf flavor agrees because both describe +// the same fixed tiling. +const FLAVOR_LUT: [u8; 4] = [0, 2, 3, 1]; // index = parity << 1 | (y & 1) + +/// The pentagon flavor (0-3) of a triple's cell — orientation-independent. +pub fn triple_flavor(t: &Triple) -> u8 { + FLAVOR_LUT[(((t.x + t.y + t.z) << 1) | (t.y & 1)) as usize] +} + pub fn triple_in_bounds(t: &Triple, max_row: i32) -> bool { let sum = t.x + t.y + t.z; if sum != 0 && sum != 1 { diff --git a/src/projections/dodecahedron.rs b/src/projections/dodecahedron.rs index 34473ed..f457b90 100644 --- a/src/projections/dodecahedron.rs +++ b/src/projections/dodecahedron.rs @@ -58,7 +58,7 @@ impl DodecahedronProjection { /// Same as `forward` but takes a Cartesian unit vector — skips the /// `to_cartesian` round-trip when the caller already has the Cartesian - /// form (e.g. in the spiral-search path inside `spherical_to_cell`). + /// form. pub fn forward_cartesian( &mut self, unprojected: Cartesian, diff --git a/src/traversal/global_neighbors.rs b/src/traversal/global_neighbors.rs index 5de1bc3..4c83fe4 100644 --- a/src/traversal/global_neighbors.rs +++ b/src/traversal/global_neighbors.rs @@ -5,7 +5,7 @@ use std::collections::BTreeSet; use crate::core::face_adjacency::FACE_ADJACENCY; -use crate::core::origin::{get_origins, quintant_to_segment, segment_to_quintant}; +use crate::core::origin::{get_origins, quintant_tables}; use crate::core::serialization::{deserialize, serialize, FIRST_HILBERT_RESOLUTION}; use crate::core::utils::{A5Cell, Origin}; use crate::lattice::{s_to_cell, triple_parity}; @@ -14,7 +14,7 @@ use crate::traversal::quintant_neighbors::find_quintant_neighbor_s; /// Serialize a res 1 cell from origin and quintant. fn serialize_res1(origin: &Origin, quintant: usize) -> u64 { - let (segment, _) = quintant_to_segment(quintant, origin); + let segment = quintant_tables().quintant_to_segment[origin.id as usize * 5 + quintant] as usize; serialize(&A5Cell { origin_id: origin.id, segment, @@ -46,7 +46,7 @@ fn get_res0_neighbors(origin: &Origin) -> Vec { /// Get neighbors of a resolution 1 cell (quintant). fn get_res1_neighbors(origin: &Origin, segment: usize, edge_only: bool) -> Vec { let origins = get_origins(); - let (quintant, _) = segment_to_quintant(segment, origin); + let quintant = quintant_tables().segment_to_quintant[origin.id as usize * 5 + segment] as usize; let mut neighbor_set = BTreeSet::new(); // Left and right quintant on the same face (A, B) @@ -123,7 +123,10 @@ pub fn get_global_cell_neighbors(cell_id: u64, edge_only: bool) -> Vec { } let hilbert_res = (resolution - FIRST_HILBERT_RESOLUTION + 1) as usize; - let (source_quintant, source_orientation) = segment_to_quintant(cell.segment, origin); + let tables = quintant_tables(); + let global_quintant = cell.origin_id as usize * 5 + cell.segment; + let source_quintant = tables.segment_to_quintant[global_quintant] as usize; + let source_orientation = tables.segment_to_orientation[global_quintant]; // Triple coordinates are orientation-independent let source_cell = s_to_cell(cell.s, hilbert_res, source_orientation); diff --git a/src/traversal/lattice_boundary.rs b/src/traversal/lattice_boundary.rs index 6e03ab7..d059947 100644 --- a/src/traversal/lattice_boundary.rs +++ b/src/traversal/lattice_boundary.rs @@ -3,7 +3,7 @@ // Copyright (c) A5 contributors use crate::core::face_adjacency::FACE_ADJACENCY; -use crate::core::origin::{get_origins, quintant_to_segment}; +use crate::core::origin::{get_origins, quintant_tables}; use crate::core::serialization::serialize; use crate::core::utils::{A5Cell, Origin}; use crate::lattice::{triple_in_bounds, triple_to_s, Orientation, Triple}; @@ -142,11 +142,14 @@ pub fn get_boundary_neighbors( let delta_index = (parity * 2 + if y_odd { 1 } else { 0 }) as usize; let origins = get_origins(); + let tables = quintant_tables(); // Left edge (z=0): neighbor in previous quintant at swapped [0, y, x] if triple.z == 0 { let target_quintant = (source_quintant + 4) % 5; - let (segment, orientation) = quintant_to_segment(target_quintant, origin); + let global_quintant = origin.id as usize * 5 + target_quintant; + let segment = tables.quintant_to_segment[global_quintant] as usize; + let orientation = tables.quintant_to_orientation[global_quintant]; let base = Triple::new(0, triple.y, triple.x); push_deltas( &mut out, @@ -163,7 +166,9 @@ pub fn get_boundary_neighbors( // Right edge (x=0): neighbor in next quintant at swapped [z, y, 0] if triple.x == 0 { let target_quintant = (source_quintant + 1) % 5; - let (segment, orientation) = quintant_to_segment(target_quintant, origin); + let global_quintant = origin.id as usize * 5 + target_quintant; + let segment = tables.quintant_to_segment[global_quintant] as usize; + let orientation = tables.quintant_to_orientation[global_quintant]; let base = Triple::new(triple.z, triple.y, 0); push_deltas( &mut out, @@ -181,7 +186,9 @@ pub fn get_boundary_neighbors( if triple.y == max_row { let (adj_face_id, adj_quintant) = FACE_ADJACENCY[origin.id as usize][source_quintant]; let adj_origin = &origins[adj_face_id as usize]; - let (segment, orientation) = quintant_to_segment(adj_quintant, adj_origin); + let global_quintant = adj_origin.id as usize * 5 + adj_quintant; + let segment = tables.quintant_to_segment[global_quintant] as usize; + let orientation = tables.quintant_to_orientation[global_quintant]; let base = Triple::new(triple.z, max_row, triple.x); push_deltas( &mut out, @@ -206,7 +213,9 @@ pub fn get_boundary_neighbors( if edge_only && distance != 1 { continue; } - let (segment, orientation) = quintant_to_segment(q, origin); + let global_quintant = origin.id as usize * 5 + q; + let segment = tables.quintant_to_segment[global_quintant] as usize; + let orientation = tables.quintant_to_orientation[global_quintant]; push_triple(&mut out, &triple, orientation, origin, segment, ctx); } } @@ -220,8 +229,9 @@ pub fn get_boundary_neighbors( let (prev_adj_face_id, prev_adj_quintant) = FACE_ADJACENCY[origin.id as usize][prev_quintant]; let prev_adj_origin = &origins[prev_adj_face_id as usize]; - let (prev_adj_segment, prev_adj_orientation) = - quintant_to_segment(prev_adj_quintant, prev_adj_origin); + let prev_adj_global_quintant = prev_adj_origin.id as usize * 5 + prev_adj_quintant; + let prev_adj_segment = tables.quintant_to_segment[prev_adj_global_quintant] as usize; + let prev_adj_orientation = tables.quintant_to_orientation[prev_adj_global_quintant]; push_triple( &mut out, &triple, @@ -235,8 +245,9 @@ pub fn get_boundary_neighbors( let (cross_face_id, cross_quintant) = FACE_ADJACENCY[origin.id as usize][source_quintant]; let cross_origin = &origins[cross_face_id as usize]; let next_cross_quintant = (cross_quintant + 1) % 5; - let (cross_segment, cross_orientation) = - quintant_to_segment(next_cross_quintant, cross_origin); + let cross_global_quintant = cross_origin.id as usize * 5 + next_cross_quintant; + let cross_segment = tables.quintant_to_segment[cross_global_quintant] as usize; + let cross_orientation = tables.quintant_to_orientation[cross_global_quintant]; push_triple( &mut out, &triple, diff --git a/src/traversal/lattice_flood_fill.rs b/src/traversal/lattice_flood_fill.rs index eb0b52b..858e275 100644 --- a/src/traversal/lattice_flood_fill.rs +++ b/src/traversal/lattice_flood_fill.rs @@ -4,7 +4,7 @@ use std::collections::{HashMap, HashSet}; -use crate::core::origin::{get_origins, segment_to_quintant}; +use crate::core::origin::{get_origins, quintant_tables}; use crate::core::serialization::{deserialize, serialize, FIRST_HILBERT_RESOLUTION}; use crate::core::utils::{A5Cell, Origin}; use crate::lattice::{s_to_triple, triple_to_s, Orientation}; @@ -96,7 +96,8 @@ fn cell_to_quintant_key( ) -> Option<(usize, i64, QuintantCtx)> { let cell = deserialize(cell_id).ok()?; let origin = &get_origins()[cell.origin_id as usize]; - let (_, orientation) = segment_to_quintant(cell.segment, origin); + let orientation = + quintant_tables().segment_to_orientation[cell.origin_id as usize * 5 + cell.segment]; let triple = s_to_triple(cell.s, hilbert_res, orientation); let parity = triple.x + triple.y + triple.z; // 0 or 1 let quintant_idx = (origin.id as usize) * 60 + cell.segment; diff --git a/src/traversal/lattice_neighbors.rs b/src/traversal/lattice_neighbors.rs index 3c42db3..f238793 100644 --- a/src/traversal/lattice_neighbors.rs +++ b/src/traversal/lattice_neighbors.rs @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 // Copyright (c) A5 contributors -use crate::core::origin::{get_origins, segment_to_quintant}; +use crate::core::origin::{get_origins, quintant_tables}; use crate::core::serialization::{deserialize, serialize, FIRST_HILBERT_RESOLUTION}; use crate::core::utils::{A5Cell, Origin}; use crate::lattice::{ @@ -33,7 +33,10 @@ fn decode_source(cell_id: u64) -> Option> { } let origin = &get_origins()[cell.origin_id as usize]; let hilbert_res = (cell.resolution - FIRST_HILBERT_RESOLUTION + 1) as usize; - let (quintant, orientation) = segment_to_quintant(cell.segment, origin); + let tables = quintant_tables(); + let global_quintant = cell.origin_id as usize * 5 + cell.segment; + let quintant = tables.segment_to_quintant[global_quintant] as usize; + let orientation = tables.segment_to_orientation[global_quintant]; let triple = s_to_triple(cell.s, hilbert_res, orientation); Some(LatticeSource { diff --git a/src/utils/mod.rs b/src/utils/mod.rs index a9e78c0..1b81230 100644 --- a/src/utils/mod.rs +++ b/src/utils/mod.rs @@ -3,6 +3,5 @@ // Copyright (c) A5 contributors pub mod great_circle; -pub mod spiral; pub mod vector; pub use vector::*; diff --git a/src/utils/spiral.rs b/src/utils/spiral.rs deleted file mode 100644 index ab1750d..0000000 --- a/src/utils/spiral.rs +++ /dev/null @@ -1,140 +0,0 @@ -// A5 -// SPDX-License-Identifier: Apache-2.0 -// Copyright (c) A5 contributors - -use crate::coordinate_systems::{Cartesian, Spherical}; -use crate::core::coordinate_transforms::to_cartesian; -use crate::core::utils::Quat; - -/// Number of perturbed sample points the spiral can produce. Tuned on a -/// corpus of ~3500 spherical points × 8 resolutions, such that the spiral -/// hits a strictly-containing cell within these many iterations for all -/// but a handful of points right at the polar singularity at very high -/// resolutions. -pub const SPIRAL_SAMPLE_COUNT: usize = 24; - -/// Azimuthal step between consecutive samples in the rotated tangent plane. -/// 1.4 rad (~80°) sits on a flat plateau of the parameter sweep. -const ANGLE_STEP_RAD: f64 = 1.4; - -// Precomputed unit-direction spiral at the canonical pole's tangent plane -// (z=0). Each entry is the tangent direction of one sample. The pattern -// is independent of resolution; per spiral the directions are rotated to -// the input point's tangent plane via a single quaternion. -fn spiral_directions() -> &'static [[f64; 3]; SPIRAL_SAMPLE_COUNT] { - use std::sync::OnceLock; - static DIRS: OnceLock<[[f64; 3]; SPIRAL_SAMPLE_COUNT]> = OnceLock::new(); - DIRS.get_or_init(|| { - let mut out = [[0.0; 3]; SPIRAL_SAMPLE_COUNT]; - for (i, slot) in out.iter_mut().enumerate() { - let a = (i as f64 + 1.0) * ANGLE_STEP_RAD; - *slot = [a.cos(), a.sin(), 0.0]; - } - out - }) -} - -/// Lazy spiral sampler around a center point on the unit sphere — used by -/// `spherical_to_cell` to discover nearby cells when the projection-based -/// estimate lands in the wrong one. -/// -/// Construction precomputes the pole→center quaternion. `sample(i)` -/// rotates the i-th cached direction into the tangent plane at `center`, -/// scales by the appropriate radius, and returns a Cartesian point near -/// the unit sphere — the consumer of the spiral (the dodecahedron -/// projection) wants Cartesian anyway, so we skip the spherical -/// round-trip entirely. The point is slightly off the unit sphere by -/// O(R²); downstream callers either tolerate this or normalise. -pub struct Spiral { - c0: Cartesian, - q: Quat, - scale_rad: f64, -} - -impl Spiral { - /// Initialise a spiral around `center` on the unit sphere. The - /// tangent-plane radius of the outermost sample is `scale_rad`; - /// intermediate samples scale linearly between 0 and that. - /// The pole→center rotation handles the antipode case internally. - pub fn new(center: Spherical, scale_rad: f64) -> Self { - let c0 = to_cartesian(center); - let q = quat_rotation_to_from_pole(c0); - Self { c0, q, scale_rad } - } - - /// Return the i-th spiral sample (0 ≤ i < SPIRAL_SAMPLE_COUNT). - /// Sample i sits at tangent-plane offset of magnitude - /// `(i+1)/(SPIRAL_SAMPLE_COUNT+1) · scale_rad` from `center`, - /// rotated by azimuth `(i+1) · 1.4 rad` in `center`'s tangent frame. - pub fn sample(&self, i: usize) -> Cartesian { - let dir = spiral_directions()[i]; - let rotated = transform_quat(dir, self.q); - let r = ((i as f64 + 1.0) / (SPIRAL_SAMPLE_COUNT as f64 + 1.0)) * self.scale_rad; - Cartesian::new( - self.c0.x() + rotated[0] * r, - self.c0.y() + rotated[1] * r, - self.c0.z() + rotated[2] * r, - ) - } -} - -/// Compute the shortest-rotation quaternion from the canonical pole -/// (0,0,1) to `target`. Mirrors gl-matrix `quat.rotationTo(out, POLE, target)`. -fn quat_rotation_to_from_pole(target: Cartesian) -> Quat { - let bx = target.x(); - let by = target.y(); - let bz = target.z(); - // POLE = (0, 0, 1), so dot = bz, cross(POLE, target) = (-by, bx, 0) - let dot = bz; - - if dot < -0.999999 { - // Antipode: rotate PI around an axis perpendicular to POLE. - // cross(xUnit (1,0,0), POLE (0,0,1)) = (0*1 - 0*0, 0*0 - 1*1, 1*0 - 0*0) = (0, -1, 0) - // Length 1, so normalize is a no-op. Use this axis. - let axis = [0.0, -1.0, 0.0]; - return set_axis_angle(axis, std::f64::consts::PI); - } else if dot > 0.999999 { - return [0.0, 0.0, 0.0, 1.0]; - } - let cx = -by; - let cy = bx; - let cz = 0.0; - let mut out = [cx, cy, cz, 1.0 + dot]; - // Normalize - let len_sq = out[0] * out[0] + out[1] * out[1] + out[2] * out[2] + out[3] * out[3]; - if len_sq > 0.0 { - let len = len_sq.sqrt(); - out[0] /= len; - out[1] /= len; - out[2] /= len; - out[3] /= len; - } - out -} - -fn set_axis_angle(axis: [f64; 3], rad: f64) -> Quat { - let half = rad * 0.5; - let s = half.sin(); - [s * axis[0], s * axis[1], s * axis[2], half.cos()] -} - -/// Transform a 3-vector by a unit quaternion (q * v * q^-1). -fn transform_quat(v: [f64; 3], q: Quat) -> [f64; 3] { - let [qx, qy, qz, qw] = q; - let [vx, vy, vz] = v; - - let qconj_x = -qx; - let qconj_y = -qy; - let qconj_z = -qz; - let qconj_w = qw; - - let t1_x = qw * vx + qy * vz - qz * vy; - let t1_y = qw * vy + qz * vx - qx * vz; - let t1_z = qw * vz + qx * vy - qy * vx; - let t1_w = -qx * vx - qy * vy - qz * vz; - - let r_x = t1_w * qconj_x + t1_x * qconj_w + t1_y * qconj_z - t1_z * qconj_y; - let r_y = t1_w * qconj_y + t1_y * qconj_w + t1_z * qconj_x - t1_x * qconj_z; - let r_z = t1_w * qconj_z + t1_z * qconj_w + t1_x * qconj_y - t1_y * qconj_x; - [r_x, r_y, r_z] -} diff --git a/tests/fixtures/cell-to-lonlat.json b/tests/fixtures/cell-to-lonlat.json index 72001e9..93d1c25 100644 --- a/tests/fixtures/cell-to-lonlat.json +++ b/tests/fixtures/cell-to-lonlat.json @@ -17,7 +17,7 @@ 35.677369792795794 ], "resolution": 8, - "cell_id": "872f880000000000", + "cell_id": "872fb80000000000", "center_lonlat": [ 139.62350637919997, 35.63157147255161 @@ -29,7 +29,7 @@ 35.677369792795794 ], "resolution": 12, - "cell_id": "872f937800000000", + "cell_id": "872fae1800000000", "center_lonlat": [ 139.76867809739872, 35.67600097803834 @@ -41,7 +41,7 @@ 35.677369792795794 ], "resolution": 16, - "cell_id": "872f938388000000", + "cell_id": "872fae73b8000000", "center_lonlat": [ 139.76297049600976, 35.6775299174842 @@ -53,7 +53,7 @@ 35.677369792795794 ], "resolution": 20, - "cell_id": "872f938393780000", + "cell_id": "872fae73ae180000", "center_lonlat": [ 139.76240307455004, 35.67735665532112 @@ -65,7 +65,7 @@ 35.677369792795794 ], "resolution": 4, - "cell_id": "75b8000000000000", + "cell_id": "75f8000000000000", "center_lonlat": [ 78.76278431609035, 35.245063054446746 @@ -77,7 +77,7 @@ 35.677369792795794 ], "resolution": 8, - "cell_id": "76dd780000000000", + "cell_id": "76e2780000000000", "center_lonlat": [ 80.8826559344318, 35.596348117234115 @@ -89,7 +89,7 @@ 35.677369792795794 ], "resolution": 12, - "cell_id": "76dd001800000000", + "cell_id": "76e2002800000000", "center_lonlat": [ 80.75955927262851, 35.67243303878112 @@ -101,7 +101,7 @@ 35.677369792795794 ], "resolution": 16, - "cell_id": "76dd001408000000", + "cell_id": "76e2002bf8000000", "center_lonlat": [ 80.76275601893087, 35.677287763322845 @@ -113,7 +113,7 @@ 35.677369792795794 ], "resolution": 20, - "cell_id": "76dd00140df80000", + "cell_id": "76e2002bf1080000", "center_lonlat": [ 80.76239261869227, 35.677374783286595 @@ -125,7 +125,7 @@ 35.677369792795794 ], "resolution": 4, - "cell_id": "2488000000000000", + "cell_id": "24a8000000000000", "center_lonlat": [ -83.75823808317773, 35.58901515202695 @@ -137,7 +137,7 @@ 35.677369792795794 ], "resolution": 8, - "cell_id": "2498a80000000000", + "cell_id": "2497480000000000", "center_lonlat": [ -80.81428213457912, 35.605794941766504 @@ -149,7 +149,7 @@ 35.677369792795794 ], "resolution": 12, - "cell_id": "2498a7e800000000", + "cell_id": "24974ab800000000", "center_lonlat": [ -80.76193540226967, 35.681931108601866 @@ -161,7 +161,7 @@ 35.677369792795794 ], "resolution": 16, - "cell_id": "2498a7e5f8000000", + "cell_id": "24974aba08000000", "center_lonlat": [ -80.7630999644536, 35.677373493949084 @@ -173,7 +173,7 @@ 35.677369792795794 ], "resolution": 20, - "cell_id": "2498a7e613e80000", + "cell_id": "24974ab9ec280000", "center_lonlat": [ -80.7623626198839, 35.67735881436766 @@ -185,7 +185,7 @@ 35.677369792795794 ], "resolution": 4, - "cell_id": "df38000000000000", + "cell_id": "df18000000000000", "center_lonlat": [ -142.22672802011118, 35.587031704321205 @@ -197,7 +197,7 @@ 35.677369792795794 ], "resolution": 8, - "cell_id": "de57380000000000", + "cell_id": "de16280000000000", "center_lonlat": [ -139.77768931114798, 35.71037187423982 @@ -209,7 +209,7 @@ 35.677369792795794 ], "resolution": 12, - "cell_id": "de5737c800000000", + "cell_id": "de16283800000000", "center_lonlat": [ -139.76670201730929, 35.674414339304576 @@ -221,7 +221,7 @@ 35.677369792795794 ], "resolution": 16, - "cell_id": "de5737c3d8000000", + "cell_id": "de162833e8000000", "center_lonlat": [ -139.76227611480203, 35.677538274160106 @@ -233,7 +233,7 @@ 35.677369792795794 ], "resolution": 20, - "cell_id": "de5737c3d3e80000", + "cell_id": "de162833e7280000", "center_lonlat": [ -139.7624026099707, 35.67738447477849 @@ -257,7 +257,7 @@ 35 ], "resolution": 8, - "cell_id": "7f0eb80000000000", + "cell_id": "7f0c380000000000", "center_lonlat": [ 87.10410878481241, 35.03359803473627 @@ -269,7 +269,7 @@ 35 ], "resolution": 12, - "cell_id": "76fbebe800000000", + "cell_id": "76f1414800000000", "center_lonlat": [ 86.99349536442298, 34.99954151699924 @@ -281,7 +281,7 @@ 35 ], "resolution": 16, - "cell_id": "76fbebece8000000", + "cell_id": "76f1414c48000000", "center_lonlat": [ 86.9995934563351, 34.999830575324424 @@ -293,7 +293,7 @@ 35 ], "resolution": 20, - "cell_id": "76fbebecec080000", + "cell_id": "76f1414c4c080000", "center_lonlat": [ 86.99997459095403, 35.000009906527275 @@ -317,7 +317,7 @@ 35 ], "resolution": 8, - "cell_id": "7f0e080000000000", + "cell_id": "7f0cf80000000000", "center_lonlat": [ 88.03477152602773, 35.07945263542183 @@ -329,7 +329,7 @@ 35 ], "resolution": 12, - "cell_id": "7f04a0a800000000", + "cell_id": "7f0b4f4800000000", "center_lonlat": [ 88.00080016226019, 35.00202354167482 @@ -341,7 +341,7 @@ 35 ], "resolution": 16, - "cell_id": "7f04a0aeb8000000", + "cell_id": "7f0b4f47b8000000", "center_lonlat": [ 87.99960110191302, 34.99976824793107 @@ -353,7 +353,7 @@ 35 ], "resolution": 20, - "cell_id": "7f04a0aeb7f80000", + "cell_id": "7f0b4f47b4080000", "center_lonlat": [ 87.99995943718955, 34.99999027778291 @@ -377,7 +377,7 @@ 0 ], "resolution": 8, - "cell_id": "a7bc680000000000", + "cell_id": "a7b1980000000000", "center_lonlat": [ 89.9921389407915, 0.06034007096322963 @@ -389,7 +389,7 @@ 0 ], "resolution": 12, - "cell_id": "a7bc52f800000000", + "cell_id": "a7b1baf800000000", "center_lonlat": [ 89.99713709492244, 0.0026426965800389586 @@ -401,7 +401,7 @@ 0 ], "resolution": 16, - "cell_id": "a7bc52d368000000", + "cell_id": "a7b1bad368000000", "center_lonlat": [ 89.99966386686435, 0.00007767227344969716 @@ -413,7 +413,7 @@ 0 ], "resolution": 20, - "cell_id": "a7bc52d354d80000", + "cell_id": "a7b1bad35ed80000", "center_lonlat": [ 90.0000038100543, 0.000029585327680062587 @@ -437,7 +437,7 @@ 30 ], "resolution": 8, - "cell_id": "7c13d80000000000", + "cell_id": "7c13e80000000000", "center_lonlat": [ 119.93462713595272, 30.059609320146475 @@ -449,7 +449,7 @@ 30 ], "resolution": 12, - "cell_id": "7c13dbd800000000", + "cell_id": "7c13e7e800000000", "center_lonlat": [ 119.99610917188903, 29.996789107600556 @@ -461,7 +461,7 @@ 30 ], "resolution": 16, - "cell_id": "7c13dbd9e8000000", + "cell_id": "7c13e7e9e8000000", "center_lonlat": [ 119.99947057704458, 30.000071350378775 @@ -473,7 +473,7 @@ 30 ], "resolution": 20, - "cell_id": "7c13dbd9ede80000", + "cell_id": "7c13e7e9ed180000", "center_lonlat": [ 119.99996421100184, 30.000008711533837 @@ -497,7 +497,7 @@ -30 ], "resolution": 8, - "cell_id": "8fc7380000000000", + "cell_id": "8fc3180000000000", "center_lonlat": [ 150.08686389088433, -30.05395068146772 @@ -509,7 +509,7 @@ -30 ], "resolution": 12, - "cell_id": "8fc7382800000000", + "cell_id": "8fc31fd800000000", "center_lonlat": [ 150.00207396509222, -30.000347026370502 @@ -521,7 +521,7 @@ -30 ], "resolution": 16, - "cell_id": "8fc7382998000000", + "cell_id": "8fc31fd9a8000000", "center_lonlat": [ 150.00037601854785, -29.999670451795073 @@ -533,7 +533,7 @@ -30 ], "resolution": 20, - "cell_id": "8fc7382990a80000", + "cell_id": "8fc31fd9ac580000", "center_lonlat": [ 149.99999808025723, -29.999998752933465 @@ -557,7 +557,7 @@ 35 ], "resolution": 8, - "cell_id": "ea87280000000000", + "cell_id": "ea82e80000000000", "center_lonlat": [ 169.88623918986286, 35.02754701912999 @@ -569,7 +569,7 @@ 35 ], "resolution": 12, - "cell_id": "ea87337800000000", + "cell_id": "ea82f37800000000", "center_lonlat": [ 170.00348986573437, 35.002718193714465 @@ -581,7 +581,7 @@ 35 ], "resolution": 16, - "cell_id": "ea8733acc8000000", + "cell_id": "ea82f384c8000000", "center_lonlat": [ 170.00032051025823, 34.999828296295235 @@ -593,7 +593,7 @@ 35 ], "resolution": 20, - "cell_id": "ea8733acc5080000", + "cell_id": "ea82f384c5080000", "center_lonlat": [ 169.99996812059777, 34.99999969033825 @@ -641,7 +641,7 @@ 0 ], "resolution": 16, - "cell_id": "e45745dea8000000", + "cell_id": "e45745de88000000", "center_lonlat": [ 178.9997440537153, 0.00009598076086926035 @@ -653,7 +653,7 @@ 0 ], "resolution": 20, - "cell_id": "e45745dd05980000", + "cell_id": "e45745dd32680000", "center_lonlat": [ 179.0000079771258, 0.0000031005765019001743 @@ -677,7 +677,7 @@ 35 ], "resolution": 8, - "cell_id": "ec3d680000000000", + "cell_id": "ec31680000000000", "center_lonlat": [ -170.0337173313443, 34.86808709618724 @@ -689,7 +689,7 @@ 35 ], "resolution": 12, - "cell_id": "ec3d788800000000", + "cell_id": "ec3178a800000000", "center_lonlat": [ -169.99787161048005, 34.99956943901616 @@ -701,7 +701,7 @@ 35 ], "resolution": 16, - "cell_id": "ec3d7888b8000000", + "cell_id": "ec3178a888000000", "center_lonlat": [ -170.0001197620391, 35.00031936949359 @@ -713,7 +713,7 @@ 35 ], "resolution": 20, - "cell_id": "ec3d78886c780000", + "cell_id": "ec3178a86e080000", "center_lonlat": [ -170.00000844222876, 34.999964025402896 @@ -761,7 +761,7 @@ 0 ], "resolution": 16, - "cell_id": "e45d17acc8000000", + "cell_id": "e45d1784c8000000", "center_lonlat": [ -178.99949961205778, 0.0003732947645867457 @@ -773,7 +773,7 @@ 0 ], "resolution": 20, - "cell_id": "e45d17accfe80000", + "cell_id": "e45d1784cfe80000", "center_lonlat": [ -178.99999596181084, 0.000001973980422064866 @@ -785,7 +785,7 @@ 80 ], "resolution": 4, - "cell_id": "528000000000000", + "cell_id": "518000000000000", "center_lonlat": [ 99.47281468352145, 78.87769348991482 @@ -797,7 +797,7 @@ 80 ], "resolution": 8, - "cell_id": "452b80000000000", + "cell_id": "453b80000000000", "center_lonlat": [ 100.26331583737755, 80.04672543386918 @@ -809,7 +809,7 @@ 80 ], "resolution": 12, - "cell_id": "452b60800000000", + "cell_id": "453b5f800000000", "center_lonlat": [ 99.97111534596036, 79.99831165427123 @@ -821,7 +821,7 @@ 80 ], "resolution": 16, - "cell_id": "452b60578000000", + "cell_id": "453b5fa78000000", "center_lonlat": [ 100.00228934537006, 79.99976999626797 @@ -833,7 +833,7 @@ 80 ], "resolution": 20, - "cell_id": "452b6072a180000", + "cell_id": "453b5f8e2880000", "center_lonlat": [ 100.00012246549193, 79.99998487805685 @@ -845,7 +845,7 @@ -70 ], "resolution": 4, - "cell_id": "c4f8000000000000", + "cell_id": "c4c8000000000000", "center_lonlat": [ 129.91328227758618, -71.17978748792397 @@ -857,7 +857,7 @@ -70 ], "resolution": 8, - "cell_id": "c612d80000000000", + "cell_id": "c64e680000000000", "center_lonlat": [ 130.1710548883549, -70.03880017816462 @@ -869,7 +869,7 @@ -70 ], "resolution": 12, - "cell_id": "c612d57800000000", + "cell_id": "c64e67b800000000", "center_lonlat": [ 130.0122949580321, -69.9981748048732 @@ -881,7 +881,7 @@ -70 ], "resolution": 16, - "cell_id": "c612d57408000000", + "cell_id": "c64e67b808000000", "center_lonlat": [ 130.0004932083781, -69.99964239411541 @@ -893,7 +893,7 @@ -70 ], "resolution": 20, - "cell_id": "c612d57421e80000", + "cell_id": "c64e67b832080000", "center_lonlat": [ 130.00004700384306, -69.99999934791488 @@ -917,7 +917,7 @@ 0 ], "resolution": 8, - "cell_id": "4f05d80000000000", + "cell_id": "4f0a280000000000", "center_lonlat": [ 0.011401187809724433, -0.03093911093324804 @@ -929,7 +929,7 @@ 0 ], "resolution": 12, - "cell_id": "4f05dce800000000", + "cell_id": "4f0a22c800000000", "center_lonlat": [ 0.0037369117221714987, -0.0038472046061282265 @@ -941,7 +941,7 @@ 0 ], "resolution": 16, - "cell_id": "4f05dccc58000000", + "cell_id": "4f0a22d228000000", "center_lonlat": [ 0.0003020515398475254, -0.00016955906605060878 @@ -953,7 +953,7 @@ 0 ], "resolution": 20, - "cell_id": "4f05dccc72680000", + "cell_id": "4f0a22d20e880000", "center_lonlat": [ -0.00002666749014679226, 0.000013718472854690512 @@ -965,7 +965,7 @@ 40.7484 ], "resolution": 4, - "cell_id": "2618000000000000", + "cell_id": "2648000000000000", "center_lonlat": [ -71.36577194825946, 40.86339686079075 @@ -977,7 +977,7 @@ 40.7484 ], "resolution": 8, - "cell_id": "2610780000000000", + "cell_id": "264f780000000000", "center_lonlat": [ -73.94200712434372, 40.67687991896999 @@ -989,7 +989,7 @@ 40.7484 ], "resolution": 12, - "cell_id": "2610738800000000", + "cell_id": "264f74c800000000", "center_lonlat": [ -73.99211087138201, 40.74945854109684 @@ -1001,7 +1001,7 @@ 40.7484 ], "resolution": 16, - "cell_id": "2610762858000000", + "cell_id": "264f7a2c58000000", "center_lonlat": [ -73.985148586317, 40.74847025497772 @@ -1013,7 +1013,7 @@ 40.7484 ], "resolution": 20, - "cell_id": "2610762843380000", + "cell_id": "264f7a2c41c80000", "center_lonlat": [ -73.98571096764101, 40.74838402210003 @@ -1025,7 +1025,7 @@ 48.8566 ], "resolution": 4, - "cell_id": "63c8000000000000", + "cell_id": "63d8000000000000", "center_lonlat": [ 2.688643261662264, 50.24851194473617 @@ -1037,7 +1037,7 @@ 48.8566 ], "resolution": 8, - "cell_id": "63c2280000000000", + "cell_id": "63d9d80000000000", "center_lonlat": [ 2.388584520911081, 48.95373154845205 @@ -1049,7 +1049,7 @@ 48.8566 ], "resolution": 12, - "cell_id": "63c20d0800000000", + "cell_id": "63d9f20800000000", "center_lonlat": [ 2.3537900596836607, 48.85392423022734 @@ -1061,7 +1061,7 @@ 48.8566 ], "resolution": 16, - "cell_id": "63c20d14f8000000", + "cell_id": "63d9f22b08000000", "center_lonlat": [ 2.352348598797562, 48.856764983271376 @@ -1073,7 +1073,7 @@ 48.8566 ], "resolution": 20, - "cell_id": "63c20d14f7780000", + "cell_id": "63d9f22b07480000", "center_lonlat": [ 2.3521704552154006, 48.85658793308943 @@ -1097,7 +1097,7 @@ -33.8688 ], "resolution": 8, - "cell_id": "8f7ee80000000000", + "cell_id": "8f5b280000000000", "center_lonlat": [ 151.345475724705, -33.835991868453874 @@ -1109,7 +1109,7 @@ -33.8688 ], "resolution": 12, - "cell_id": "8f7ec72800000000", + "cell_id": "8f5b332800000000", "center_lonlat": [ 151.2122272875916, -33.86844190700691 @@ -1121,7 +1121,7 @@ -33.8688 ], "resolution": 16, - "cell_id": "8f7ec72a78000000", + "cell_id": "8f5b332658000000", "center_lonlat": [ 151.20904864284483, -33.86898879711463 @@ -1133,7 +1133,7 @@ -33.8688 ], "resolution": 20, - "cell_id": "8f7ec72a76480000", + "cell_id": "8f5b332656080000", "center_lonlat": [ 151.2092537328581, -33.86879671540891 diff --git a/tests/fixtures/lattice/curve.json b/tests/fixtures/lattice/curve.json index 4713785..8b53433 100644 --- a/tests/fixtures/lattice/curve.json +++ b/tests/fixtures/lattice/curve.json @@ -16,9 +16,9 @@ "orientation": "uv", "x": -1, "y": 2, - "z": 0, - "parity": 1, - "flavor": 3 + "z": -1, + "parity": 0, + "flavor": 0 }, { "s": 12, @@ -154,9 +154,9 @@ "s": 32, "resolution": 3, "orientation": "vu", - "x": -2, + "x": -3, "y": 3, - "z": -1, + "z": 0, "parity": 0, "flavor": 2 }, @@ -196,9 +196,9 @@ "orientation": "vu", "x": -1, "y": 2, - "z": 0, - "parity": 1, - "flavor": 3 + "z": -1, + "parity": 0, + "flavor": 0 }, { "s": 0, @@ -224,11 +224,11 @@ "s": 12, "resolution": 3, "orientation": "uw", - "x": -1, - "y": 5, + "x": 0, + "y": 4, "z": -3, "parity": 1, - "flavor": 1 + "flavor": 3 }, { "s": 19, @@ -244,31 +244,31 @@ "s": 25, "resolution": 3, "orientation": "uw", - "x": -2, - "y": 5, + "x": -3, + "y": 6, "z": -2, "parity": 1, - "flavor": 1 + "flavor": 3 }, { "s": 32, "resolution": 3, "orientation": "uw", - "x": 0, - "y": 4, + "x": -1, + "y": 5, "z": -4, "parity": 0, - "flavor": 0 + "flavor": 2 }, { "s": 38, "resolution": 3, "orientation": "uw", - "x": -1, - "y": 6, + "x": 0, + "y": 5, "z": -5, "parity": 0, - "flavor": 0 + "flavor": 2 }, { "s": 44, @@ -284,21 +284,21 @@ "s": 51, "resolution": 3, "orientation": "uw", - "x": -5, - "y": 7, + "x": -4, + "y": 6, "z": -2, "parity": 0, - "flavor": 2 + "flavor": 0 }, { "s": 57, "resolution": 3, "orientation": "uw", - "x": -4, - "y": 5, - "z": -1, - "parity": 0, - "flavor": 2 + "x": -5, + "y": 6, + "z": 0, + "parity": 1, + "flavor": 3 }, { "s": 0, @@ -314,21 +314,21 @@ "s": 6, "resolution": 3, "orientation": "wu", - "x": -4, - "y": 5, - "z": -1, - "parity": 0, - "flavor": 2 + "x": -5, + "y": 6, + "z": 0, + "parity": 1, + "flavor": 3 }, { "s": 12, "resolution": 3, "orientation": "wu", - "x": -5, - "y": 7, + "x": -4, + "y": 6, "z": -2, "parity": 0, - "flavor": 2 + "flavor": 0 }, { "s": 19, @@ -344,31 +344,31 @@ "s": 25, "resolution": 3, "orientation": "wu", - "x": -1, - "y": 6, + "x": 0, + "y": 5, "z": -5, "parity": 0, - "flavor": 0 + "flavor": 2 }, { "s": 32, "resolution": 3, "orientation": "wu", - "x": -3, - "y": 7, + "x": -2, + "y": 6, "z": -3, "parity": 1, - "flavor": 1 + "flavor": 3 }, { "s": 38, "resolution": 3, "orientation": "wu", - "x": -2, - "y": 5, + "x": -3, + "y": 6, "z": -2, "parity": 1, - "flavor": 1 + "flavor": 3 }, { "s": 44, @@ -384,11 +384,11 @@ "s": 51, "resolution": 3, "orientation": "wu", - "x": -1, - "y": 5, + "x": 0, + "y": 4, "z": -3, "parity": 1, - "flavor": 1 + "flavor": 3 }, { "s": 57, @@ -435,10 +435,10 @@ "resolution": 3, "orientation": "vw", "x": -1, - "y": 5, - "z": -3, + "y": 4, + "z": -2, "parity": 1, - "flavor": 1 + "flavor": 3 }, { "s": 25, @@ -575,10 +575,10 @@ "resolution": 3, "orientation": "wv", "x": -1, - "y": 5, - "z": -3, + "y": 4, + "z": -2, "parity": 1, - "flavor": 1 + "flavor": 3 }, { "s": 51, @@ -614,11 +614,11 @@ "s": 102, "resolution": 5, "orientation": "uv", - "x": -6, - "y": 9, - "z": -3, + "x": -5, + "y": 10, + "z": -5, "parity": 0, - "flavor": 2 + "flavor": 0 }, { "s": 204, @@ -645,10 +645,10 @@ "resolution": 5, "orientation": "uv", "x": -12, - "y": 19, - "z": -6, - "parity": 1, - "flavor": 1 + "y": 17, + "z": -5, + "parity": 0, + "flavor": 2 }, { "s": 512, @@ -665,10 +665,10 @@ "resolution": 5, "orientation": "uv", "x": -22, - "y": 25, - "z": -3, + "y": 24, + "z": -2, "parity": 0, - "flavor": 2 + "flavor": 0 }, { "s": 716, @@ -745,18 +745,18 @@ "resolution": 5, "orientation": "vu", "x": -22, - "y": 25, - "z": -3, + "y": 24, + "z": -2, "parity": 0, - "flavor": 2 + "flavor": 0 }, { "s": 512, "resolution": 5, "orientation": "vu", - "x": -8, + "x": -15, "y": 15, - "z": -7, + "z": 0, "parity": 0, "flavor": 2 }, @@ -765,10 +765,10 @@ "resolution": 5, "orientation": "vu", "x": -12, - "y": 19, - "z": -6, - "parity": 1, - "flavor": 1 + "y": 17, + "z": -5, + "parity": 0, + "flavor": 2 }, { "s": 716, @@ -794,11 +794,11 @@ "s": 921, "resolution": 5, "orientation": "vu", - "x": -6, - "y": 9, - "z": -3, + "x": -5, + "y": 10, + "z": -5, "parity": 0, - "flavor": 2 + "flavor": 0 }, { "s": 0, @@ -824,11 +824,11 @@ "s": 204, "resolution": 5, "orientation": "uw", - "x": -6, - "y": 18, - "z": -12, - "parity": 0, - "flavor": 0 + "x": -3, + "y": 17, + "z": -13, + "parity": 1, + "flavor": 1 }, { "s": 307, @@ -836,57 +836,57 @@ "orientation": "uw", "x": -12, "y": 14, - "z": -1, - "parity": 1, - "flavor": 3 + "z": -2, + "parity": 0, + "flavor": 0 }, { "s": 409, "resolution": 5, "orientation": "uw", - "x": -10, - "y": 21, + "x": -14, + "y": 24, "z": -10, - "parity": 1, - "flavor": 1 + "parity": 0, + "flavor": 0 }, { "s": 512, "resolution": 5, "orientation": "uw", - "x": 0, - "y": 16, + "x": -7, + "y": 23, "z": -16, "parity": 0, - "flavor": 0 + "flavor": 2 }, { "s": 614, "resolution": 5, "orientation": "uw", - "x": -5, - "y": 26, + "x": -1, + "y": 23, "z": -21, - "parity": 0, - "flavor": 0 + "parity": 1, + "flavor": 1 }, { "s": 716, "resolution": 5, "orientation": "uw", - "x": -10, + "x": -8, "y": 30, - "z": -20, - "parity": 0, - "flavor": 0 + "z": -21, + "parity": 1, + "flavor": 3 }, { "s": 819, "resolution": 5, "orientation": "uw", - "x": -20, - "y": 30, - "z": -9, + "x": -16, + "y": 28, + "z": -11, "parity": 1, "flavor": 3 }, @@ -894,9 +894,9 @@ "s": 921, "resolution": 5, "orientation": "uw", - "x": -16, - "y": 21, - "z": -5, + "x": -22, + "y": 25, + "z": -3, "parity": 0, "flavor": 2 }, @@ -914,9 +914,9 @@ "s": 102, "resolution": 5, "orientation": "wu", - "x": -16, - "y": 21, - "z": -5, + "x": -22, + "y": 25, + "z": -3, "parity": 0, "flavor": 2 }, @@ -924,9 +924,9 @@ "s": 204, "resolution": 5, "orientation": "wu", - "x": -20, - "y": 30, - "z": -9, + "x": -16, + "y": 28, + "z": -11, "parity": 1, "flavor": 3 }, @@ -934,41 +934,41 @@ "s": 307, "resolution": 5, "orientation": "wu", - "x": -10, + "x": -8, "y": 30, - "z": -20, - "parity": 0, - "flavor": 0 + "z": -21, + "parity": 1, + "flavor": 3 }, { "s": 409, "resolution": 5, "orientation": "wu", - "x": -5, - "y": 26, + "x": -1, + "y": 23, "z": -21, - "parity": 0, - "flavor": 0 + "parity": 1, + "flavor": 1 }, { "s": 512, "resolution": 5, "orientation": "wu", - "x": -15, - "y": 31, + "x": -8, + "y": 24, "z": -15, "parity": 1, - "flavor": 1 + "flavor": 3 }, { "s": 614, "resolution": 5, "orientation": "wu", - "x": -10, - "y": 21, + "x": -14, + "y": 24, "z": -10, - "parity": 1, - "flavor": 1 + "parity": 0, + "flavor": 0 }, { "s": 716, @@ -976,19 +976,19 @@ "orientation": "wu", "x": -12, "y": 14, - "z": -1, - "parity": 1, - "flavor": 3 + "z": -2, + "parity": 0, + "flavor": 0 }, { "s": 819, "resolution": 5, "orientation": "wu", - "x": -6, - "y": 18, - "z": -12, - "parity": 0, - "flavor": 0 + "x": -3, + "y": 17, + "z": -13, + "parity": 1, + "flavor": 1 }, { "s": 921, @@ -1035,8 +1035,8 @@ "resolution": 5, "orientation": "vw", "x": -7, - "y": 19, - "z": -12, + "y": 17, + "z": -10, "parity": 0, "flavor": 2 }, @@ -1045,10 +1045,10 @@ "resolution": 5, "orientation": "vw", "x": -1, - "y": 6, - "z": -4, + "y": 7, + "z": -5, "parity": 1, - "flavor": 3 + "flavor": 1 }, { "s": 512, @@ -1165,18 +1165,18 @@ "resolution": 5, "orientation": "wv", "x": -1, - "y": 6, - "z": -4, + "y": 7, + "z": -5, "parity": 1, - "flavor": 3 + "flavor": 1 }, { "s": 716, "resolution": 5, "orientation": "wv", "x": -7, - "y": 19, - "z": -12, + "y": 17, + "z": -10, "parity": 0, "flavor": 2 }, @@ -1214,11 +1214,11 @@ "s": 1638, "resolution": 7, "orientation": "uv", - "x": -25, - "y": 38, - "z": -12, - "parity": 1, - "flavor": 3 + "x": -21, + "y": 42, + "z": -21, + "parity": 0, + "flavor": 0 }, { "s": 3276, @@ -1244,11 +1244,11 @@ "s": 6553, "resolution": 7, "orientation": "uv", - "x": -51, - "y": 76, - "z": -25, - "parity": 0, - "flavor": 0 + "x": -49, + "y": 71, + "z": -21, + "parity": 1, + "flavor": 1 }, { "s": 8192, @@ -1264,11 +1264,11 @@ "s": 9830, "resolution": 7, "orientation": "uv", - "x": -89, - "y": 102, - "z": -12, + "x": -88, + "y": 99, + "z": -10, "parity": 1, - "flavor": 3 + "flavor": 1 }, { "s": 11468, @@ -1295,10 +1295,10 @@ "resolution": 7, "orientation": "uv", "x": -3, - "y": 76, - "z": -73, - "parity": 0, - "flavor": 0 + "y": 78, + "z": -74, + "parity": 1, + "flavor": 3 }, { "s": 0, @@ -1315,10 +1315,10 @@ "resolution": 7, "orientation": "vu", "x": -3, - "y": 76, - "z": -73, - "parity": 0, - "flavor": 0 + "y": 78, + "z": -74, + "parity": 1, + "flavor": 3 }, { "s": 3276, @@ -1344,19 +1344,19 @@ "s": 6553, "resolution": 7, "orientation": "vu", - "x": -89, - "y": 102, - "z": -12, + "x": -88, + "y": 99, + "z": -10, "parity": 1, - "flavor": 3 + "flavor": 1 }, { "s": 8192, "resolution": 7, "orientation": "vu", - "x": -32, + "x": -63, "y": 63, - "z": -31, + "z": 0, "parity": 0, "flavor": 2 }, @@ -1364,11 +1364,11 @@ "s": 9830, "resolution": 7, "orientation": "vu", - "x": -51, - "y": 76, - "z": -25, - "parity": 0, - "flavor": 0 + "x": -49, + "y": 71, + "z": -21, + "parity": 1, + "flavor": 1 }, { "s": 11468, @@ -1394,11 +1394,11 @@ "s": 14745, "resolution": 7, "orientation": "vu", - "x": -25, - "y": 38, - "z": -12, - "parity": 1, - "flavor": 3 + "x": -21, + "y": 42, + "z": -21, + "parity": 0, + "flavor": 0 }, { "s": 0, @@ -1424,28 +1424,28 @@ "s": 3276, "resolution": 7, "orientation": "uw", - "x": -25, - "y": 77, - "z": -51, - "parity": 1, - "flavor": 1 + "x": -15, + "y": 67, + "z": -52, + "parity": 0, + "flavor": 2 }, { "s": 4915, "resolution": 7, "orientation": "uw", - "x": -51, - "y": 57, - "z": -6, - "parity": 0, - "flavor": 2 + "x": -48, + "y": 60, + "z": -11, + "parity": 1, + "flavor": 3 }, { "s": 6553, "resolution": 7, "orientation": "uw", - "x": -42, - "y": 85, + "x": -56, + "y": 99, "z": -42, "parity": 1, "flavor": 1 @@ -1454,18 +1454,18 @@ "s": 8192, "resolution": 7, "orientation": "uw", - "x": 0, - "y": 64, + "x": -31, + "y": 95, "z": -64, "parity": 0, - "flavor": 0 + "flavor": 2 }, { "s": 9830, "resolution": 7, "orientation": "uw", - "x": -21, - "y": 106, + "x": -7, + "y": 92, "z": -85, "parity": 0, "flavor": 0 @@ -1474,31 +1474,31 @@ "s": 11468, "resolution": 7, "orientation": "uw", - "x": -41, - "y": 125, - "z": -83, + "x": -33, + "y": 120, + "z": -86, "parity": 1, - "flavor": 1 + "flavor": 3 }, { "s": 13107, "resolution": 7, "orientation": "uw", - "x": -83, - "y": 121, - "z": -38, - "parity": 0, - "flavor": 2 + "x": -67, + "y": 113, + "z": -45, + "parity": 1, + "flavor": 1 }, { "s": 14745, "resolution": 7, "orientation": "uw", - "x": -64, - "y": 85, - "z": -21, - "parity": 0, - "flavor": 2 + "x": -89, + "y": 102, + "z": -12, + "parity": 1, + "flavor": 3 }, { "s": 0, @@ -1514,38 +1514,38 @@ "s": 1638, "resolution": 7, "orientation": "wu", - "x": -64, - "y": 85, - "z": -21, - "parity": 0, - "flavor": 2 + "x": -89, + "y": 102, + "z": -12, + "parity": 1, + "flavor": 3 }, { "s": 3276, "resolution": 7, "orientation": "wu", - "x": -83, - "y": 121, - "z": -38, - "parity": 0, - "flavor": 2 + "x": -67, + "y": 113, + "z": -45, + "parity": 1, + "flavor": 1 }, { "s": 4915, "resolution": 7, "orientation": "wu", - "x": -41, - "y": 125, - "z": -83, + "x": -33, + "y": 120, + "z": -86, "parity": 1, - "flavor": 1 + "flavor": 3 }, { "s": 6553, "resolution": 7, "orientation": "wu", - "x": -21, - "y": 106, + "x": -7, + "y": 92, "z": -85, "parity": 0, "flavor": 0 @@ -1554,18 +1554,18 @@ "s": 8192, "resolution": 7, "orientation": "wu", - "x": -63, - "y": 127, + "x": -32, + "y": 96, "z": -63, "parity": 1, - "flavor": 1 + "flavor": 3 }, { "s": 9830, "resolution": 7, "orientation": "wu", - "x": -42, - "y": 85, + "x": -56, + "y": 99, "z": -42, "parity": 1, "flavor": 1 @@ -1574,21 +1574,21 @@ "s": 11468, "resolution": 7, "orientation": "wu", - "x": -51, - "y": 57, - "z": -6, - "parity": 0, - "flavor": 2 + "x": -48, + "y": 60, + "z": -11, + "parity": 1, + "flavor": 3 }, { "s": 13107, "resolution": 7, "orientation": "wu", - "x": -25, - "y": 77, - "z": -51, - "parity": 1, - "flavor": 1 + "x": -15, + "y": 67, + "z": -52, + "parity": 0, + "flavor": 2 }, { "s": 14745, @@ -1615,10 +1615,10 @@ "resolution": 7, "orientation": "vw", "x": -44, - "y": 115, - "z": -70, - "parity": 1, - "flavor": 1 + "y": 113, + "z": -69, + "parity": 0, + "flavor": 2 }, { "s": 3276, @@ -1634,21 +1634,21 @@ "s": 4915, "resolution": 7, "orientation": "vw", - "x": -28, - "y": 78, - "z": -50, + "x": -30, + "y": 71, + "z": -41, "parity": 0, - "flavor": 0 + "flavor": 2 }, { "s": 6553, "resolution": 7, "orientation": "vw", - "x": -6, - "y": 25, - "z": -19, + "x": -7, + "y": 28, + "z": -21, "parity": 0, - "flavor": 2 + "flavor": 0 }, { "s": 8192, @@ -1764,21 +1764,21 @@ "s": 9830, "resolution": 7, "orientation": "wv", - "x": -6, - "y": 25, - "z": -19, + "x": -7, + "y": 28, + "z": -21, "parity": 0, - "flavor": 2 + "flavor": 0 }, { "s": 11468, "resolution": 7, "orientation": "wv", - "x": -28, - "y": 78, - "z": -50, + "x": -30, + "y": 71, + "z": -41, "parity": 0, - "flavor": 0 + "flavor": 2 }, { "s": 13107, @@ -1795,19 +1795,19 @@ "resolution": 7, "orientation": "wv", "x": -44, - "y": 115, - "z": -70, - "parity": 1, - "flavor": 1 + "y": 113, + "z": -69, + "parity": 0, + "flavor": 2 } ], - "IJToS": [ + "pointToS": [ { "i": 0.8, "j": 1.6, "resolution": 3, "orientation": "uv", - "s": 6 + "s": 5 }, { "i": 2.4, @@ -1856,14 +1856,14 @@ "j": 2, "resolution": 3, "orientation": "uv", - "s": 54 + "s": 50 }, { "i": 0.8, "j": 1.6, "resolution": 3, "orientation": "vu", - "s": 57 + "s": 58 }, { "i": 2.4, @@ -1912,7 +1912,7 @@ "j": 2, "resolution": 3, "orientation": "vu", - "s": 9 + "s": 13 }, { "i": 0.8, @@ -1926,35 +1926,35 @@ "j": 1.2, "resolution": 3, "orientation": "uw", - "s": 11 + "s": 8 }, { "i": 0.4, "j": 4.8, "resolution": 3, "orientation": "uw", - "s": 58 + "s": 55 }, { "i": 3.6, "j": 3.6, "resolution": 3, "orientation": "uw", - "s": 31 + "s": 26 }, { "i": 5.6, "j": 0.8, "resolution": 3, "orientation": "uw", - "s": 35 + "s": 39 }, { "i": 2.64, "j": 2.64, "resolution": 3, "orientation": "uw", - "s": 25 + "s": 28 }, { "i": 0.088, @@ -1968,7 +1968,7 @@ "j": 2, "resolution": 3, "orientation": "uw", - "s": 37 + "s": 45 }, { "i": 0.8, @@ -1982,35 +1982,35 @@ "j": 1.2, "resolution": 3, "orientation": "wu", - "s": 52 + "s": 55 }, { "i": 0.4, "j": 4.8, "resolution": 3, "orientation": "wu", - "s": 5 + "s": 8 }, { "i": 3.6, "j": 3.6, "resolution": 3, "orientation": "wu", - "s": 32 + "s": 37 }, { "i": 5.6, "j": 0.8, "resolution": 3, "orientation": "wu", - "s": 28 + "s": 24 }, { "i": 2.64, "j": 2.64, "resolution": 3, "orientation": "wu", - "s": 38 + "s": 35 }, { "i": 0.088, @@ -2024,7 +2024,7 @@ "j": 2, "resolution": 3, "orientation": "wu", - "s": 26 + "s": 18 }, { "i": 0.8, @@ -2038,7 +2038,7 @@ "j": 1.2, "resolution": 3, "orientation": "vw", - "s": 21 + "s": 20 }, { "i": 0.4, @@ -2066,7 +2066,7 @@ "j": 2.64, "resolution": 3, "orientation": "vw", - "s": 43 + "s": 41 }, { "i": 0.088, @@ -2080,7 +2080,7 @@ "j": 2, "resolution": 3, "orientation": "vw", - "s": 9 + "s": 7 }, { "i": 0.8, @@ -2094,7 +2094,7 @@ "j": 1.2, "resolution": 3, "orientation": "wv", - "s": 42 + "s": 43 }, { "i": 0.4, @@ -2122,7 +2122,7 @@ "j": 2.64, "resolution": 3, "orientation": "wv", - "s": 20 + "s": 22 }, { "i": 0.088, @@ -2136,14 +2136,14 @@ "j": 2, "resolution": 3, "orientation": "wv", - "s": 54 + "s": 56 }, { "i": 3.2, "j": 6.4, "resolution": 5, "orientation": "uv", - "s": 102 + "s": 89 }, { "i": 9.6, @@ -2157,7 +2157,7 @@ "j": 19.2, "resolution": 5, "orientation": "uv", - "s": 537 + "s": 534 }, { "i": 14.4, @@ -2171,14 +2171,14 @@ "j": 3.2, "resolution": 5, "orientation": "uv", - "s": 947 + "s": 948 }, { "i": 10.56, "j": 10.56, "resolution": 5, "orientation": "uv", - "s": 273 + "s": 281 }, { "i": 0.352, @@ -2192,14 +2192,14 @@ "j": 8, "resolution": 5, "orientation": "uv", - "s": 873 + "s": 810 }, { "i": 3.2, "j": 6.4, "resolution": 5, "orientation": "vu", - "s": 921 + "s": 934 }, { "i": 9.6, @@ -2213,7 +2213,7 @@ "j": 19.2, "resolution": 5, "orientation": "vu", - "s": 486 + "s": 489 }, { "i": 14.4, @@ -2227,14 +2227,14 @@ "j": 3.2, "resolution": 5, "orientation": "vu", - "s": 76 + "s": 75 }, { "i": 10.56, "j": 10.56, "resolution": 5, "orientation": "vu", - "s": 750 + "s": 742 }, { "i": 0.352, @@ -2248,49 +2248,49 @@ "j": 8, "resolution": 5, "orientation": "vu", - "s": 150 + "s": 213 }, { "i": 3.2, "j": 6.4, "resolution": 5, "orientation": "uw", - "s": 86 + "s": 89 }, { "i": 9.6, "j": 4.8, "resolution": 5, "orientation": "uw", - "s": 184 + "s": 139 }, { "i": 1.6, "j": 19.2, "resolution": 5, "orientation": "uw", - "s": 937 + "s": 886 }, { "i": 14.4, "j": 14.4, "resolution": 5, "orientation": "uw", - "s": 504 + "s": 431 }, { "i": 22.4, "j": 3.2, "resolution": 5, "orientation": "uw", - "s": 563 + "s": 628 }, { "i": 10.56, "j": 10.56, "resolution": 5, "orientation": "uw", - "s": 409 + "s": 454 }, { "i": 0.352, @@ -2304,49 +2304,49 @@ "j": 8, "resolution": 5, "orientation": "uw", - "s": 603 + "s": 725 }, { "i": 3.2, "j": 6.4, "resolution": 5, "orientation": "wu", - "s": 937 + "s": 934 }, { "i": 9.6, "j": 4.8, "resolution": 5, "orientation": "wu", - "s": 839 + "s": 884 }, { "i": 1.6, "j": 19.2, "resolution": 5, "orientation": "wu", - "s": 86 + "s": 137 }, { "i": 14.4, "j": 14.4, "resolution": 5, "orientation": "wu", - "s": 519 + "s": 592 }, { "i": 22.4, "j": 3.2, "resolution": 5, "orientation": "wu", - "s": 460 + "s": 395 }, { "i": 10.56, "j": 10.56, "resolution": 5, "orientation": "wu", - "s": 614 + "s": 569 }, { "i": 0.352, @@ -2360,7 +2360,7 @@ "j": 8, "resolution": 5, "orientation": "wu", - "s": 420 + "s": 298 }, { "i": 3.2, @@ -2374,7 +2374,7 @@ "j": 4.8, "resolution": 5, "orientation": "vw", - "s": 348 + "s": 331 }, { "i": 1.6, @@ -2388,7 +2388,7 @@ "j": 14.4, "resolution": 5, "orientation": "vw", - "s": 762 + "s": 760 }, { "i": 22.4, @@ -2402,7 +2402,7 @@ "j": 10.56, "resolution": 5, "orientation": "vw", - "s": 699 + "s": 665 }, { "i": 0.352, @@ -2416,7 +2416,7 @@ "j": 8, "resolution": 5, "orientation": "vw", - "s": 159 + "s": 116 }, { "i": 3.2, @@ -2430,7 +2430,7 @@ "j": 4.8, "resolution": 5, "orientation": "wv", - "s": 675 + "s": 692 }, { "i": 1.6, @@ -2444,7 +2444,7 @@ "j": 14.4, "resolution": 5, "orientation": "wv", - "s": 261 + "s": 263 }, { "i": 22.4, @@ -2458,7 +2458,7 @@ "j": 10.56, "resolution": 5, "orientation": "wv", - "s": 324 + "s": 358 }, { "i": 0.352, @@ -2472,161 +2472,161 @@ "j": 8, "resolution": 5, "orientation": "wv", - "s": 864 + "s": 907 }, { "i": 12.8, "j": 25.6, "resolution": 7, "orientation": "uv", - "s": 1638 + "s": 1433 }, { "i": 38.4, "j": 19.2, "resolution": 7, "orientation": "uv", - "s": 2227 + "s": 2228 }, { "i": 6.4, "j": 76.8, "resolution": 7, "orientation": "uv", - "s": 8601 + "s": 8550 }, { "i": 57.6, "j": 57.6, "resolution": 7, "orientation": "uv", - "s": 5381 + "s": 5383 }, { "i": 89.6, "j": 12.8, "resolution": 7, "orientation": "uv", - "s": 15163 + "s": 15179 }, { "i": 42.24, "j": 42.24, "resolution": 7, "orientation": "uv", - "s": 4368 + "s": 4504 }, { "i": 1.408, "j": 2.176, "resolution": 7, "orientation": "uv", - "s": 31 + "s": 16 }, { "i": 76.8, "j": 32, "resolution": 7, "orientation": "uv", - "s": 13979 + "s": 12965 }, { "i": 12.8, "j": 25.6, "resolution": 7, "orientation": "vu", - "s": 14745 + "s": 14950 }, { "i": 38.4, "j": 19.2, "resolution": 7, "orientation": "vu", - "s": 14156 + "s": 14155 }, { "i": 6.4, "j": 76.8, "resolution": 7, "orientation": "vu", - "s": 7782 + "s": 7833 }, { "i": 57.6, "j": 57.6, "resolution": 7, "orientation": "vu", - "s": 11002 + "s": 11000 }, { "i": 89.6, "j": 12.8, "resolution": 7, "orientation": "vu", - "s": 1220 + "s": 1204 }, { "i": 42.24, "j": 42.24, "resolution": 7, "orientation": "vu", - "s": 12015 + "s": 11879 }, { "i": 1.408, "j": 2.176, "resolution": 7, "orientation": "vu", - "s": 16352 + "s": 16367 }, { "i": 76.8, "j": 32, "resolution": 7, "orientation": "vu", - "s": 2404 + "s": 3418 }, { "i": 12.8, "j": 25.6, "resolution": 7, "orientation": "uw", - "s": 1381 + "s": 1433 }, { "i": 38.4, "j": 19.2, "resolution": 7, "orientation": "uw", - "s": 2952 + "s": 2228 }, { "i": 6.4, "j": 76.8, "resolution": 7, "orientation": "uw", - "s": 14997 + "s": 14182 }, { "i": 57.6, "j": 57.6, "resolution": 7, "orientation": "uw", - "s": 8071 + "s": 6904 }, { "i": 89.6, "j": 12.8, "resolution": 7, "orientation": "uw", - "s": 9011 + "s": 10059 }, { "i": 42.24, "j": 42.24, "resolution": 7, "orientation": "uw", - "s": 6552 + "s": 7271 }, { "i": 1.408, @@ -2640,49 +2640,49 @@ "j": 32, "resolution": 7, "orientation": "uw", - "s": 9652 + "s": 11610 }, { "i": 12.8, "j": 25.6, "resolution": 7, "orientation": "wu", - "s": 15002 + "s": 14950 }, { "i": 38.4, "j": 19.2, "resolution": 7, "orientation": "wu", - "s": 13431 + "s": 14155 }, { "i": 6.4, "j": 76.8, "resolution": 7, "orientation": "wu", - "s": 1386 + "s": 2201 }, { "i": 57.6, "j": 57.6, "resolution": 7, "orientation": "wu", - "s": 8312 + "s": 9479 }, { "i": 89.6, "j": 12.8, "resolution": 7, "orientation": "wu", - "s": 7372 + "s": 6324 }, { "i": 42.24, "j": 42.24, "resolution": 7, "orientation": "wu", - "s": 9831 + "s": 9112 }, { "i": 1.408, @@ -2696,7 +2696,7 @@ "j": 32, "resolution": 7, "orientation": "wu", - "s": 6731 + "s": 4773 }, { "i": 12.8, @@ -2710,7 +2710,7 @@ "j": 19.2, "resolution": 7, "orientation": "vw", - "s": 5572 + "s": 5300 }, { "i": 6.4, @@ -2724,21 +2724,21 @@ "j": 57.6, "resolution": 7, "orientation": "vw", - "s": 12207 + "s": 12167 }, { "i": 89.6, "j": 12.8, "resolution": 7, "orientation": "vw", - "s": 3148 + "s": 3147 }, { "i": 42.24, "j": 42.24, "resolution": 7, "orientation": "vw", - "s": 11194 + "s": 10648 }, { "i": 1.408, @@ -2752,7 +2752,7 @@ "j": 32, "resolution": 7, "orientation": "vw", - "s": 2548 + "s": 1871 }, { "i": 12.8, @@ -2766,7 +2766,7 @@ "j": 19.2, "resolution": 7, "orientation": "wv", - "s": 10811 + "s": 11083 }, { "i": 6.4, @@ -2780,21 +2780,21 @@ "j": 57.6, "resolution": 7, "orientation": "wv", - "s": 4176 + "s": 4216 }, { "i": 89.6, "j": 12.8, "resolution": 7, "orientation": "wv", - "s": 13235 + "s": 13236 }, { "i": 42.24, "j": 42.24, "resolution": 7, "orientation": "wv", - "s": 5189 + "s": 5735 }, { "i": 1.408, @@ -2808,7 +2808,7 @@ "j": 32, "resolution": 7, "orientation": "wv", - "s": 13835 + "s": 14512 } ], "tripleInBounds": [ diff --git a/tests/fixtures/lattice/lsystem.json b/tests/fixtures/lattice/lsystem.json index fb11015..89a8c31 100644 --- a/tests/fixtures/lattice/lsystem.json +++ b/tests/fixtures/lattice/lsystem.json @@ -1801,7 +1801,7 @@ "flavor": 2 } ], - "IJToS": [ + "pointToS": [ { "i": 0.8, "j": 1.6, @@ -1968,7 +1968,7 @@ "j": 2, "resolution": 3, "orientation": "uw", - "s": 33 + "s": 45 }, { "i": 0.8, @@ -2024,7 +2024,7 @@ "j": 2, "resolution": 3, "orientation": "wu", - "s": 30 + "s": 18 }, { "i": 0.8, @@ -2080,7 +2080,7 @@ "j": 2, "resolution": 3, "orientation": "vw", - "s": 9 + "s": 7 }, { "i": 0.8, @@ -2136,7 +2136,7 @@ "j": 2, "resolution": 3, "orientation": "wv", - "s": 54 + "s": 56 }, { "i": 3.2, @@ -2304,7 +2304,7 @@ "j": 8, "resolution": 5, "orientation": "uw", - "s": 543 + "s": 725 }, { "i": 3.2, @@ -2360,7 +2360,7 @@ "j": 8, "resolution": 5, "orientation": "wu", - "s": 480 + "s": 298 }, { "i": 3.2, @@ -2416,7 +2416,7 @@ "j": 8, "resolution": 5, "orientation": "vw", - "s": 159 + "s": 116 }, { "i": 3.2, @@ -2472,7 +2472,7 @@ "j": 8, "resolution": 5, "orientation": "wv", - "s": 864 + "s": 907 }, { "i": 12.8, @@ -2640,7 +2640,7 @@ "j": 32, "resolution": 7, "orientation": "uw", - "s": 8692 + "s": 11610 }, { "i": 12.8, @@ -2696,7 +2696,7 @@ "j": 32, "resolution": 7, "orientation": "wu", - "s": 7691 + "s": 4773 }, { "i": 12.8, @@ -2752,7 +2752,7 @@ "j": 32, "resolution": 7, "orientation": "vw", - "s": 2548 + "s": 1871 }, { "i": 12.8, @@ -2808,7 +2808,7 @@ "j": 32, "resolution": 7, "orientation": "wv", - "s": 13835 + "s": 14512 } ] } \ No newline at end of file diff --git a/tests/fixtures/regions/polygon.json b/tests/fixtures/regions/polygon.json index 5fd4a24..5c2eea6 100644 --- a/tests/fixtures/regions/polygon.json +++ b/tests/fixtures/regions/polygon.json @@ -20,12 +20,12 @@ ], "resolution": 5, "cells": [ - "3ede000000000000", + "3eee000000000000", "3ef2000000000000", "3ef6000000000000", "3efa000000000000", - "3f6e000000000000", - "3f7a000000000000", + "3f5e000000000000", + "3f62000000000000", "3f86000000000000", "3f8a000000000000", "3f8e000000000000", @@ -40,11 +40,11 @@ "3fb6000000000000", "3fba000000000000", "3fbe000000000000", + "3fc2000000000000", "3fc6000000000000", "3fca000000000000", - "3fce000000000000", - "3fd2000000000000", "3fda000000000000", + "3fde000000000000", "3fe2000000000000", "3fe6000000000000", "3fea000000000000", @@ -74,15 +74,15 @@ ], "resolution": 5, "cells": [ - "4912000000000000", - "491a000000000000", - "491e000000000000", + "4916000000000000", + "4926000000000000", "492a000000000000", + "492e000000000000", "4932000000000000", "4936000000000000", "493a000000000000", "493e000000000000", - "4946000000000000", + "494a000000000000", "496a000000000000", "496e000000000000", "4976000000000000", @@ -97,9 +97,6 @@ "499a000000000000", "499e000000000000", "49a2000000000000", - "49a6000000000000", - "49aa000000000000", - "49ae000000000000", "49b2000000000000", "49b6000000000000", "49ba000000000000", @@ -117,18 +114,21 @@ "49ea000000000000", "49ee000000000000", "49f2000000000000", - "4b06000000000000", + "49f6000000000000", + "49fa000000000000", + "49fe000000000000", + "4b1e000000000000", "4b22000000000000", - "4b2a000000000000", + "4b26000000000000", "4b2e000000000000", - "4b3a000000000000", - "4f6a000000000000", - "4f7e000000000000", - "4fc2000000000000", - "4fc6000000000000", - "4fca000000000000", - "4fce000000000000", + "4b36000000000000", + "4f8e000000000000", + "4f92000000000000", "4fd2000000000000", + "4fd6000000000000", + "4fda000000000000", + "4fde000000000000", + "4fe2000000000000", "6cd6000000000000", "6cee000000000000" ] @@ -172,35 +172,35 @@ "5176000000000000", "517a000000000000", "517e000000000000", - "51c2000000000000", - "51ca000000000000", - "51ce000000000000", - "51d6000000000000", - "51de000000000000", - "634a000000000000", - "634e000000000000", - "6356000000000000", - "635a000000000000", - "635e000000000000", - "6362000000000000", - "6366000000000000", - "636a000000000000", - "636e000000000000", - "6372000000000000", + "5182000000000000", + "5186000000000000", + "518a000000000000", + "5196000000000000", + "519e000000000000", "6376000000000000", - "637a000000000000", "637e000000000000", + "6382000000000000", + "6386000000000000", + "638a000000000000", + "638e000000000000", + "6392000000000000", + "6396000000000000", + "639a000000000000", + "639e000000000000", "63a2000000000000", + "63a6000000000000", "63aa000000000000", - "63c2000000000000", - "63c6000000000000", - "63ca000000000000", + "63b2000000000000", + "63b6000000000000", "63ce000000000000", "63d2000000000000", "63d6000000000000", "63da000000000000", "63de000000000000", "63e2000000000000", + "63e6000000000000", + "63ea000000000000", + "63ee000000000000", "63f2000000000000", "63f6000000000000", "63fa000000000000", @@ -246,29 +246,13 @@ "517d800000000000", "517e800000000000", "517f800000000000", - "634f800000000000", - "6360800000000000", - "6362800000000000", - "6363800000000000", - "6368800000000000", - "636a800000000000", - "637f800000000000", - "63c0800000000000", - "63c1800000000000", - "63c2800000000000", - "63c3800000000000", - "63c4800000000000", - "63c5800000000000", - "63c6800000000000", - "63c7800000000000", - "63c8800000000000", - "63c9800000000000", - "63ca800000000000", - "63cb800000000000", - "63cc800000000000", - "63cd800000000000", - "63ce800000000000", - "63cf800000000000", + "638f800000000000", + "6390800000000000", + "6393800000000000", + "6394800000000000", + "6395800000000000", + "6396800000000000", + "63b3800000000000", "63d0800000000000", "63d1800000000000", "63d2800000000000", @@ -283,9 +267,25 @@ "63db800000000000", "63dc800000000000", "63dd800000000000", - "63f9800000000000", - "63fa800000000000", - "63fb800000000000" + "63de800000000000", + "63df800000000000", + "63e0800000000000", + "63e1800000000000", + "63e2800000000000", + "63e3800000000000", + "63e4800000000000", + "63e5800000000000", + "63e6800000000000", + "63e7800000000000", + "63e8800000000000", + "63e9800000000000", + "63ea800000000000", + "63eb800000000000", + "63ec800000000000", + "63ed800000000000", + "63f5800000000000", + "63f6800000000000", + "63f7800000000000" ] }, { @@ -323,7 +323,7 @@ "c38000000000000", "c48000000000000", "ca8000000000000", - "5118000000000000", + "5128000000000000", "5138000000000000", "5148000000000000", "5158000000000000", @@ -337,12 +337,12 @@ "51d8000000000000", "51e8000000000000", "51f8000000000000", - "5308000000000000", "5328000000000000", - "5358000000000000", + "5338000000000000", + "5348000000000000", "6138000000000000", "6318000000000000", - "6338000000000000", + "6328000000000000", "6348000000000000", "6358000000000000", "6368000000000000", @@ -419,7 +419,7 @@ "8d18000000000000", "8d28000000000000", "8d38000000000000", - "8db8000000000000", + "8df8000000000000", "8e08000000000000", "8e18000000000000", "8e28000000000000", @@ -436,9 +436,9 @@ "8ed8000000000000", "8ee8000000000000", "8ef8000000000000", + "8f08000000000000", "8f18000000000000", "8f28000000000000", - "8f38000000000000", "8f48000000000000", "8f58000000000000", "8f68000000000000", @@ -450,16 +450,16 @@ "9098000000000000", "90a8000000000000", "90b8000000000000", + "90c8000000000000", "90d8000000000000", - "90e8000000000000", "90f8000000000000", - "9208000000000000", - "9218000000000000", - "9228000000000000", - "9238000000000000", + "9248000000000000", + "9258000000000000", + "9268000000000000", + "9278000000000000", "9288000000000000", + "a0c8000000000000", "a0d8000000000000", - "a0e8000000000000", "a0f8000000000000", "a108000000000000", "a118000000000000", @@ -470,12 +470,12 @@ "a168000000000000", "a178000000000000", "a188000000000000", - "a198000000000000", - "a1a8000000000000", "a1c8000000000000", + "a1d8000000000000", + "a1e8000000000000", "a208000000000000", - "a218000000000000", - "a248000000000000" + "a248000000000000", + "a258000000000000" ] }, { @@ -530,9 +530,9 @@ "ece0000000000000", "ed20000000000000", "ed60000000000000", - "eda0000000000000", - "ee20000000000000", - "efa0000000000000" + "ede0000000000000", + "ee60000000000000", + "ef60000000000000" ] }, { @@ -567,11 +567,11 @@ ], "resolution": 6, "cells": [ - "5141800000000000", + "5143800000000000", "5144800000000000", "5145800000000000", "5146800000000000", - "5147800000000000", + "5148800000000000", "5149800000000000", "514a800000000000", "514b800000000000", @@ -583,10 +583,10 @@ "5151800000000000", "5152800000000000", "5153800000000000", - "5158800000000000", - "515a800000000000", "515b800000000000", + "515d800000000000", "515e800000000000", + "515f800000000000", "5160800000000000", "5161800000000000", "5162800000000000", @@ -619,108 +619,108 @@ "517d800000000000", "517e800000000000", "517f800000000000", - "5190800000000000", - "51c0800000000000", - "51c1800000000000", - "51c2800000000000", - "51c3800000000000", - "51c8800000000000", - "51c9800000000000", - "51ca800000000000", - "51cb800000000000", - "51cd800000000000", - "51ce800000000000", - "51cf800000000000", - "51d4800000000000", - "51d5800000000000", - "51d6800000000000", - "51d7800000000000", - "51d9800000000000", - "51dc800000000000", - "51dd800000000000", - "51df800000000000", - "6347800000000000", - "6348800000000000", - "6349800000000000", - "634a800000000000", - "634b800000000000", - "634c800000000000", - "634d800000000000", - "634e800000000000", - "634f800000000000", - "6350800000000000", - "6357800000000000", - "6358800000000000", - "6359800000000000", - "635a800000000000", - "635b800000000000", - "635d800000000000", - "635e800000000000", - "635f800000000000", - "6360800000000000", - "6361800000000000", - "6362800000000000", - "6363800000000000", - "6364800000000000", - "6365800000000000", - "6366800000000000", - "6367800000000000", - "6368800000000000", - "6369800000000000", - "636a800000000000", - "636b800000000000", - "636c800000000000", - "636d800000000000", - "636e800000000000", - "636f800000000000", + "5180800000000000", + "5181800000000000", + "5182800000000000", + "5183800000000000", + "5184800000000000", + "5185800000000000", + "5186800000000000", + "5187800000000000", + "5188800000000000", + "5189800000000000", + "518a800000000000", + "5194800000000000", + "5195800000000000", + "5196800000000000", + "5197800000000000", + "5198800000000000", + "519c800000000000", + "519d800000000000", + "519f800000000000", + "51cc800000000000", "6370800000000000", - "6371800000000000", - "6372800000000000", - "6373800000000000", "6374800000000000", "6375800000000000", "6376800000000000", - "6377800000000000", - "6378800000000000", - "6379800000000000", - "637a800000000000", - "637b800000000000", "637c800000000000", "637d800000000000", - "637e800000000000", "637f800000000000", + "6380800000000000", + "6381800000000000", + "6382800000000000", + "6383800000000000", + "6384800000000000", + "6385800000000000", + "6386800000000000", + "6387800000000000", + "6388800000000000", + "6389800000000000", + "638a800000000000", + "638b800000000000", + "638c800000000000", + "638d800000000000", + "638e800000000000", + "638f800000000000", + "6390800000000000", + "6391800000000000", + "6392800000000000", + "6393800000000000", + "6394800000000000", + "6395800000000000", + "6396800000000000", + "6397800000000000", + "6398800000000000", + "6399800000000000", + "639a800000000000", + "639b800000000000", + "639c800000000000", + "639d800000000000", + "639e800000000000", + "639f800000000000", "63a0800000000000", + "63a1800000000000", "63a2800000000000", - "63a3800000000000", + "63a4800000000000", + "63a5800000000000", + "63a6800000000000", + "63a7800000000000", "63a8800000000000", - "63a9800000000000", - "63aa800000000000", - "63ae800000000000", - "63c0800000000000", - "63c1800000000000", - "63c2800000000000", - "63c3800000000000", - "63c4800000000000", - "63c5800000000000", - "63c6800000000000", - "63c7800000000000", + "63af800000000000", + "63b0800000000000", + "63b1800000000000", + "63b2800000000000", + "63b3800000000000", + "63b4800000000000", + "63b5800000000000", + "63b6800000000000", + "63b7800000000000", + "63b8800000000000", "63c8800000000000", - "63c9800000000000", - "63ca800000000000", - "63cb800000000000", - "63cc800000000000", "63cd800000000000", "63ce800000000000", "63cf800000000000", + "63d0800000000000", "63d1800000000000", "63d2800000000000", "63d3800000000000", + "63d4800000000000", + "63d5800000000000", + "63d6800000000000", + "63d7800000000000", "63d8800000000000", + "63d9800000000000", + "63da800000000000", "63db800000000000", - "63e0800000000000", + "63dc800000000000", + "63dd800000000000", + "63de800000000000", + "63df800000000000", "63e1800000000000", "63e2800000000000", - "63e4800000000000" + "63e3800000000000", + "63e8800000000000", + "63eb800000000000" ] }, { @@ -772,27 +772,27 @@ "515e000000000000", "5162000000000000", "5166000000000000", - "5192000000000000", - "51de000000000000", - "634a000000000000", - "634e000000000000", - "6356000000000000", - "635a000000000000", - "635e000000000000", - "6362000000000000", - "6366000000000000", - "636e000000000000", - "6372000000000000", + "519e000000000000", + "51ce000000000000", "6376000000000000", - "637a000000000000", + "637e000000000000", + "6382000000000000", + "6386000000000000", + "638a000000000000", + "6396000000000000", + "639a000000000000", + "639e000000000000", "63a2000000000000", + "63a6000000000000", "63aa000000000000", - "63ca000000000000", + "63b2000000000000", + "63b6000000000000", "63ce000000000000", + "63d2000000000000", "63d6000000000000", - "63da000000000000", - "63de000000000000", - "63e2000000000000", + "63e6000000000000", + "63ea000000000000", + "63ee000000000000", "63f2000000000000", "63f6000000000000", "63fa000000000000", @@ -831,56 +831,56 @@ ], "resolution": 6, "cells": [ + "5159800000000000", + "515a800000000000", "515b800000000000", - "515d800000000000", - "515e800000000000", "515f800000000000", + "5161800000000000", + "5162800000000000", "5163800000000000", - "5165800000000000", - "5166800000000000", "5167800000000000", "5168800000000000", "5169800000000000", "516a800000000000", - "516d800000000000", + "516e800000000000", "516f800000000000", "5170800000000000", "5171800000000000", "5172800000000000", "5173800000000000", "5174800000000000", - "5175800000000000", "5176800000000000", + "5177800000000000", "5178800000000000", - "634f800000000000", - "6360800000000000", - "6362800000000000", - "63c7800000000000", + "6395800000000000", + "6396800000000000", + "63b3800000000000", "63c8800000000000", - "63c9800000000000", - "63ca800000000000", - "63cb800000000000", - "63cc800000000000", "63cd800000000000", "63ce800000000000", "63cf800000000000", "63d0800000000000", + "63d1800000000000", + "63d2800000000000", "63d3800000000000", "63d4800000000000", "63d5800000000000", "63d6800000000000", "63d7800000000000", - "63d8800000000000", - "63d9800000000000", - "63da800000000000", - "63db800000000000", - "63dc800000000000", - "63dd800000000000", - "63de800000000000", + "63df800000000000", "63e0800000000000", - "63e1800000000000", - "63e2800000000000", + "63e3800000000000", "63e4800000000000", + "63e5800000000000", + "63e6800000000000", + "63e7800000000000", + "63e8800000000000", + "63e9800000000000", + "63ea800000000000", + "63eb800000000000", + "63ec800000000000", + "63ed800000000000", + "63ee800000000000", "63f1800000000000", "63f2800000000000", "63f3800000000000", @@ -892,7 +892,7 @@ "63f9800000000000", "63fa800000000000", "63fb800000000000", - "63fc800000000000" + "63fd800000000000" ] }, { @@ -930,216 +930,216 @@ "517ee00000000000", "517fa00000000000", "517fe00000000000", - "51c0200000000000", - "51c0600000000000", - "51c0a00000000000", - "51c0e00000000000", - "51c2600000000000", - "51c2e00000000000", - "51d5200000000000", - "51d5600000000000", - "51d5a00000000000", - "51d5e00000000000", - "51d7200000000000", - "6343200000000000", - "6346a00000000000", - "6346e00000000000", - "6347600000000000", - "6347a00000000000", - "6347e00000000000", - "6348600000000000", - "6348a00000000000", - "6348e00000000000", - "6349200000000000", - "6349600000000000", - "6349a00000000000", - "6349e00000000000", - "634a200000000000", - "634a600000000000", - "634aa00000000000", - "634ae00000000000", - "634b200000000000", - "634b600000000000", - "634ba00000000000", - "634be00000000000", - "634c200000000000", - "634c600000000000", - "634ca00000000000", - "634ce00000000000", - "634d200000000000", - "634d600000000000", - "634da00000000000", - "634de00000000000", - "634e200000000000", - "634e600000000000", - "634ea00000000000", - "634ee00000000000", - "634f200000000000", - "634f600000000000", - "634fa00000000000", - "634fe00000000000", - "6350200000000000", - "6350600000000000", - "6350a00000000000", - "6352200000000000", - "6357e00000000000", - "6358200000000000", - "6358a00000000000", - "6358e00000000000", - "635a200000000000", - "6360200000000000", - "6360600000000000", - "6360a00000000000", - "6360e00000000000", - "6361200000000000", - "6361600000000000", - "6361a00000000000", - "6361e00000000000", - "6362200000000000", - "6362600000000000", - "6362a00000000000", - "6362e00000000000", - "6363200000000000", - "6363600000000000", - "6363a00000000000", - "6363e00000000000", - "6364200000000000", - "6364600000000000", - "6364a00000000000", - "6364e00000000000", - "6365200000000000", - "6365600000000000", - "6365a00000000000", - "6365e00000000000", - "6366200000000000", - "6366600000000000", - "6366a00000000000", - "6366e00000000000", - "6367200000000000", - "6367600000000000", - "6367a00000000000", - "6367e00000000000", - "6368200000000000", - "6368600000000000", - "6368a00000000000", - "6368e00000000000", - "6369200000000000", - "6369600000000000", - "6369a00000000000", - "6369e00000000000", - "636a200000000000", - "636a600000000000", - "636aa00000000000", - "636ae00000000000", - "636b200000000000", - "636b600000000000", - "636ba00000000000", - "636be00000000000", - "636c200000000000", - "636c600000000000", - "636ca00000000000", - "636ce00000000000", - "636d200000000000", - "636d600000000000", - "636e200000000000", - "636e600000000000", - "636ee00000000000", - "6372a00000000000", - "6373200000000000", - "6373600000000000", - "6373a00000000000", - "6373e00000000000", - "6375600000000000", - "6375a00000000000", - "6375e00000000000", - "6376200000000000", - "6376600000000000", - "6376a00000000000", - "6376e00000000000", - "6377200000000000", - "6377600000000000", - "6377a00000000000", - "6377e00000000000", - "6378200000000000", - "6378600000000000", - "6378a00000000000", - "6378e00000000000", - "6379200000000000", - "6379600000000000", - "6379a00000000000", - "6379e00000000000", - "637ae00000000000", - "637b200000000000", - "637b600000000000", - "637ba00000000000", - "637be00000000000", - "637c200000000000", + "5180200000000000", + "5180600000000000", + "5180a00000000000", + "5180e00000000000", + "5181200000000000", + "5181a00000000000", + "5195200000000000", + "5195600000000000", + "5195a00000000000", + "5195e00000000000", + "5196200000000000", + "6375a00000000000", "637c600000000000", "637ca00000000000", "637ce00000000000", "637d200000000000", "637d600000000000", - "637da00000000000", - "637de00000000000", - "637e200000000000", - "637e600000000000", - "637ea00000000000", - "637ee00000000000", - "637f200000000000", - "637f600000000000", - "637fa00000000000", - "637fe00000000000", - "63a2200000000000", - "63a2a00000000000", - "63a3200000000000", - "63a3600000000000", - "63a3e00000000000", + "6380e00000000000", + "6381200000000000", + "6381600000000000", + "6381a00000000000", + "6381e00000000000", + "6382200000000000", + "6382600000000000", + "6382a00000000000", + "6382e00000000000", + "6383200000000000", + "6383600000000000", + "6383a00000000000", + "6383e00000000000", + "6384200000000000", + "6384600000000000", + "6384a00000000000", + "6384e00000000000", + "6385600000000000", + "6389600000000000", + "6389a00000000000", + "6389e00000000000", + "638a200000000000", + "638a600000000000", + "638aa00000000000", + "638ae00000000000", + "638b200000000000", + "638b600000000000", + "638ba00000000000", + "638be00000000000", + "638c200000000000", + "638c600000000000", + "638ca00000000000", + "638ce00000000000", + "638d200000000000", + "638d600000000000", + "638da00000000000", + "638de00000000000", + "638e200000000000", + "638e600000000000", + "638ea00000000000", + "638ee00000000000", + "638f200000000000", + "638f600000000000", + "638fa00000000000", + "638fe00000000000", + "6390200000000000", + "6390600000000000", + "6390a00000000000", + "6390e00000000000", + "6391200000000000", + "6391600000000000", + "6391a00000000000", + "6391e00000000000", + "6392200000000000", + "6392600000000000", + "6392a00000000000", + "6392e00000000000", + "6393200000000000", + "6393600000000000", + "6393a00000000000", + "6393e00000000000", + "6394200000000000", + "6394600000000000", + "6394a00000000000", + "6394e00000000000", + "6395200000000000", + "6395600000000000", + "6395a00000000000", + "6395e00000000000", + "6396200000000000", + "6396600000000000", + "6396a00000000000", + "6396e00000000000", + "6397200000000000", + "6397600000000000", + "6397a00000000000", + "6397e00000000000", + "6398200000000000", + "6398600000000000", + "6398a00000000000", + "6398e00000000000", + "6399200000000000", + "6399600000000000", + "6399a00000000000", + "6399e00000000000", + "639a200000000000", + "639a600000000000", + "639aa00000000000", + "639ae00000000000", + "639b200000000000", + "639b600000000000", + "639ba00000000000", + "639be00000000000", + "639c200000000000", + "639c600000000000", + "639ca00000000000", + "639ce00000000000", + "639d200000000000", + "639d600000000000", + "639da00000000000", + "639ea00000000000", + "639ee00000000000", + "63a5600000000000", + "63a7200000000000", + "63a7600000000000", + "63a7e00000000000", "63a8200000000000", - "63c0200000000000", - "63c0600000000000", - "63c0a00000000000", - "63c0e00000000000", - "63c2200000000000", - "63c2a00000000000", + "63aee00000000000", + "63af200000000000", + "63af600000000000", + "63afe00000000000", + "63b0200000000000", + "63b0600000000000", + "63b0a00000000000", + "63b0e00000000000", + "63b1200000000000", + "63b1600000000000", + "63b1a00000000000", + "63b1e00000000000", + "63b2200000000000", + "63b2600000000000", + "63b2a00000000000", + "63b2e00000000000", + "63b3200000000000", + "63b3600000000000", + "63b3a00000000000", + "63b3e00000000000", + "63b4200000000000", + "63b4600000000000", + "63b4a00000000000", + "63b4e00000000000", + "63b5200000000000", + "63b5600000000000", + "63b5e00000000000", + "63b6200000000000", + "63b6600000000000", + "63b6a00000000000", + "63b6e00000000000", + "63b7200000000000", + "63b7600000000000", + "63b7a00000000000", + "63b7e00000000000", + "63b8200000000000", + "63b8600000000000", + "63b8a00000000000", + "63b9200000000000", + "63b9600000000000", + "63bc600000000000", + "63c7e00000000000", "63c8200000000000", + "63c8600000000000", "63c8a00000000000", "63c8e00000000000", - "63c9a00000000000", - "63c9e00000000000", - "63ca200000000000", - "63ca600000000000", - "63caa00000000000", - "63cae00000000000", - "63cc200000000000", - "63cc600000000000", - "63cca00000000000", - "63cd200000000000", + "63c9600000000000", "63cd600000000000", "63cda00000000000", "63cde00000000000", + "63ce200000000000", + "63ce600000000000", + "63cea00000000000", "63cee00000000000", "63cf200000000000", "63cf600000000000", "63cfa00000000000", "63cfe00000000000", - "63dbe00000000000", - "63e0200000000000", - "63e0600000000000", - "63e0a00000000000", - "63e0e00000000000", - "63e1200000000000", - "63e1600000000000", - "63e1a00000000000", - "63e1e00000000000", - "63e2200000000000", - "63e2600000000000", - "63e2e00000000000", - "63e4200000000000", - "63e4600000000000", - "63e4a00000000000", - "63e4e00000000000", - "63e5200000000000", - "63eee00000000000" + "63d0200000000000", + "63d0600000000000", + "63d0a00000000000", + "63d0e00000000000", + "63d1200000000000", + "63d1600000000000", + "63d1a00000000000", + "63d1e00000000000", + "63d2200000000000", + "63d2600000000000", + "63d2a00000000000", + "63d3a00000000000", + "63d5200000000000", + "63d5600000000000", + "63d5a00000000000", + "63d5e00000000000", + "63d6200000000000", + "63d6600000000000", + "63d7200000000000", + "63d7600000000000", + "63d7e00000000000", + "63d9600000000000", + "63d9e00000000000", + "63da200000000000", + "63da600000000000", + "63daa00000000000", + "63dae00000000000", + "63eb200000000000" ] }, { @@ -1183,7 +1183,7 @@ ], "resolution": 3, "cells": [ - "a1e0000000000000" + "a1a0000000000000" ] }, { @@ -1226,16 +1226,16 @@ ], "resolution": 6, "cells": [ - "515d800000000000", - "515e800000000000", - "515f800000000000", - "5167800000000000", - "5168800000000000", - "516d800000000000", + "5159800000000000", + "515a800000000000", + "515b800000000000", + "5162800000000000", + "516a800000000000", + "516e800000000000", "516f800000000000", "5170800000000000", - "5171800000000000", "5172800000000000", + "5173800000000000", "5174800000000000", "5175800000000000", "5176800000000000", @@ -1248,62 +1248,53 @@ "517d800000000000", "517e800000000000", "517f800000000000", - "51c0800000000000", - "51c1800000000000", - "51c2800000000000", - "51c3800000000000", - "51d5800000000000", - "51d6800000000000", - "51d7800000000000", - "6348800000000000", - "6349800000000000", - "634a800000000000", - "634b800000000000", - "634c800000000000", - "634d800000000000", - "634e800000000000", - "634f800000000000", - "6358800000000000", - "635a800000000000", - "635b800000000000", - "635e800000000000", - "6360800000000000", - "6361800000000000", - "6362800000000000", - "6363800000000000", - "6364800000000000", - "6365800000000000", - "6366800000000000", - "6367800000000000", - "6368800000000000", - "6369800000000000", - "636a800000000000", - "636b800000000000", - "636c800000000000", - "636d800000000000", - "636e800000000000", - "636f800000000000", - "6376800000000000", - "6377800000000000", - "6379800000000000", - "637b800000000000", - "637c800000000000", - "637d800000000000", - "637e800000000000", - "637f800000000000", - "63c0800000000000", - "63c1800000000000", - "63c2800000000000", - "63c3800000000000", - "63c4800000000000", - "63c5800000000000", - "63c6800000000000", + "5180800000000000", + "5181800000000000", + "5182800000000000", + "5183800000000000", + "5195800000000000", + "5196800000000000", + "5197800000000000", + "6381800000000000", + "6382800000000000", + "638a800000000000", + "638b800000000000", + "638c800000000000", + "638d800000000000", + "638e800000000000", + "638f800000000000", + "6390800000000000", + "6391800000000000", + "6392800000000000", + "6393800000000000", + "6394800000000000", + "6395800000000000", + "6396800000000000", + "6397800000000000", + "6398800000000000", + "6399800000000000", + "639a800000000000", + "639b800000000000", + "639c800000000000", + "639d800000000000", + "639e800000000000", + "639f800000000000", + "63a1800000000000", + "63a4800000000000", + "63a5800000000000", + "63a7800000000000", + "63b0800000000000", + "63b1800000000000", + "63b2800000000000", + "63b3800000000000", + "63b4800000000000", + "63b5800000000000", + "63b6800000000000", + "63b7800000000000", "63c7800000000000", "63c8800000000000", "63c9800000000000", - "63ca800000000000", "63cb800000000000", - "63cc800000000000", "63cd800000000000", "63ce800000000000", "63cf800000000000", @@ -1322,19 +1313,28 @@ "63dc800000000000", "63dd800000000000", "63de800000000000", + "63df800000000000", "63e0800000000000", "63e1800000000000", "63e2800000000000", + "63e3800000000000", "63e4800000000000", "63e5800000000000", "63e6800000000000", + "63e7800000000000", + "63e8800000000000", + "63e9800000000000", + "63ea800000000000", + "63eb800000000000", + "63ec800000000000", + "63ed800000000000", "63ee800000000000", - "63f2800000000000", + "63f3800000000000", + "63f4800000000000", + "63f5800000000000", + "63f6800000000000", "63f7800000000000", - "63f8800000000000", - "63f9800000000000", - "63fa800000000000", - "63fb800000000000" + "63f8800000000000" ] }, { @@ -1377,16 +1377,16 @@ ], "resolution": 7, "cells": [ - "515ee00000000000", - "515f600000000000", - "515fa00000000000", - "515fe00000000000", - "5167a00000000000", - "5167e00000000000", - "5168200000000000", - "5168600000000000", - "5168a00000000000", - "5168e00000000000", + "515a600000000000", + "515aa00000000000", + "515ae00000000000", + "515b200000000000", + "5162a00000000000", + "5162e00000000000", + "5169600000000000", + "516a200000000000", + "516a600000000000", + "516aa00000000000", "516ae00000000000", "516b200000000000", "516c600000000000", @@ -1408,13 +1408,13 @@ "5170600000000000", "5170a00000000000", "5170e00000000000", - "5171200000000000", - "5171600000000000", - "5171a00000000000", - "5171e00000000000", - "5172200000000000", "5172600000000000", "5172a00000000000", + "5172e00000000000", + "5173200000000000", + "5173600000000000", + "5173a00000000000", + "5173e00000000000", "5174200000000000", "5174600000000000", "5174a00000000000", @@ -1444,139 +1444,86 @@ "517aa00000000000", "517ae00000000000", "517b200000000000", - "517b600000000000", - "517ba00000000000", - "517be00000000000", - "517c200000000000", - "517c600000000000", - "517ca00000000000", - "517ce00000000000", - "517d200000000000", - "517d600000000000", - "517da00000000000", - "517de00000000000", - "517e200000000000", - "517e600000000000", - "517ea00000000000", - "517ee00000000000", - "517f200000000000", - "517f600000000000", - "517fa00000000000", - "517fe00000000000", - "51c0200000000000", - "51c0600000000000", - "51c0a00000000000", - "51c0e00000000000", - "51c1200000000000", - "51c1600000000000", - "51c1a00000000000", - "51c1e00000000000", - "51c2200000000000", - "51c2600000000000", - "51c2a00000000000", - "51c2e00000000000", - "51c3200000000000", - "51c3600000000000", - "51c3a00000000000", - "51c3e00000000000", - "51c8200000000000", - "51c8600000000000", - "51c8a00000000000", - "51c8e00000000000", - "51c9200000000000", - "51c9600000000000", - "51c9a00000000000", - "51c9e00000000000", - "51ca200000000000", - "51ca600000000000", - "51caa00000000000", - "51cae00000000000", - "51cb200000000000", - "51cb600000000000", - "51cba00000000000", - "51cbe00000000000", - "51cce00000000000", - "51cd200000000000", - "51ce200000000000", - "51cea00000000000", - "51cee00000000000", - "51d4200000000000", - "51d4600000000000", - "51d4a00000000000", - "51d4e00000000000", - "51d5200000000000", - "51d5600000000000", - "51d5a00000000000", - "51d5e00000000000", - "51d6200000000000", - "51d6600000000000", - "51d6a00000000000", - "51d6e00000000000", - "51d7200000000000", - "51d7600000000000", - "51d7a00000000000", - "51d7e00000000000", - "634fe00000000000", - "6360200000000000", - "637de00000000000", - "637ea00000000000", - "637f200000000000", - "637f600000000000", - "637fe00000000000", - "63c0200000000000", - "63c0600000000000", - "63c1200000000000", - "63c1600000000000", - "63c1a00000000000", - "63c1e00000000000", - "63c2e00000000000", - "63c3200000000000", - "63c3a00000000000", - "63c4200000000000", - "63c4600000000000", - "63c4a00000000000", - "63c4e00000000000", - "63c5200000000000", - "63c5600000000000", - "63c5a00000000000", - "63c5e00000000000", - "63c6200000000000", - "63c6600000000000", - "63c6a00000000000", - "63c6e00000000000", - "63c7200000000000", - "63c7600000000000", - "63c7a00000000000", - "63c7e00000000000", - "63c8e00000000000", - "63c9200000000000", - "63c9600000000000", - "63c9a00000000000", - "63c9e00000000000", - "63ca200000000000", - "63ca600000000000", - "63caa00000000000", - "63cae00000000000", - "63cb200000000000", - "63cb600000000000", - "63cba00000000000", - "63cbe00000000000", - "63cc200000000000", - "63cc600000000000", - "63cca00000000000", - "63cce00000000000", - "63cd200000000000", - "63cd600000000000", - "63cda00000000000", - "63cde00000000000", - "63ce200000000000", - "63ce600000000000", - "63cea00000000000", + "517b600000000000", + "517ba00000000000", + "517be00000000000", + "517c200000000000", + "517c600000000000", + "517ca00000000000", + "517ce00000000000", + "517d200000000000", + "517d600000000000", + "517da00000000000", + "517de00000000000", + "517e200000000000", + "517e600000000000", + "517ea00000000000", + "517ee00000000000", + "517f200000000000", + "517f600000000000", + "517fa00000000000", + "517fe00000000000", + "5180200000000000", + "5180600000000000", + "5180a00000000000", + "5180e00000000000", + "5181200000000000", + "5181600000000000", + "5181a00000000000", + "5181e00000000000", + "5182200000000000", + "5182600000000000", + "5182a00000000000", + "5182e00000000000", + "5183200000000000", + "5183600000000000", + "5183a00000000000", + "5183e00000000000", + "5184200000000000", + "5184600000000000", + "5184a00000000000", + "5184e00000000000", + "5185200000000000", + "5185600000000000", + "5185a00000000000", + "5185e00000000000", + "5186200000000000", + "5186600000000000", + "5186a00000000000", + "5186e00000000000", + "5187200000000000", + "5187600000000000", + "5187a00000000000", + "5187e00000000000", + "5188200000000000", + "5188a00000000000", + "5188e00000000000", + "518ae00000000000", + "518b600000000000", + "5194200000000000", + "5194600000000000", + "5194a00000000000", + "5194e00000000000", + "5195200000000000", + "5195600000000000", + "5195a00000000000", + "5195e00000000000", + "5196200000000000", + "5196600000000000", + "5196a00000000000", + "5196e00000000000", + "5197200000000000", + "5197600000000000", + "5197a00000000000", + "5197e00000000000", + "638de00000000000", + "638e200000000000", + "638f600000000000", + "638fa00000000000", + "638fe00000000000", + "6396a00000000000", + "63b3e00000000000", "63cee00000000000", - "63cf200000000000", - "63cf600000000000", - "63cfa00000000000", - "63cfe00000000000", "63d0200000000000", "63d0600000000000", "63d0a00000000000", @@ -1606,21 +1553,12 @@ "63d6a00000000000", "63d6e00000000000", "63d7200000000000", - "63d7600000000000", - "63d7a00000000000", - "63d7e00000000000", - "63d8200000000000", - "63d8600000000000", "63d8a00000000000", "63d8e00000000000", "63d9200000000000", - "63d9600000000000", - "63d9a00000000000", - "63d9e00000000000", - "63da200000000000", - "63da600000000000", "63daa00000000000", "63dae00000000000", + "63db200000000000", "63db600000000000", "63dba00000000000", "63dbe00000000000", @@ -1630,22 +1568,84 @@ "63dce00000000000", "63dd200000000000", "63dd600000000000", + "63dda00000000000", "63dde00000000000", "63de200000000000", + "63de600000000000", + "63dea00000000000", + "63dee00000000000", + "63df200000000000", + "63df600000000000", + "63dfa00000000000", + "63dfe00000000000", + "63e0200000000000", + "63e0600000000000", + "63e0a00000000000", + "63e0e00000000000", "63e1200000000000", - "63f8e00000000000", - "63f9200000000000", - "63f9600000000000", - "63f9a00000000000", - "63f9e00000000000", - "63fa200000000000", - "63fa600000000000", - "63faa00000000000", - "63fae00000000000", - "63fb200000000000", - "63fb600000000000", - "63fba00000000000", - "63fbe00000000000" + "63e1600000000000", + "63e1a00000000000", + "63e1e00000000000", + "63e2200000000000", + "63e2600000000000", + "63e2a00000000000", + "63e2e00000000000", + "63e3200000000000", + "63e3600000000000", + "63e3a00000000000", + "63e3e00000000000", + "63e4200000000000", + "63e4600000000000", + "63e4a00000000000", + "63e4e00000000000", + "63e5200000000000", + "63e5600000000000", + "63e5a00000000000", + "63e5e00000000000", + "63e6200000000000", + "63e6600000000000", + "63e6a00000000000", + "63e6e00000000000", + "63e7200000000000", + "63e7600000000000", + "63e7a00000000000", + "63e7e00000000000", + "63e8200000000000", + "63e8600000000000", + "63e8a00000000000", + "63e8e00000000000", + "63e9200000000000", + "63e9600000000000", + "63e9a00000000000", + "63e9e00000000000", + "63ea200000000000", + "63ea600000000000", + "63eaa00000000000", + "63eae00000000000", + "63eb200000000000", + "63eb600000000000", + "63ebe00000000000", + "63ec200000000000", + "63ec600000000000", + "63eca00000000000", + "63ece00000000000", + "63ed200000000000", + "63eda00000000000", + "63ede00000000000", + "63ee200000000000", + "63f4200000000000", + "63f5200000000000", + "63f5600000000000", + "63f5a00000000000", + "63f5e00000000000", + "63f6200000000000", + "63f6600000000000", + "63f6a00000000000", + "63f6e00000000000", + "63f7200000000000", + "63f7600000000000", + "63f7a00000000000", + "63f7e00000000000" ] }, { @@ -1688,8 +1688,8 @@ ], "resolution": 6, "cells": [ - "6361800000000000", - "6364800000000000" + "6397800000000000", + "6398800000000000" ] }, { @@ -1716,60 +1716,60 @@ ], "resolution": 9, "cells": [ - "634d320000000000", - "634d360000000000", - "634d3a0000000000", - "634d3e0000000000", - "634d420000000000", - "634d460000000000", - "634d4a0000000000", - "634d4e0000000000", - "634d560000000000", - "634d620000000000", - "634d660000000000", - "634d6a0000000000", - "634f720000000000", - "634f760000000000", - "634f7a0000000000", - "634f7e0000000000", - "634f9a0000000000", - "634fa20000000000", - "634fa60000000000", - "634faa0000000000", - "634fae0000000000", - "634fb20000000000", - "634fb60000000000", - "634fba0000000000", - "634fbe0000000000", - "6360420000000000", - "6360460000000000", - "63604e0000000000", - "6360520000000000", - "6360560000000000", - "63605a0000000000", - "6360720000000000", - "6360760000000000", - "63607e0000000000", - "6361020000000000", - "6361060000000000", - "63610a0000000000", - "63610e0000000000", - "6361120000000000", - "6361160000000000", - "63611a0000000000", - "63611e0000000000", - "6361220000000000", - "6361260000000000", - "63612a0000000000", - "63612e0000000000", - "6361320000000000", - "6361360000000000", - "63613a0000000000", - "63613e0000000000", - "6361420000000000", - "6361460000000000", - "63614e0000000000", - "6364be0000000000" + "6396c20000000000", + "6396ca0000000000", + "6396ce0000000000", + "6396d20000000000", + "6396d60000000000", + "6396da0000000000", + "6396f20000000000", + "6396f60000000000", + "6396fe0000000000", + "6397020000000000", + "6397060000000000", + "63970a0000000000", + "63970e0000000000", + "6397120000000000", + "6397160000000000", + "63971a0000000000", + "63971e0000000000", + "6397220000000000", + "6397260000000000", + "63972a0000000000", + "63972e0000000000", + "6397320000000000", + "6397360000000000", + "63973a0000000000", + "63973e0000000000", + "6397420000000000", + "6397460000000000", + "63974a0000000000", + "63986a0000000000", + "63b2320000000000", + "63b2360000000000", + "63b23a0000000000", + "63b23e0000000000", + "63b2420000000000", + "63b2460000000000", + "63b24a0000000000", + "63b24e0000000000", + "63b2520000000000", + "63b2560000000000", + "63b25e0000000000", + "63b26a0000000000", + "63b35e0000000000", + "63b3620000000000", + "63b3660000000000", + "63b36a0000000000", + "63b36e0000000000", + "63b3720000000000", + "63b3760000000000", + "63b37a0000000000", + "63b37e0000000000", + "63b3820000000000", + "63b3860000000000", + "63b38a0000000000", + "63b38e0000000000" ] }, { @@ -1796,64 +1796,64 @@ ], "resolution": 10, "cells": [ - "26105b8000000000", - "2610658000000000", - "2610668000000000", - "2610678000000000", - "2610688000000000", - "2610698000000000", - "26106a8000000000", - "26106b8000000000", - "26106c8000000000", - "26106d8000000000", - "26106e8000000000", - "26106f8000000000", - "2610708000000000", - "2610718000000000", - "2610728000000000", - "2610738000000000", - "2610748000000000", - "2610758000000000", - "2610768000000000", - "2610778000000000", - "2610788000000000", - "2610798000000000", - "26107a8000000000", - "26107b8000000000", - "26107c8000000000", - "26107d8000000000", - "26107e8000000000", - "26107f8000000000", - "2610a08000000000", - "2610a28000000000", - "2610a38000000000", - "2610a68000000000", - "2610a78000000000", - "2610a88000000000", - "2610a98000000000", - "2610aa8000000000", - "2610ab8000000000", - "2610c08000000000", - "26114d8000000000", - "26114f8000000000", - "2611508000000000", - "2611528000000000", - "2612178000000000", - "26121a8000000000", - "26121b8000000000", - "26121c8000000000", - "26121d8000000000", - "26121e8000000000", - "26121f8000000000", - "2612278000000000", - "2612288000000000", - "2612298000000000", - "26122a8000000000", - "26122b8000000000", - "26122c8000000000", - "26122d8000000000", - "26122e8000000000", - "26122f8000000000" + "264d4e8000000000", + "264d4f8000000000", + "264d508000000000", + "264d538000000000", + "264ed48000000000", + "264ed88000000000", + "264ed98000000000", + "264eda8000000000", + "264edb8000000000", + "264edc8000000000", + "264edd8000000000", + "264ede8000000000", + "264edf8000000000", + "264ee08000000000", + "264ee18000000000", + "264ee28000000000", + "264ee38000000000", + "264ee48000000000", + "264ee78000000000", + "264ee88000000000", + "264f148000000000", + "264f158000000000", + "264f168000000000", + "264f178000000000", + "264f188000000000", + "264f198000000000", + "264f1c8000000000", + "264f1d8000000000", + "264f1f8000000000", + "264f448000000000", + "264f658000000000", + "264f668000000000", + "264f678000000000", + "264f688000000000", + "264f698000000000", + "264f6a8000000000", + "264f6b8000000000", + "264f6c8000000000", + "264f6d8000000000", + "264f6e8000000000", + "264f6f8000000000", + "264f708000000000", + "264f718000000000", + "264f728000000000", + "264f738000000000", + "264f748000000000", + "264f758000000000", + "264f768000000000", + "264f778000000000", + "264f788000000000", + "264f798000000000", + "264f7a8000000000", + "264f7b8000000000", + "264f7c8000000000", + "264f7d8000000000", + "264f7e8000000000", + "264f7f8000000000", + "264f808000000000" ] }, { @@ -1967,28 +1967,28 @@ "c0aa00000000000", "c0ae00000000000", "c0b200000000000", - "5144200000000000", - "5144600000000000", - "5144a00000000000", - "5144e00000000000", - "5145a00000000000", - "5146200000000000", - "5146600000000000", - "5146a00000000000", - "5146e00000000000", - "5147200000000000", - "5147600000000000", - "5147a00000000000", - "5147e00000000000", + "5148600000000000", + "5149200000000000", + "5149600000000000", + "5149a00000000000", + "5149e00000000000", + "514a200000000000", + "514a600000000000", + "514aa00000000000", + "514ae00000000000", + "514b200000000000", + "514b600000000000", + "514ba00000000000", + "514be00000000000", "514c600000000000", - "514ce00000000000", + "514d200000000000", "514d600000000000", + "514da00000000000", + "514de00000000000", "514e200000000000", - "514e600000000000", - "514ea00000000000", "514ee00000000000", "514f200000000000", - "5154600000000000", + "5154a00000000000", "5154e00000000000", "5155200000000000", "5155600000000000", @@ -2002,109 +2002,109 @@ "5157600000000000", "5157a00000000000", "5157e00000000000", + "5158200000000000", + "5158600000000000", + "5158a00000000000", + "5158e00000000000", "5159200000000000", - "515c200000000000", - "515c600000000000", - "515ca00000000000", + "5159600000000000", + "5159a00000000000", + "5159e00000000000", + "515a200000000000", + "515a600000000000", + "515aa00000000000", + "515ae00000000000", + "515ba00000000000", "515ce00000000000", - "515d200000000000", - "515d600000000000", - "515da00000000000", - "515de00000000000", - "515e600000000000", - "515f200000000000", - "515f600000000000", - "515fa00000000000", - "515fe00000000000", - "516b600000000000", + "516ba00000000000", "516c200000000000", - "5170200000000000", - "5175600000000000", - "5175e00000000000", - "5190200000000000", - "5195600000000000", - "5195e00000000000", - "5197200000000000", - "5197e00000000000", - "51c5200000000000", - "51c6200000000000", - "51c6600000000000", - "51c6a00000000000", - "51c6e00000000000", - "51c7a00000000000", + "5173e00000000000", + "5174200000000000", + "5174e00000000000", + "5189600000000000", + "5189a00000000000", + "5189e00000000000", + "518a200000000000", + "518a600000000000", + "518aa00000000000", + "518ba00000000000", + "518be00000000000", + "518c600000000000", + "518d200000000000", + "518d600000000000", + "518da00000000000", + "518de00000000000", + "518f200000000000", + "5190a00000000000", + "5190e00000000000", + "5191200000000000", + "5191a00000000000", + "5191e00000000000", + "51b8a00000000000", + "51ba600000000000", + "51bb600000000000", + "51bbe00000000000", + "51ca600000000000", + "51cae00000000000", + "51cb200000000000", + "51cbe00000000000", "51cc200000000000", - "51cca00000000000", - "51cd600000000000", - "51cda00000000000", - "51cde00000000000", - "51cf200000000000", - "51cf600000000000", - "51cfe00000000000", - "51d0600000000000", - "51d0e00000000000", - "51d2200000000000", - "51d2600000000000", - "51d2e00000000000", - "51e4600000000000", - "51e4a00000000000", - "51e5a00000000000", - "51e7600000000000", - "636a200000000000", - "63c0a00000000000", - "63c1a00000000000", - "63c1e00000000000", - "63c2e00000000000", - "63c4200000000000", - "63c5200000000000", - "63c5600000000000", - "63c5a00000000000", - "63c5e00000000000", - "63c6200000000000", - "63c6600000000000", - "63c7200000000000", - "63c7600000000000", - "63d0200000000000", - "63d0600000000000", - "63d0a00000000000", - "63d0e00000000000", - "63d1200000000000", - "63d1600000000000", - "63d1a00000000000", - "63d1e00000000000", - "63d2200000000000", - "63d2600000000000", - "63d2a00000000000", - "63d2e00000000000", - "63d3200000000000", - "63d3600000000000", - "63d3a00000000000", - "63d3e00000000000", - "63d4200000000000", - "63d4600000000000", - "63d4a00000000000", - "63d4e00000000000", - "63d5200000000000", - "63d5600000000000", - "63d5a00000000000", - "63d5e00000000000", - "63d6200000000000", - "63d6600000000000", - "63d6a00000000000", - "63d6e00000000000", - "63d7200000000000", - "63d7600000000000", - "63d7a00000000000", - "63dc600000000000", - "63dce00000000000", + "6390600000000000", + "63d9200000000000", + "63da600000000000", + "63dba00000000000", + "63dbe00000000000", + "63dc200000000000", "63dd200000000000", + "63dd600000000000", + "63dda00000000000", + "63dde00000000000", + "63de200000000000", + "63de600000000000", + "63df200000000000", + "63df600000000000", + "63e0200000000000", + "63e0600000000000", + "63e0a00000000000", + "63e0e00000000000", + "63e1200000000000", + "63e1600000000000", + "63e1a00000000000", + "63e1e00000000000", + "63e2200000000000", + "63e2600000000000", + "63e2a00000000000", + "63e2e00000000000", + "63e3200000000000", + "63e3600000000000", + "63e3a00000000000", + "63e3e00000000000", + "63e4200000000000", + "63e4600000000000", + "63e4a00000000000", + "63e4e00000000000", + "63e5200000000000", + "63e5600000000000", + "63e5a00000000000", + "63e5e00000000000", + "63e6200000000000", + "63e6600000000000", + "63e6a00000000000", + "63e6e00000000000", + "63e7200000000000", + "63e7600000000000", + "63e7a00000000000", + "63eca00000000000", + "63ece00000000000", + "63ed200000000000", "63f1200000000000", "63f1600000000000", "63f1a00000000000", "63f1e00000000000", + "63f2200000000000", "63f2600000000000", "63f2a00000000000", "63f2e00000000000", - "63f3200000000000", "63f3600000000000", "63f3a00000000000", "63f3e00000000000", @@ -2209,15 +2209,15 @@ "643f200000000000", "643f600000000000", "643fa00000000000", - "6445e00000000000", - "6a81e00000000000", + "6440a00000000000", + "6a81200000000000", + "6a84200000000000", "6a84600000000000", + "6a84a00000000000", + "6a84e00000000000", "6a85200000000000", - "6a85600000000000", - "6a85a00000000000", "6a85e00000000000", - "6a86a00000000000", - "6a86e00000000000", + "6a86600000000000", "6a87200000000000", "6a87600000000000", "6a87a00000000000", @@ -2261,14 +2261,14 @@ "6a98a00000000000", "6a98e00000000000", "6a99200000000000", - "6a99a00000000000", + "6a99600000000000", "6a99e00000000000", "6a9a600000000000", - "6a9aa00000000000", "6a9ba00000000000", + "6a9be00000000000", "6a9c200000000000", - "6a9fa00000000000", - "6a9fe00000000000", + "6a9ce00000000000", + "6a9da00000000000", "6aa2a00000000000", "6aa8200000000000", "6aa8600000000000", @@ -2366,9 +2366,9 @@ ], "resolution": 30, "cells": [ - "a2bdf362a699bdad", - "a2bdf362a699bdaf", - "a2bdf362a699bdc7" + "a2b61367f73ebdbd", + "a2b61367f73ebdc1", + "a2b61367f73ebdc3" ] }, { @@ -2416,11 +2416,11 @@ "c00800000000000", "c02800000000000", "c03800000000000", - "5141800000000000", + "5143800000000000", "5144800000000000", "5145800000000000", "5146800000000000", - "5147800000000000", + "5148800000000000", "5149800000000000", "514a800000000000", "514b800000000000", @@ -2465,109 +2465,109 @@ "5172800000000000", "5173800000000000", "5174800000000000", - "5175800000000000", + "5177800000000000", "517b800000000000", - "5190800000000000", - "51c0800000000000", - "51c1800000000000", - "51c2800000000000", - "51c3800000000000", - "51c8800000000000", - "51c9800000000000", - "51ca800000000000", - "51cb800000000000", - "51cd800000000000", - "51ce800000000000", - "51cf800000000000", - "51d4800000000000", - "51d5800000000000", - "51d6800000000000", - "51d7800000000000", - "51d9800000000000", - "51dc800000000000", - "51dd800000000000", - "51df800000000000", - "6346800000000000", - "6347800000000000", - "6348800000000000", - "6349800000000000", - "634a800000000000", - "634b800000000000", - "634c800000000000", - "634d800000000000", - "634e800000000000", - "634f800000000000", - "6350800000000000", - "6357800000000000", - "6358800000000000", - "6359800000000000", - "635a800000000000", - "635b800000000000", - "635d800000000000", - "635e800000000000", - "635f800000000000", - "6360800000000000", - "6361800000000000", - "6362800000000000", - "6363800000000000", - "6364800000000000", - "6365800000000000", - "6366800000000000", - "6367800000000000", - "6368800000000000", - "6369800000000000", - "636a800000000000", - "636b800000000000", - "636c800000000000", - "636d800000000000", - "636e800000000000", - "636f800000000000", + "5180800000000000", + "5181800000000000", + "5182800000000000", + "5183800000000000", + "5184800000000000", + "5185800000000000", + "5186800000000000", + "5187800000000000", + "5188800000000000", + "5189800000000000", + "518a800000000000", + "5194800000000000", + "5195800000000000", + "5196800000000000", + "5197800000000000", + "5198800000000000", + "519c800000000000", + "519d800000000000", + "519f800000000000", + "51cc800000000000", "6370800000000000", - "6371800000000000", - "6372800000000000", - "6373800000000000", "6374800000000000", "6375800000000000", "6376800000000000", - "6377800000000000", - "6378800000000000", - "6379800000000000", - "637a800000000000", - "637b800000000000", "637c800000000000", "637d800000000000", - "637e800000000000", + "637f800000000000", + "6380800000000000", + "6381800000000000", + "6382800000000000", + "6383800000000000", + "6384800000000000", + "6385800000000000", + "6386800000000000", + "6387800000000000", + "6388800000000000", + "6389800000000000", + "638a800000000000", + "638b800000000000", + "638c800000000000", + "638d800000000000", + "638e800000000000", + "6390800000000000", + "6391800000000000", + "6392800000000000", + "6393800000000000", + "6394800000000000", + "6395800000000000", + "6396800000000000", + "6397800000000000", + "6398800000000000", + "6399800000000000", + "639a800000000000", + "639b800000000000", + "639c800000000000", + "639d800000000000", + "639e800000000000", + "639f800000000000", "63a0800000000000", + "63a1800000000000", "63a2800000000000", - "63a3800000000000", + "63a4800000000000", + "63a5800000000000", + "63a6800000000000", + "63a7800000000000", "63a8800000000000", - "63a9800000000000", - "63aa800000000000", - "63ae800000000000", + "63af800000000000", + "63b0800000000000", + "63b1800000000000", + "63b2800000000000", + "63b3800000000000", + "63b4800000000000", + "63b5800000000000", + "63b6800000000000", + "63b7800000000000", + "63b8800000000000", + "63b9800000000000", + "63c7800000000000", "63c8800000000000", - "63ca800000000000", - "63cb800000000000", - "63cc800000000000", + "63c9800000000000", "63cd800000000000", "63ce800000000000", "63cf800000000000", + "63d0800000000000", + "63d1800000000000", + "63d2800000000000", + "63d3800000000000", + "63d4800000000000", "63d5800000000000", - "63d6800000000000", "63d7800000000000", - "63d8800000000000", - "63d9800000000000", - "63da800000000000", - "63db800000000000", - "63dc800000000000", - "63dd800000000000", - "63de800000000000", - "63df800000000000", - "63e0800000000000", - "63e1800000000000", - "63e2800000000000", - "63e4800000000000", "63e5800000000000", + "63e6800000000000", + "63e7800000000000", + "63e8800000000000", + "63e9800000000000", + "63ea800000000000", + "63eb800000000000", + "63ec800000000000", + "63ed800000000000", "63ee800000000000", + "63ef800000000000", "63f1800000000000", "63f2800000000000", "63f3800000000000", @@ -2675,11 +2675,18 @@ "5182000000000000", "5186000000000000", "518a000000000000", + "518e000000000000", "5192000000000000", "5196000000000000", "519a000000000000", "519e000000000000", "51a2000000000000", + "51a6000000000000", + "51aa000000000000", + "51ae000000000000", + "51b6000000000000", + "51ba000000000000", + "51be000000000000", "51c2000000000000", "51c6000000000000", "51ca000000000000", @@ -2687,29 +2694,26 @@ "51d2000000000000", "51d6000000000000", "51da000000000000", - "51de000000000000", - "51e2000000000000", - "51e6000000000000", - "51ea000000000000", - "51f2000000000000", - "51f6000000000000", - "51fa000000000000", - "51fe000000000000", - "6136000000000000", + "51ee000000000000", + "613a000000000000", "613e000000000000", "6142000000000000", - "614a000000000000", + "6146000000000000", + "6312000000000000", + "6316000000000000", + "631a000000000000", "631e000000000000", - "6332000000000000", - "6336000000000000", - "633a000000000000", - "633e000000000000", - "6342000000000000", + "6322000000000000", "6346000000000000", "634a000000000000", + "634e000000000000", "6352000000000000", - "6356000000000000", + "635a000000000000", "635e000000000000", + "6362000000000000", + "6366000000000000", + "636a000000000000", + "636e000000000000", "6372000000000000", "6376000000000000", "637a000000000000", @@ -2717,14 +2721,10 @@ "6382000000000000", "6386000000000000", "638a000000000000", - "6396000000000000", - "639a000000000000", - "639e000000000000", + "638e000000000000", "63a2000000000000", - "63a6000000000000", "63aa000000000000", "63ae000000000000", - "63b2000000000000", "63b6000000000000", "63ba000000000000", "63be000000000000", @@ -2741,7 +2741,7 @@ "63ea000000000000", "63ee000000000000", "63f2000000000000", - "63f6000000000000", + "63fa000000000000", "63fe000000000000", "6402000000000000", "6406000000000000", @@ -2820,35 +2820,35 @@ "5176000000000000", "517a000000000000", "517e000000000000", - "51c2000000000000", - "51ca000000000000", - "51ce000000000000", - "51d6000000000000", - "51de000000000000", - "634a000000000000", - "634e000000000000", - "6356000000000000", - "635a000000000000", - "635e000000000000", - "6362000000000000", - "6366000000000000", - "636a000000000000", - "636e000000000000", - "6372000000000000", + "5182000000000000", + "5186000000000000", + "518a000000000000", + "5196000000000000", + "519e000000000000", "6376000000000000", - "637a000000000000", "637e000000000000", + "6382000000000000", + "6386000000000000", + "638a000000000000", + "638e000000000000", + "6392000000000000", + "6396000000000000", + "639a000000000000", + "639e000000000000", "63a2000000000000", + "63a6000000000000", "63aa000000000000", - "63c2000000000000", - "63c6000000000000", - "63ca000000000000", + "63b2000000000000", + "63b6000000000000", "63ce000000000000", "63d2000000000000", "63d6000000000000", "63da000000000000", "63de000000000000", "63e2000000000000", + "63e6000000000000", + "63ea000000000000", + "63ee000000000000", "63f2000000000000", "63f6000000000000", "63fa000000000000", @@ -2905,11 +2905,11 @@ ], "resolution": 6, "cells": [ - "5141800000000000", + "5143800000000000", "5144800000000000", "5145800000000000", "5146800000000000", - "5147800000000000", + "5148800000000000", "5149800000000000", "514a800000000000", "514b800000000000", @@ -2921,10 +2921,10 @@ "5151800000000000", "5152800000000000", "5153800000000000", - "5158800000000000", - "515a800000000000", "515b800000000000", + "515d800000000000", "515e800000000000", + "515f800000000000", "5160800000000000", "5161800000000000", "5162800000000000", @@ -2957,95 +2957,95 @@ "517d800000000000", "517e800000000000", "517f800000000000", - "5190800000000000", - "51c0800000000000", - "51c1800000000000", - "51c2800000000000", - "51c3800000000000", - "51c8800000000000", - "51c9800000000000", - "51ca800000000000", - "51cb800000000000", - "51cd800000000000", - "51ce800000000000", - "51cf800000000000", - "51d9800000000000", - "51dd800000000000", - "51df800000000000", - "6347800000000000", - "6348800000000000", - "6349800000000000", - "634a800000000000", - "634b800000000000", - "634c800000000000", - "634d800000000000", - "634e800000000000", - "634f800000000000", - "6350800000000000", - "6357800000000000", - "6358800000000000", - "6359800000000000", - "635a800000000000", - "635b800000000000", - "635d800000000000", - "635e800000000000", - "635f800000000000", - "6360800000000000", - "6361800000000000", - "6362800000000000", - "6363800000000000", - "6364800000000000", - "6365800000000000", - "6366800000000000", - "6367800000000000", - "6368800000000000", - "6369800000000000", - "636a800000000000", - "636b800000000000", - "636c800000000000", - "636d800000000000", - "636e800000000000", - "636f800000000000", + "5180800000000000", + "5181800000000000", + "5182800000000000", + "5183800000000000", + "5184800000000000", + "5185800000000000", + "5186800000000000", + "5187800000000000", + "5188800000000000", + "5189800000000000", + "518a800000000000", + "5198800000000000", + "519d800000000000", + "519f800000000000", + "51cc800000000000", "6370800000000000", - "6377800000000000", - "6378800000000000", - "6379800000000000", - "637a800000000000", - "637b800000000000", + "6374800000000000", + "6375800000000000", + "6376800000000000", "637c800000000000", + "637d800000000000", "637f800000000000", + "6380800000000000", + "6381800000000000", + "6382800000000000", + "6383800000000000", + "6386800000000000", + "638b800000000000", + "638c800000000000", + "638f800000000000", + "6390800000000000", + "6391800000000000", + "6392800000000000", + "6393800000000000", + "6394800000000000", + "6395800000000000", + "6396800000000000", + "6397800000000000", + "6398800000000000", + "6399800000000000", + "639a800000000000", + "639b800000000000", + "639c800000000000", + "639d800000000000", + "639e800000000000", + "639f800000000000", "63a0800000000000", + "63a1800000000000", "63a2800000000000", - "63a3800000000000", + "63a4800000000000", + "63a5800000000000", + "63a6800000000000", + "63a7800000000000", "63a8800000000000", - "63a9800000000000", - "63aa800000000000", - "63ae800000000000", - "63c0800000000000", - "63c1800000000000", - "63c2800000000000", - "63c3800000000000", - "63c4800000000000", - "63c5800000000000", - "63c6800000000000", - "63c7800000000000", + "63af800000000000", + "63b0800000000000", + "63b1800000000000", + "63b2800000000000", + "63b3800000000000", + "63b4800000000000", + "63b5800000000000", + "63b6800000000000", + "63b7800000000000", + "63b8800000000000", "63c8800000000000", - "63c9800000000000", - "63ca800000000000", - "63cb800000000000", - "63cc800000000000", "63cd800000000000", "63ce800000000000", "63cf800000000000", + "63d0800000000000", "63d1800000000000", "63d2800000000000", "63d3800000000000", + "63d4800000000000", + "63d5800000000000", + "63d6800000000000", + "63d7800000000000", "63d8800000000000", + "63d9800000000000", + "63da800000000000", "63db800000000000", - "63e0800000000000", + "63dc800000000000", + "63dd800000000000", + "63de800000000000", + "63df800000000000", "63e1800000000000", "63e2800000000000", - "63e4800000000000" + "63e3800000000000", + "63e8800000000000", + "63eb800000000000" ] }, { @@ -3090,39 +3090,39 @@ ], "resolution": 6, "cells": [ - "515f800000000000", - "5167800000000000", - "5168800000000000", + "515a800000000000", + "5162800000000000", + "516a800000000000", "516b800000000000", "5170800000000000", - "5171800000000000", "5172800000000000", - "5190800000000000", - "5195800000000000", - "51c4800000000000", - "51c8800000000000", - "51c9800000000000", - "51cd800000000000", - "51cf800000000000", - "51d8800000000000", - "51d9800000000000", - "51da800000000000", - "51dc800000000000", - "634f800000000000", - "6360800000000000", - "6362800000000000", - "6366800000000000", - "6369800000000000", - "637c800000000000", - "637e800000000000", - "63ca800000000000", - "63ce800000000000", + "5173800000000000", + "5184800000000000", + "5185800000000000", + "5189800000000000", + "518a800000000000", + "518e800000000000", + "5198800000000000", + "5199800000000000", + "519a800000000000", + "519c800000000000", + "51cb800000000000", + "51cc800000000000", + "638c800000000000", + "638d800000000000", + "6392800000000000", + "6395800000000000", + "6396800000000000", + "639a800000000000", + "63b3800000000000", + "63d3800000000000", "63d5800000000000", - "63d6800000000000", - "63d7800000000000", - "63d8800000000000", - "63f9800000000000", - "63fa800000000000" + "63e5800000000000", + "63e6800000000000", + "63e7800000000000", + "63e8800000000000", + "63f5800000000000", + "63f7800000000000" ] }, { @@ -3205,13 +3205,13 @@ "c0c600000000000", "c2fe00000000000", "c30200000000000", - "5136600000000000", - "5136a00000000000", - "5136e00000000000", - "5137200000000000", - "5137600000000000", - "5137a00000000000", - "513ae00000000000", + "5132600000000000", + "5132a00000000000", + "5132e00000000000", + "5133200000000000", + "5133600000000000", + "5133a00000000000", + "5134e00000000000", "513c600000000000", "513ca00000000000", "513ce00000000000", @@ -3407,11 +3407,11 @@ "516c600000000000", "516ca00000000000", "516ce00000000000", + "516d200000000000", "516d600000000000", "516da00000000000", "516de00000000000", "516e200000000000", - "516e600000000000", "516ea00000000000", "516ee00000000000", "516f200000000000", @@ -3439,52 +3439,27 @@ "5174a00000000000", "5174e00000000000", "5175200000000000", - "5175600000000000", - "5175a00000000000", - "5175e00000000000", - "5176200000000000", - "5176600000000000", - "5176a00000000000", - "5177200000000000", - "5178200000000000", - "5178600000000000", - "5178a00000000000", - "5178e00000000000", - "5179200000000000", - "5179600000000000", - "5180200000000000", - "5180600000000000", - "5180a00000000000", - "5180e00000000000", - "5181200000000000", - "5181600000000000", - "5181a00000000000", - "5181e00000000000", - "5182200000000000", - "5182600000000000", - "5182a00000000000", - "5182e00000000000", - "5183200000000000", - "5183600000000000", - "5183a00000000000", - "5183e00000000000", + "5176600000000000", + "5176a00000000000", + "5176e00000000000", + "5177200000000000", + "5177600000000000", + "5177a00000000000", + "5177e00000000000", + "5178200000000000", + "5178600000000000", + "5178a00000000000", + "5178e00000000000", + "5179200000000000", + "5179600000000000", "5184200000000000", "5184600000000000", "5184a00000000000", - "5184e00000000000", "5185200000000000", "5185600000000000", "5185a00000000000", "5185e00000000000", - "5186200000000000", - "5186600000000000", - "5186a00000000000", - "5186e00000000000", - "5187200000000000", - "5187600000000000", "5187a00000000000", - "5187e00000000000", - "5188200000000000", "5188600000000000", "5188a00000000000", "5188e00000000000", @@ -3497,12 +3472,18 @@ "518aa00000000000", "518ae00000000000", "518b200000000000", + "518b600000000000", "518ba00000000000", + "518be00000000000", + "518c200000000000", "518c600000000000", + "518ca00000000000", + "518ce00000000000", "518d200000000000", "518d600000000000", "518da00000000000", "518de00000000000", + "518e200000000000", "518e600000000000", "518ea00000000000", "518ee00000000000", @@ -3527,21 +3508,6 @@ "5193a00000000000", "5193e00000000000", "5194200000000000", - "5194600000000000", - "5194a00000000000", - "5194e00000000000", - "5195200000000000", - "5195600000000000", - "5195a00000000000", - "5195e00000000000", - "5196200000000000", - "5196600000000000", - "5196a00000000000", - "5196e00000000000", - "5197200000000000", - "5197600000000000", - "5197a00000000000", - "5197e00000000000", "5198200000000000", "5198600000000000", "5198a00000000000", @@ -3559,11 +3525,6 @@ "519ba00000000000", "519be00000000000", "519c200000000000", - "519c600000000000", - "519ca00000000000", - "519ce00000000000", - "519d200000000000", - "519d600000000000", "519da00000000000", "519de00000000000", "519e200000000000", @@ -3578,22 +3539,122 @@ "51a0600000000000", "51a0a00000000000", "51a0e00000000000", + "51a1200000000000", + "51a1600000000000", + "51a1a00000000000", + "51a1e00000000000", "51a2200000000000", "51a2600000000000", "51a2a00000000000", "51a2e00000000000", + "51a3200000000000", "51a3600000000000", "51a3a00000000000", "51a3e00000000000", + "51a4200000000000", + "51a4600000000000", + "51a4a00000000000", + "51a4e00000000000", + "51a5200000000000", + "51a5600000000000", + "51a5a00000000000", + "51a5e00000000000", + "51a6200000000000", + "51a6600000000000", + "51a6a00000000000", + "51a6e00000000000", + "51a7200000000000", + "51a7600000000000", + "51a7a00000000000", + "51a7e00000000000", "51a8200000000000", + "51a8600000000000", + "51a8a00000000000", + "51a8e00000000000", + "51a9200000000000", + "51a9600000000000", + "51a9a00000000000", + "51a9e00000000000", + "51aa200000000000", + "51aa600000000000", + "51aaa00000000000", + "51aae00000000000", + "51ab200000000000", + "51ab600000000000", + "51aba00000000000", + "51abe00000000000", + "51ac200000000000", + "51ac600000000000", + "51aca00000000000", + "51ad600000000000", + "51ada00000000000", + "51ade00000000000", + "51ae200000000000", + "51ae600000000000", + "51aea00000000000", + "51aee00000000000", + "51af200000000000", + "51af600000000000", + "51afa00000000000", + "51afe00000000000", + "51b0200000000000", + "51b0a00000000000", + "51b0e00000000000", + "51b1200000000000", + "51b6200000000000", + "51b6600000000000", + "51b7200000000000", + "51b7600000000000", + "51b7a00000000000", + "51b7e00000000000", + "51b8200000000000", + "51b8600000000000", + "51b8a00000000000", + "51b8e00000000000", + "51b9200000000000", + "51b9600000000000", + "51b9a00000000000", + "51b9e00000000000", + "51ba200000000000", + "51ba600000000000", + "51baa00000000000", + "51bae00000000000", + "51bb200000000000", + "51bb600000000000", + "51bba00000000000", + "51bbe00000000000", + "51bc200000000000", + "51bc600000000000", + "51bca00000000000", + "51bce00000000000", "51bd200000000000", + "51bd600000000000", "51bda00000000000", "51bde00000000000", + "51be200000000000", + "51be600000000000", "51bea00000000000", + "51bee00000000000", "51bf200000000000", "51bf600000000000", "51bfa00000000000", "51bfe00000000000", + "51c0200000000000", + "51c0600000000000", + "51c0a00000000000", + "51c0e00000000000", + "51c1200000000000", + "51c1600000000000", + "51c1a00000000000", + "51c1e00000000000", + "51c2200000000000", + "51c2600000000000", + "51c2a00000000000", + "51c2e00000000000", + "51c3200000000000", + "51c3600000000000", + "51c3a00000000000", + "51c3e00000000000", "51c4200000000000", "51c4600000000000", "51c4a00000000000", @@ -3613,11 +3674,19 @@ "51c8200000000000", "51c8600000000000", "51c8a00000000000", + "51c8e00000000000", "51c9200000000000", "51c9600000000000", "51c9a00000000000", "51c9e00000000000", + "51ca200000000000", + "51ca600000000000", + "51caa00000000000", + "51cae00000000000", + "51cb200000000000", "51cb600000000000", + "51cba00000000000", + "51cbe00000000000", "51cc200000000000", "51cc600000000000", "51cca00000000000", @@ -3626,6 +3695,7 @@ "51cd600000000000", "51cda00000000000", "51cde00000000000", + "51ce200000000000", "51ce600000000000", "51cea00000000000", "51cee00000000000", @@ -3650,6 +3720,21 @@ "51d3a00000000000", "51d3e00000000000", "51d4200000000000", + "51d4600000000000", + "51d4a00000000000", + "51d4e00000000000", + "51d5200000000000", + "51d5600000000000", + "51d5a00000000000", + "51d5e00000000000", + "51d6200000000000", + "51d6600000000000", + "51d6a00000000000", + "51d6e00000000000", + "51d7200000000000", + "51d7600000000000", + "51d7a00000000000", + "51d7e00000000000", "51d8200000000000", "51d8600000000000", "51d8a00000000000", @@ -3659,63 +3744,32 @@ "51d9a00000000000", "51d9e00000000000", "51da200000000000", - "51da600000000000", - "51daa00000000000", "51dae00000000000", "51db200000000000", "51db600000000000", "51dba00000000000", "51dbe00000000000", + "51dc200000000000", "51dc600000000000", + "51dca00000000000", + "51dce00000000000", "51dd200000000000", + "51dd600000000000", "51dda00000000000", - "51de200000000000", + "51dde00000000000", "51de600000000000", "51dea00000000000", "51dee00000000000", "51df200000000000", - "51df600000000000", - "51dfa00000000000", - "51dfe00000000000", - "51e0200000000000", - "51e0600000000000", - "51e0a00000000000", - "51e0e00000000000", - "51e1200000000000", - "51e1600000000000", - "51e1a00000000000", - "51e1e00000000000", - "51e2200000000000", - "51e2600000000000", - "51e2a00000000000", - "51e2e00000000000", - "51e3200000000000", - "51e3600000000000", - "51e3a00000000000", - "51e3e00000000000", - "51e4200000000000", - "51e4600000000000", - "51e4a00000000000", "51e4e00000000000", - "51e5200000000000", - "51e5600000000000", - "51e5a00000000000", - "51e5e00000000000", - "51e6200000000000", - "51e6600000000000", - "51e6a00000000000", - "51e6e00000000000", - "51e7200000000000", - "51e7600000000000", - "51e7a00000000000", - "51e7e00000000000", - "51e8200000000000", - "51e8600000000000", - "51e8a00000000000", - "51e8e00000000000", - "51ea200000000000", - "51ea600000000000", + "51ed600000000000", + "51eda00000000000", "51ede00000000000", + "51ee200000000000", + "51ee600000000000", + "51eea00000000000", + "51eee00000000000", + "51ef200000000000", "51ef600000000000", "51efa00000000000", "51efe00000000000", @@ -3723,78 +3777,24 @@ "51f0600000000000", "51f0a00000000000", "51f0e00000000000", - "51f1200000000000", - "51f1600000000000", - "51f1a00000000000", - "51f1e00000000000", - "51f2200000000000", - "51f2600000000000", - "51f2a00000000000", "51f2e00000000000", "51f3200000000000", "51f3600000000000", - "51f3a00000000000", "51f3e00000000000", - "51f4200000000000", - "51f4600000000000", - "51f4a00000000000", - "51f4e00000000000", - "51f5200000000000", - "51f5600000000000", - "51f5a00000000000", - "51f5e00000000000", - "51f6200000000000", - "51f6600000000000", - "51f6a00000000000", - "51f6e00000000000", - "51f7200000000000", - "51f7600000000000", - "51f7a00000000000", - "51f7e00000000000", - "51f8200000000000", - "51f8600000000000", - "51f8a00000000000", - "51f8e00000000000", - "51f9200000000000", - "51f9600000000000", - "51f9a00000000000", - "51f9e00000000000", - "51fa200000000000", - "51fa600000000000", - "51faa00000000000", - "51fb600000000000", - "51fba00000000000", - "51fbe00000000000", - "51fc200000000000", - "51fc600000000000", - "51fca00000000000", - "51fce00000000000", - "51fd200000000000", - "51fd600000000000", - "51fda00000000000", - "51fde00000000000", - "51fe200000000000", - "51fe600000000000", - "51fea00000000000", - "51fee00000000000", - "51ff200000000000", - "51ff600000000000", - "51ffa00000000000", - "51ffe00000000000", - "5300200000000000", - "5300a00000000000", - "5355600000000000", - "5355e00000000000", - "6137200000000000", + "533fa00000000000", + "533fe00000000000", + "5340200000000000", + "5340e00000000000", + "613b200000000000", "613c200000000000", "613c600000000000", "613ca00000000000", "613ce00000000000", "613d200000000000", "613d600000000000", - "613da00000000000", - "613e200000000000", "613e600000000000", + "613ea00000000000", + "613ee00000000000", "613f200000000000", "613f600000000000", "613fa00000000000", @@ -3815,68 +3815,63 @@ "6143600000000000", "6143a00000000000", "6143e00000000000", + "6144200000000000", "6144600000000000", + "6144a00000000000", + "6144e00000000000", "6145200000000000", "6145600000000000", + "6145a00000000000", "6145e00000000000", - "6148200000000000", - "6148600000000000", - "6148a00000000000", - "6148e00000000000", - "6149200000000000", - "6149600000000000", - "6149a00000000000", - "6149e00000000000", + "6146200000000000", + "6146600000000000", + "6146a00000000000", + "6146e00000000000", + "6147600000000000", + "6147a00000000000", + "6147e00000000000", "614a200000000000", - "614a600000000000", "614aa00000000000", - "614b200000000000", - "614b600000000000", + "614ae00000000000", "614ba00000000000", - "614be00000000000", - "6163e00000000000", + "6173e00000000000", + "6318200000000000", + "6318600000000000", "6318a00000000000", "6318e00000000000", - "6319600000000000", - "6319a00000000000", - "6319e00000000000", - "631a200000000000", - "631a600000000000", - "631aa00000000000", - "631ae00000000000", - "631c600000000000", - "631d200000000000", "631d600000000000", - "631de00000000000", + "631e200000000000", + "631e600000000000", + "631ea00000000000", + "631ee00000000000", "631f200000000000", "631f600000000000", "631fa00000000000", "631fe00000000000", - "6330200000000000", - "6330600000000000", - "6330a00000000000", - "6330e00000000000", - "6331200000000000", - "6331600000000000", - "6331a00000000000", - "6331e00000000000", - "6332200000000000", - "6334200000000000", - "6334600000000000", - "6334a00000000000", - "6334e00000000000", - "6341a00000000000", - "6341e00000000000", - "6342200000000000", - "6342600000000000", - "6342a00000000000", + "6320200000000000", + "6320600000000000", + "6320a00000000000", + "6320e00000000000", + "6321200000000000", + "6321a00000000000", + "6321e00000000000", + "6322200000000000", + "6325200000000000", + "6325600000000000", + "6325a00000000000", + "6325e00000000000", + "6326200000000000", + "6326600000000000", + "6326a00000000000", + "6327200000000000", + "6327600000000000", "6342e00000000000", "6343200000000000", "6343600000000000", - "6343a00000000000", "6343e00000000000", "6344200000000000", "6344600000000000", + "6344a00000000000", "6344e00000000000", "6345200000000000", "6345600000000000", @@ -3942,18 +3937,6 @@ "6354600000000000", "6354a00000000000", "6354e00000000000", - "6355200000000000", - "6355600000000000", - "6355a00000000000", - "6355e00000000000", - "6356200000000000", - "6356600000000000", - "6356a00000000000", - "6356e00000000000", - "6357200000000000", - "6357600000000000", - "6357a00000000000", - "6357e00000000000", "6358200000000000", "6358600000000000", "6358a00000000000", @@ -3972,10 +3955,6 @@ "635be00000000000", "635c200000000000", "635c600000000000", - "635ca00000000000", - "635ce00000000000", - "635d200000000000", - "635d600000000000", "635da00000000000", "635de00000000000", "635e200000000000", @@ -3996,18 +3975,54 @@ "6361e00000000000", "6362200000000000", "6362600000000000", + "6362a00000000000", "6362e00000000000", + "6363200000000000", + "6363600000000000", + "6363a00000000000", + "6363e00000000000", "6364200000000000", "6364600000000000", "6364a00000000000", "6364e00000000000", "6365200000000000", + "6365600000000000", + "6365a00000000000", "6365e00000000000", + "6366200000000000", + "6366600000000000", + "6366a00000000000", + "6366e00000000000", + "6367200000000000", + "6367600000000000", + "6367a00000000000", + "6367e00000000000", + "6368200000000000", + "6368600000000000", + "6368a00000000000", + "6368e00000000000", + "6369200000000000", + "6369600000000000", + "6369a00000000000", + "6369e00000000000", + "636a200000000000", + "636a600000000000", + "636aa00000000000", + "636ae00000000000", + "636b200000000000", + "636b600000000000", + "636ba00000000000", + "636be00000000000", + "636c200000000000", + "636c600000000000", + "636ca00000000000", "636ce00000000000", "636d200000000000", "636d600000000000", "636da00000000000", "636de00000000000", + "636e200000000000", + "636e600000000000", "636ea00000000000", "636ee00000000000", "636f200000000000", @@ -4019,13 +4034,33 @@ "6370a00000000000", "6370e00000000000", "6371200000000000", + "6371600000000000", + "6371a00000000000", + "6371e00000000000", "6372200000000000", "6372600000000000", "6372a00000000000", + "6372e00000000000", "6373200000000000", "6373600000000000", "6373a00000000000", "6373e00000000000", + "6374200000000000", + "6374600000000000", + "6374a00000000000", + "6374e00000000000", + "6375200000000000", + "6375600000000000", + "6375a00000000000", + "6375e00000000000", + "6376200000000000", + "6376600000000000", + "6376a00000000000", + "6376e00000000000", + "6377200000000000", + "6377600000000000", + "6377a00000000000", + "6377e00000000000", "6378200000000000", "6378600000000000", "6378a00000000000", @@ -4039,14 +4074,30 @@ "637aa00000000000", "637ae00000000000", "637b200000000000", + "637b600000000000", "637ba00000000000", + "637be00000000000", + "637c200000000000", + "637c600000000000", + "637ca00000000000", + "637ce00000000000", + "637d200000000000", + "637d600000000000", + "637da00000000000", + "637de00000000000", + "637e200000000000", + "637e600000000000", + "637ea00000000000", + "637ee00000000000", + "637f200000000000", + "637f600000000000", + "637fa00000000000", + "637fe00000000000", "6380200000000000", "6380600000000000", "6380a00000000000", "6380e00000000000", "6381200000000000", - "6381600000000000", - "6381a00000000000", "6381e00000000000", "6382200000000000", "6382600000000000", @@ -4060,7 +4111,6 @@ "6384600000000000", "6384a00000000000", "6384e00000000000", - "6385200000000000", "6385600000000000", "6385a00000000000", "6385e00000000000", @@ -4069,39 +4119,7 @@ "6386a00000000000", "6386e00000000000", "6387200000000000", - "6387600000000000", - "6387a00000000000", - "6387e00000000000", - "6388200000000000", - "6388600000000000", - "6388a00000000000", - "6388e00000000000", - "6389200000000000", - "6389600000000000", - "6389a00000000000", - "6389e00000000000", - "638a200000000000", - "638a600000000000", - "638aa00000000000", - "638ae00000000000", - "638b200000000000", - "638b600000000000", - "638ba00000000000", - "638be00000000000", - "638ce00000000000", - "638e200000000000", - "638e600000000000", - "638ea00000000000", - "6393200000000000", - "6393600000000000", - "6393a00000000000", - "6393e00000000000", - "6394200000000000", - "6394600000000000", - "6394a00000000000", - "6394e00000000000", "6395200000000000", - "6395600000000000", "6395a00000000000", "6395e00000000000", "6396200000000000", @@ -4113,23 +4131,12 @@ "6397a00000000000", "6397e00000000000", "6398200000000000", + "6398600000000000", "6398a00000000000", - "6399600000000000", + "6398e00000000000", + "6399200000000000", "6399e00000000000", - "639a200000000000", - "639a600000000000", - "639aa00000000000", - "639ae00000000000", - "639b200000000000", - "639b600000000000", - "639ba00000000000", - "639be00000000000", - "639c200000000000", "639c600000000000", - "639ca00000000000", - "639ce00000000000", - "639d200000000000", - "639d600000000000", "639da00000000000", "639de00000000000", "639e200000000000", @@ -4250,7 +4257,6 @@ "63bae00000000000", "63bb200000000000", "63bb600000000000", - "63bba00000000000", "63bbe00000000000", "63bc200000000000", "63bc600000000000", @@ -4262,15 +4268,23 @@ "63bde00000000000", "63be200000000000", "63be600000000000", - "63bea00000000000", - "63bee00000000000", - "63bf200000000000", - "63bf600000000000", - "63bfa00000000000", - "63bfe00000000000", - "63c3200000000000", + "63c1600000000000", + "63c1a00000000000", + "63c1e00000000000", + "63c2200000000000", + "63c2600000000000", + "63c4600000000000", + "63c4a00000000000", + "63c4e00000000000", + "63c5200000000000", + "63c5600000000000", + "63c5a00000000000", + "63c5e00000000000", + "63c6200000000000", + "63c6600000000000", "63c6a00000000000", "63c6e00000000000", + "63c7200000000000", "63c7600000000000", "63c7a00000000000", "63c7e00000000000", @@ -4284,7 +4298,6 @@ "63c9e00000000000", "63ca200000000000", "63ca600000000000", - "63caa00000000000", "63cae00000000000", "63cb200000000000", "63cb600000000000", @@ -4312,7 +4325,12 @@ "63d0e00000000000", "63d1200000000000", "63d1600000000000", + "63d1a00000000000", + "63d1e00000000000", "63d2200000000000", + "63d2600000000000", + "63d2a00000000000", + "63d2e00000000000", "63d3200000000000", "63d3600000000000", "63d3a00000000000", @@ -4333,35 +4351,9 @@ "63d7600000000000", "63d7a00000000000", "63d7e00000000000", - "63d8200000000000", - "63d8600000000000", "63d8a00000000000", - "63d8e00000000000", - "63d9200000000000", - "63d9600000000000", - "63d9a00000000000", - "63d9e00000000000", - "63da200000000000", - "63da600000000000", - "63daa00000000000", - "63dae00000000000", - "63db200000000000", - "63db600000000000", - "63dba00000000000", - "63dbe00000000000", - "63dc200000000000", - "63dc600000000000", - "63dca00000000000", - "63dce00000000000", - "63dd200000000000", - "63dd600000000000", - "63dda00000000000", - "63dde00000000000", - "63de200000000000", - "63de600000000000", "63dea00000000000", "63dee00000000000", - "63df200000000000", "63df600000000000", "63dfa00000000000", "63dfe00000000000", @@ -4370,11 +4362,6 @@ "63e0a00000000000", "63e0e00000000000", "63e1200000000000", - "63e1600000000000", - "63e1a00000000000", - "63e1e00000000000", - "63e2200000000000", - "63e2600000000000", "63e2a00000000000", "63e2e00000000000", "63e3200000000000", @@ -4396,11 +4383,24 @@ "63e7200000000000", "63e7600000000000", "63e7a00000000000", + "63e7e00000000000", "63e8200000000000", "63e8600000000000", "63e8a00000000000", + "63e8e00000000000", "63e9200000000000", "63e9600000000000", + "63e9a00000000000", + "63e9e00000000000", + "63ea200000000000", + "63ea600000000000", + "63eaa00000000000", + "63eae00000000000", + "63eb200000000000", + "63eb600000000000", + "63eba00000000000", + "63ebe00000000000", + "63ec200000000000", "63ec600000000000", "63eca00000000000", "63ece00000000000", @@ -4535,11 +4535,11 @@ "c00800000000000", "c02800000000000", "c03800000000000", - "5141800000000000", + "5143800000000000", "5144800000000000", "5145800000000000", "5146800000000000", - "5147800000000000", + "5148800000000000", "5149800000000000", "514a800000000000", "514b800000000000", @@ -4584,109 +4584,109 @@ "5172800000000000", "5173800000000000", "5174800000000000", - "5175800000000000", + "5177800000000000", "517b800000000000", - "5190800000000000", - "51c0800000000000", - "51c1800000000000", - "51c2800000000000", - "51c3800000000000", - "51c8800000000000", - "51c9800000000000", - "51ca800000000000", - "51cb800000000000", - "51cd800000000000", - "51ce800000000000", - "51cf800000000000", - "51d4800000000000", - "51d5800000000000", - "51d6800000000000", - "51d7800000000000", - "51d9800000000000", - "51dc800000000000", - "51dd800000000000", - "51df800000000000", - "6346800000000000", - "6347800000000000", - "6348800000000000", - "6349800000000000", - "634a800000000000", - "634b800000000000", - "634c800000000000", - "634d800000000000", - "634e800000000000", - "634f800000000000", - "6350800000000000", - "6357800000000000", - "6358800000000000", - "6359800000000000", - "635a800000000000", - "635b800000000000", - "635d800000000000", - "635e800000000000", - "635f800000000000", - "6360800000000000", - "6361800000000000", - "6362800000000000", - "6363800000000000", - "6364800000000000", - "6365800000000000", - "6366800000000000", - "6367800000000000", - "6368800000000000", - "6369800000000000", - "636a800000000000", - "636b800000000000", - "636c800000000000", - "636d800000000000", - "636e800000000000", - "636f800000000000", + "5180800000000000", + "5181800000000000", + "5182800000000000", + "5183800000000000", + "5184800000000000", + "5185800000000000", + "5186800000000000", + "5187800000000000", + "5188800000000000", + "5189800000000000", + "518a800000000000", + "5194800000000000", + "5195800000000000", + "5196800000000000", + "5197800000000000", + "5198800000000000", + "519c800000000000", + "519d800000000000", + "519f800000000000", + "51cc800000000000", "6370800000000000", - "6371800000000000", - "6372800000000000", - "6373800000000000", "6374800000000000", "6375800000000000", "6376800000000000", - "6377800000000000", - "6378800000000000", - "6379800000000000", - "637a800000000000", - "637b800000000000", "637c800000000000", "637d800000000000", - "637e800000000000", + "637f800000000000", + "6380800000000000", + "6381800000000000", + "6382800000000000", + "6383800000000000", + "6384800000000000", + "6385800000000000", + "6386800000000000", + "6387800000000000", + "6388800000000000", + "6389800000000000", + "638a800000000000", + "638b800000000000", + "638c800000000000", + "638d800000000000", + "638e800000000000", + "6390800000000000", + "6391800000000000", + "6392800000000000", + "6393800000000000", + "6394800000000000", + "6395800000000000", + "6396800000000000", + "6397800000000000", + "6398800000000000", + "6399800000000000", + "639a800000000000", + "639b800000000000", + "639c800000000000", + "639d800000000000", + "639e800000000000", + "639f800000000000", "63a0800000000000", + "63a1800000000000", "63a2800000000000", - "63a3800000000000", + "63a4800000000000", + "63a5800000000000", + "63a6800000000000", + "63a7800000000000", "63a8800000000000", - "63a9800000000000", - "63aa800000000000", - "63ae800000000000", + "63af800000000000", + "63b0800000000000", + "63b1800000000000", + "63b2800000000000", + "63b3800000000000", + "63b4800000000000", + "63b5800000000000", + "63b6800000000000", + "63b7800000000000", + "63b8800000000000", + "63b9800000000000", + "63c7800000000000", "63c8800000000000", - "63ca800000000000", - "63cb800000000000", - "63cc800000000000", + "63c9800000000000", "63cd800000000000", "63ce800000000000", "63cf800000000000", + "63d0800000000000", + "63d1800000000000", + "63d2800000000000", + "63d3800000000000", + "63d4800000000000", "63d5800000000000", - "63d6800000000000", "63d7800000000000", - "63d8800000000000", - "63d9800000000000", - "63da800000000000", - "63db800000000000", - "63dc800000000000", - "63dd800000000000", - "63de800000000000", - "63df800000000000", - "63e0800000000000", - "63e1800000000000", - "63e2800000000000", - "63e4800000000000", "63e5800000000000", + "63e6800000000000", + "63e7800000000000", + "63e8800000000000", + "63e9800000000000", + "63ea800000000000", + "63eb800000000000", + "63ec800000000000", + "63ed800000000000", "63ee800000000000", + "63ef800000000000", "63f1800000000000", "63f2800000000000", "63f3800000000000", diff --git a/tests/fixtures/serialization.json b/tests/fixtures/serialization.json index 5b0323c..a9c643e 100644 --- a/tests/fixtures/serialization.json +++ b/tests/fixtures/serialization.json @@ -51,295 +51,295 @@ "1a80000000000000", "5320000000000000", "2aa0000000000000", - "c1e0000000000000", + "c1a0000000000000", "6c20000000000000", "23a0000000000000", "d2e0000000000000", "76a0000000000000", "41e0000000000000", - "2db8000000000000", + "2da8000000000000", "e098000000000000", - "7518000000000000", + "7528000000000000", "9f08000000000000", - "9518000000000000", - "9d88000000000000", - "c348000000000000", - "3a58000000000000", + "9508000000000000", + "9dd8000000000000", + "c378000000000000", + "3a18000000000000", "64d6000000000000", - "dfa6000000000000", + "dfaa000000000000", "8ffa000000000000", "b13e000000000000", - "51aa000000000000", + "51e6000000000000", "3d2000000000000", "bc6000000000000", - "5912000000000000", + "590e000000000000", "2156800000000000", - "272c800000000000", - "2a4d800000000000", - "8811800000000000", - "ee66800000000000", - "58e6800000000000", - "305f800000000000", - "aece800000000000", + "273c800000000000", + "2a0a800000000000", + "8812800000000000", + "ee39800000000000", + "58e9800000000000", + "3050800000000000", + "aec8800000000000", "80b1600000000000", - "d9fa200000000000", - "a038a00000000000", - "9ca3200000000000", - "7799600000000000", - "d433600000000000", - "1bb5a00000000000", + "d9ad600000000000", + "a020a00000000000", + "9cb3a00000000000", + "775da00000000000", + "d42d600000000000", + "1bbb600000000000", "3222a00000000000", "66cbc80000000000", - "26dde80000000000", - "3322b80000000000", - "9280880000000000", - "ebb6180000000000", + "26e2e80000000000", + "3322a80000000000", + "9280a80000000000", + "eb96180000000000", "66dd980000000000", - "8f67580000000000", + "8f68b80000000000", "6fae880000000000", - "c072860000000000", - "75678a0000000000", - "2dacf20000000000", - "bd5fea0000000000", + "c0be720000000000", + "7577360000000000", + "2db1060000000000", + "bd703e0000000000", "11ddda0000000000", - "a15620000000000", - "ccba1a0000000000", + "a141e0000000000", + "ccba160000000000", "4662ce0000000000", - "3b2c1f8000000000", + "3b3c208000000000", "59d1d48000000000", - "35fdcb8000000000", - "90a8548000000000", - "5647af8000000000", + "35a9c88000000000", + "90be248000000000", + "5607f08000000000", "6c03628000000000", "d352e88000000000", - "2b5df48000000000", - "ae53de2000000000", - "1b75b0a000000000", - "30aea0a000000000", - "bd6d01a000000000", - "45d3b56000000000", - "4e1d622000000000", + "2b4d648000000000", + "ae13ee2000000000", + "1b7545e000000000", + "30a9b66000000000", + "bd52ab6000000000", + "45d3bbe000000000", + "4e426a2000000000", "654c48e000000000", "a652e46000000000", "1a90fa0800000000", - "51941c3800000000", - "91b249b800000000", - "1bf6271800000000", - "a2942a1800000000", + "51c8333800000000", + "91f5ba0800000000", + "1bf6277800000000", + "a284ea3800000000", "5b33154800000000", - "94586cd800000000", - "826d650800000000", - "b6ba6e3200000000", - "c89f623a00000000", - "504fd23200000000", - "52dd57a00000000", - "7b82607200000000", - "82a79a5e00000000", - "48475cbe00000000", - "61c274c200000000", - "ab096cdf80000000", + "945814d800000000", + "826d64f800000000", + "b6b896ee00000000", + "c89f61e200000000", + "509c192e00000000", + "519197a00000000", + "7b82af4200000000", + "828a248a00000000", + "4890b37e00000000", + "618c872600000000", + "ab09512080000000", "8551d93380000000", - "266ce26980000000", - "d76e771f80000000", - "c7ded57f80000000", - "7404106580000000", + "2631325680000000", + "d762570f80000000", + "c7eed97f80000000", + "74042ae580000000", "e967369d80000000", - "53b22c3b80000000", - "d25451e920000000", - "c21d138be0000000", - "2923b23660000000", - "68e4def9e0000000", - "7d798a65e0000000", - "1dc3070220000000", - "4d6a31d4a0000000", - "573d2048a0000000", - "3597d03cf8000000", - "309b87b4e8000000", - "3f8bbff058000000", - "4fcc3d2228000000", - "7006f1bd48000000", - "c3e131e438000000", + "53b12eb480000000", + "d254793ea0000000", + "c242278820000000", + "291e313a20000000", + "68e4decf20000000", + "7d528b45e0000000", + "1dc3046920000000", + "4d7ab7db60000000", + "57169fbb60000000", + "35ca6fc368000000", + "309a44ca28000000", + "3f8b555f78000000", + "4fd27ed5d8000000", + "700aac8c48000000", + "c3e1131b38000000", "1390dc1308000000", - "ed6d00a9c8000000", - "58c31e9f32000000", - "ddeb3d1aa2000000", - "c963436b7a000000", - "1e4aca5896000000", - "431842c5ae000000", - "eac29e9fea000000", - "663b87e0da000000", + "ed7d0076c8000000", + "58c31e29f2000000", + "ddb47dd612000000", + "c962ab6b7a000000", + "1e4ad7f562000000", + "431842c772000000", + "eac29e2942000000", + "6621b24f82000000", "6ad3ece636000000", - "41f6fcbb6b800000", - "ceb80a3ac4800000", - "ca9dac0644800000", - "736f331827800000", - "a43d082fe800000", - "97d576e988800000", - "2bfd13799e800000", - "79e6e97ac8800000", - "13206d7c20200000", - "9bfa99542fa00000", - "516d4e5565600000", - "85adcb6d54a00000", - "6a316b169f600000", - "28e1cda6f3e00000", - "a7d1a0390a600000", - "724c3e96caa00000", - "b6d3fedfc780000", - "eae3017cdd980000", - "21d9af61f5580000", - "667670f1e5680000", - "6236fbb238580000", - "1563a4c56c180000", - "35da6065dfc80000", - "51860de25b080000", - "671d8de9c6fe0000", - "b3afe78e4cea0000", - "11389813a1a20000", - "3e87e905565a0000", - "67d4de98bcea0000", - "7738b286d4660000", - "1a70b79947560000", - "8ad557bdea1e0000", - "bbe1886535868000", - "634f6302f8948000", - "ab5f73a4030d8000", - "551f5983e9868000", - "a85db0bf34d38000", - "c8c0962b23258000", - "ce3fda45b1878000", + "41c9565363800000", + "ceb80a3abb800000", + "ca9da40658800000", + "7360713563800000", + "a43d372fe800000", + "97d429bd88800000", + "2bfdd8b9a1800000", + "79b9295d1a800000", + "1323057c23e00000", + "9bf82603d7a00000", + "516e38502d200000", + "85adcb6d53600000", + "6a315c6de0a00000", + "28dcc5a2f2600000", + "a7d176890a600000", + "720bc29639a00000", + "b6d3fe5fc780000", + "eaeec17cdd980000", + "2198d0530bf80000", + "667670f1e8180000", + "627ac93a3c580000", + "15620bb014180000", + "359a20a1d6880000", + "51d1f11d58f80000", + "671d8de2b6fe0000", + "b373caf082c20000", + "112367ce0c4e0000", + "3eae4a52fd260000", + "67d4aea75cea0000", + "77114c79249a0000", + "1a765fe6e4be0000", + "8aea5716b4e20000", + "bbe15465b55d8000", + "63b39496f3648000", + "ab5c83a4030d8000", + "5523a67cde798000", + "a85245c044d38000", + "c8c091d123248000", + "ce3fdba746478000", "5dde7034279f8000", - "7bdb44111fc9a000", - "c32c6bbd9a61e000", - "252f8d8345d12000", - "16733bba751ca000", - "64e4f1cba9696000", - "9204289709caa000", - "e21cb034e52e6000", - "1fe4510b596ae000", - "2d1bc307239ce800", - "a85f8007146a5800", - "54c23d6ffc404800", - "de5c7d2401b59800", - "653eedbc7562a800", - "c124debe43fe7800", - "981ee36493483800", - "d0ff6e1e3157d800", - "e73fdd61a71a7600", - "a14bab871e652e00", - "b468c9f595ddf600", - "76d2ce572c9dfe00", - "36e6df6410c44a00", - "a7032a27aa58ae00", - "cd5648ea53963e00", - "a527150815d86600", - "8755cebd9ded7180", - "c9af50737ccd980", - "cf8c699a0f4c6d80", - "6b5f80b2089f1780", - "19f93389a77b0d80", - "d03ac1e46584ed80", - "728414fa09a18980", - "403256edb701b480", - "9347e04aebf168e0", - "b6b9a4b9789d40e0", - "e7e8dd655066e760", - "bf6b45850f69a1a0", - "271ce8dc66c87ee0", - "a3bd80e70258b2a0", - "8be89b55b18ac5e0", - "1c8fc2d4c126cf60", - "3f5d823ebdbf7f68", - "c6a59952cfff2008", - "3d336c31673b858", - "1fb48397e3065ca8", - "562cc7091f266958", - "54a2e7ca58a791d8", - "123b63f3b88252c8", - "a16c36e19cfbf0c8", - "1f9e9a08dfee05c2", - "a4e0ea690e7de712", - "3e6d2ce1e273e72a", - "b8e12843725a328e", - "8c3f35d7a0210a8a", - "3615ee35e7a1c9f2", - "b8e51075b7e31e76", - "b44fc77997ef86e6", - "37bd3d1d431532a4", - "cc608c17aeb4b41b", - "93a2995410129469", - "9e5b9fbbb97ae00d", - "aa8937c3f4cc50ff" + "7bd86cdb0fca6000", + "c32325d672ace000", + "251af28375d2a000", + "16733998a8cba000", + "64e4f1cb82122000", + "9253c76766776000", + "e2439c38c96ba000", + "1fe4798b5990e000", + "2d141807239d2800", + "a850e0047e5fb800", + "54e6316c023f4800", + "de1c3de7fc886800", + "653ee5bc756d0800", + "c118cd4242547800", + "981e6e9491c81800", + "d0ff6e13417c2800", + "e73fdd6c4ada7600", + "a1445b870e65ee00", + "b468b9f5aa220a00", + "76edc49853210200", + "36d9ecd6b3136600", + "a7032a27afb57200", + "cd567b15ac69c200", + "a52717881725da00", + "8754be9d9de57180", + "c990acec8332680", + "cf8c6995f0b39280", + "6b50e0b2089f1c80", + "19cfb389a78c5280", + "d03ac1e45b5eee80", + "72ac3cf5f56f5880", + "4032569e4801b480", + "93b81fb8fc0d1520", + "b6ba4b52236a3fa0", + "e7ebad6aaf99caa0", + "bf6caf5f8f6e7760", + "2722c11365178120", + "a3bc80873ea4b9a0", + "8bc16065b8744a20", + "1c8fc2eec126cf60", + "3f4dbddb41558fa8", + "c6a1d5827fff3008", + "3d336c3168c44f8", + "1fb483973b065178", + "566c78f2df357968", + "54b22bce54879228", + "123b63f39b7d8d48", + "a16c32dcbc6c0f18", + "1f9fe764dc33871a", + "a4e0eb9e8e72277a", + "3e319481e2bdb8da", + "b8e1a863725b428e", + "8c25d596dfeec57a", + "364b1215b85cca0e", + "b8e5184b48e31e7a", + "b449777997e7b16a", + "37bd507018e84c1c", + "cc588c6ac2b489f1", + "93247734100af473", + "9e7ba024272c8d5d", + "aa96d65c6f33a701" ], "res30Locations": [ { "lon": -0.1276, "lat": 51.5074, "name": "London", - "hex": "c6c233d3108a860f", + "hex": "c72e4dd2eb957921", "resolution": 30 }, { "lon": -73.9857, "lat": 40.7484, "name": "New York", - "hex": "4c20ec50870a8987", + "hex": "4c9ef458823b764f", "resolution": 30 }, { "lon": 139.6917, "lat": 35.6895, "name": "Tokyo", - "hex": "397c21a383a22934", + "hex": "397d9f569c5dd434", "resolution": 30 }, { "lon": -155.5, "lat": 19.9, "name": "Hawaii Big Island", - "hex": "e034b8a6996e5f9a", + "hex": "e03790b496a45f56", "resolution": 29 }, { "lon": -157.8, "lat": 21.3, "name": "Oahu", - "hex": "e03bc1fbb7bc4d52", + "hex": "e03e81fbe717b1ba", "resolution": 29 }, { "lon": 0, "lat": -85, "name": "Antarctica Weddell Sea", - "hex": "b80eff0c12648c86", + "hex": "b80ec051ba648c8a", "resolution": 29 }, { "lon": 90, "lat": -80, "name": "Antarctica East", - "hex": "b7b9a407b85f146a", + "hex": "b79a4bf19b09d5a6", "resolution": 29 }, { "lon": -75, "lat": -80, "name": "Antarctica West", - "hex": "be76922a668ac4b6", + "hex": "be79ea2b99d71eb6", "resolution": 29 }, { "lon": 180, "lat": -75, "name": "Antarctica Ross", - "hex": "c511c2098ec7797a", + "hex": "c52e3cf2bc48b906", "resolution": 29 }, { "lon": -135, "lat": -78, "name": "Antarctica Pacific", - "hex": "c39210cdc12df6aa", + "hex": "c392ece2bd963256", "resolution": 29 } ] diff --git a/tests/fixtures/traversal/cap.json b/tests/fixtures/traversal/cap.json index 34d5158..d19712c 100644 --- a/tests/fixtures/traversal/cap.json +++ b/tests/fixtures/traversal/cap.json @@ -44,19 +44,20 @@ "cellId": "620000000000000", "radius": 1000000, "cells": [ - "1a0000000000000", - "1e0000000000000", "4e0000000000000", + "5e0000000000000", "620000000000000", "660000000000000", - "6a0000000000000" + "6a0000000000000", + "6e0000000000000", + "8320000000000000" ] }, { "cellId": "7e0000000000000", "radius": 1000000, "cells": [ - "760000000000000", + "7a0000000000000", "7e0000000000000", "820000000000000", "6560000000000000", @@ -70,7 +71,7 @@ "cells": [ "1fe0000000000000", "2020000000000000", - "20a0000000000000", + "2060000000000000", "2960000000000000", "2ea0000000000000", "d420000000000000" @@ -82,9 +83,9 @@ "cellId": "402000000000000", "radius": 500000, "compactedCells": [ - "38e000000000000", - "3e2000000000000", - "3e6000000000000", + "3ba000000000000", + "3ea000000000000", + "3ee000000000000", "3f6000000000000", "3fa000000000000", "3fe000000000000", @@ -113,14 +114,14 @@ "2156000000000000", "215a000000000000", "215e000000000000", - "27de000000000000", + "27c6000000000000", "27ee000000000000", "27f2000000000000", "27f6000000000000", "27fa000000000000", "27fe000000000000", "2802000000000000", - "280a000000000000", + "2806000000000000", "3aaa000000000000", "5bf2000000000000", "5bf6000000000000", @@ -144,10 +145,10 @@ "715a000000000000", "715e000000000000", "77f2000000000000", - "77f6000000000000", + "77fa000000000000", "77fe000000000000", "7802000000000000", - "780a000000000000", + "7806000000000000", "780e000000000000", "7ea2000000000000", "7ea6000000000000", @@ -169,14 +170,14 @@ "cellId": "402000000000000", "radius": 1000000, "compactedCells": [ - "23e000000000000", - "382000000000000", - "386000000000000", - "38a000000000000", - "38e000000000000", - "392000000000000", - "396000000000000", - "39a000000000000", + "226000000000000", + "39e000000000000", + "3a2000000000000", + "3a6000000000000", + "3ae000000000000", + "3b2000000000000", + "3b6000000000000", + "3ba000000000000", "3be000000000000", "3c2000000000000", "3d2000000000000", @@ -191,19 +192,19 @@ "426000000000000", "42a000000000000", "42e000000000000", + "432000000000000", "436000000000000", - "43a000000000000", "43e000000000000", "442000000000000", "446000000000000", "44a000000000000", "44e000000000000", "452000000000000", - "456000000000000", + "45a000000000000", "45e000000000000", "462000000000000", "982000000000000", - "986000000000000", + "98e000000000000", "992000000000000", "996000000000000", "99a000000000000", @@ -229,7 +230,7 @@ "dc2000000000000", "dc6000000000000", "dca000000000000", - "1196000000000000", + "1192000000000000", "119a000000000000", "119e000000000000", "11a8000000000000", @@ -247,7 +248,7 @@ "cellId": "5c02000000000000", "radius": 1000000, "compactedCells": [ - "2146000000000000", + "214a000000000000", "214e000000000000", "2158000000000000", "2162000000000000", @@ -257,26 +258,26 @@ "2176000000000000", "217a000000000000", "217e000000000000", - "2742000000000000", - "274a000000000000", - "274e000000000000", - "2762000000000000", + "2796000000000000", + "27b2000000000000", + "27b6000000000000", + "27be000000000000", "27c2000000000000", "27c6000000000000", "27ca000000000000", "27ce000000000000", - "27d8000000000000", - "27e2000000000000", - "27e6000000000000", - "27ea000000000000", - "27ee000000000000", + "27d2000000000000", + "27d6000000000000", + "27da000000000000", + "27de000000000000", + "27e8000000000000", "27f8000000000000", "2808000000000000", "2812000000000000", + "2816000000000000", + "281a000000000000", + "281e000000000000", "2822000000000000", - "2826000000000000", - "282a000000000000", - "282e000000000000", "283a000000000000", "3a8a000000000000", "3a8e000000000000", @@ -285,7 +286,7 @@ "3a9e000000000000", "3aa8000000000000", "3ab2000000000000", - "3aba000000000000", + "3ab6000000000000", "5b92000000000000", "5b96000000000000", "5bc2000000000000", @@ -308,11 +309,11 @@ "5c36000000000000", "5c3a000000000000", "5c3e000000000000", + "5c42000000000000", "5c46000000000000", "5c4a000000000000", - "5c4e000000000000", - "5ca2000000000000", - "5ca6000000000000", + "5caa000000000000", + "5cae000000000000", "5cba000000000000" ] }, @@ -333,15 +334,15 @@ "7176000000000000", "717a000000000000", "717e000000000000", - "7192000000000000", + "71ce000000000000", "77c6000000000000", "77ca000000000000", - "77ce000000000000", "77d2000000000000", "77d6000000000000", - "77da000000000000", "77de000000000000", + "77e2000000000000", "77e6000000000000", + "77ea000000000000", "77ee000000000000", "77f8000000000000", "7808000000000000", @@ -350,12 +351,12 @@ "781a000000000000", "781e000000000000", "7822000000000000", - "7826000000000000", "782a000000000000", "782e000000000000", "7832000000000000", "7836000000000000", "783a000000000000", + "783e000000000000", "7e86000000000000", "7e8a000000000000", "7e8e000000000000", @@ -364,11 +365,11 @@ "7e9e000000000000", "7ea8000000000000", "7eb2000000000000", - "7eba000000000000", - "a75e000000000000", - "a7b2000000000000", + "7eb6000000000000", + "a752000000000000", "a7b6000000000000", "a7ba000000000000", + "a7be000000000000", "a7c2000000000000", "a7c6000000000000", "a7ca000000000000", diff --git a/tests/fixtures/traversal/global-neighbors.json b/tests/fixtures/traversal/global-neighbors.json index a70fdab..db0a31b 100644 --- a/tests/fixtures/traversal/global-neighbors.json +++ b/tests/fixtures/traversal/global-neighbors.json @@ -126,7 +126,7 @@ "fe0000000000000", "1020000000000000", "15a0000000000000", - "2620000000000000", + "2660000000000000", "26a0000000000000", "5d60000000000000" ], @@ -188,20 +188,20 @@ }, "output": { "neighbors": [ - "1628000000000000", - "1638000000000000", - "1648000000000000", + "15f8000000000000", + "1618000000000000", "1658000000000000", - "1668000000000000", - "1798000000000000", - "17a8000000000000" + "24a8000000000000", + "24b8000000000000", + "24c8000000000000", + "2658000000000000" ], "edgeNeighbors": [ - "1628000000000000", - "1638000000000000", + "15f8000000000000", + "1618000000000000", "1658000000000000", - "1668000000000000", - "17a8000000000000" + "24b8000000000000", + "24c8000000000000" ] } }, @@ -217,7 +217,7 @@ "2420000000000000", "24a0000000000000", "24e0000000000000", - "2620000000000000" + "2660000000000000" ], "edgeNeighbors": [ "15e0000000000000", @@ -332,7 +332,7 @@ "17e8000000000000", "1808000000000000", "1818000000000000", - "1878000000000000", + "1848000000000000", "1e58000000000000", "23f8000000000000", "2408000000000000" @@ -558,15 +558,15 @@ "output": { "neighbors": [ "2156000000000000", - "215e000000000000", - "27f6000000000000", + "215a000000000000", + "27fa000000000000", "2802000000000000", "5bfe000000000000", "5c02000000000000" ], "edgeNeighbors": [ "2156000000000000", - "27f6000000000000", + "27fa000000000000", "2802000000000000", "5bfe000000000000", "5c02000000000000" @@ -581,15 +581,15 @@ "neighbors": [ "2156000000000000", "27fe000000000000", - "280a000000000000", - "3aa2000000000000", + "2806000000000000", + "3aa6000000000000", "3aaa000000000000", "5bfe000000000000" ], "edgeNeighbors": [ "2156000000000000", "27fe000000000000", - "280a000000000000", + "2806000000000000", "3aaa000000000000", "5bfe000000000000" ] @@ -789,7 +789,7 @@ "neighbors": [ "2020000000000000", "2960000000000000", - "29e0000000000000", + "29a0000000000000", "2e60000000000000", "d3e0000000000000", "d420000000000000" @@ -930,20 +930,20 @@ }, "output": { "neighbors": [ - "3548000000000000", "3558000000000000", "3568000000000000", + "3c08000000000000", "3c28000000000000", "3c38000000000000", - "3c98000000000000", - "3cb8000000000000" + "4e88000000000000", + "4ea8000000000000" ], "edgeNeighbors": [ - "3548000000000000", - "3568000000000000", + "3558000000000000", + "3c08000000000000", "3c28000000000000", "3c38000000000000", - "3cb8000000000000" + "4e88000000000000" ] } }, @@ -953,20 +953,20 @@ }, "output": { "neighbors": [ + "3560000000000000", + "35e0000000000000", + "3c20000000000000", "3ca0000000000000", "3ce0000000000000", - "3e20000000000000", - "3ea0000000000000", - "3ee0000000000000", - "4ce0000000000000", - "4e20000000000000" + "4e60000000000000", + "4ea0000000000000" ], "edgeNeighbors": [ + "3560000000000000", + "3c20000000000000", "3ca0000000000000", "3ce0000000000000", - "3ea0000000000000", - "3ee0000000000000", - "4e20000000000000" + "4e60000000000000" ] } }, @@ -1024,20 +1024,20 @@ }, "output": { "neighbors": [ - "3d6e000000000000", - "3d7a000000000000", - "3d7e000000000000", + "3d8a000000000000", + "3d8e000000000000", + "3d92000000000000", + "3dbe000000000000", + "3dc6000000000000", "3dca000000000000", - "3dd6000000000000", - "427a000000000000", - "4282000000000000" + "3dee000000000000" ], "edgeNeighbors": [ - "3d7a000000000000", - "3d7e000000000000", + "3d8e000000000000", + "3d92000000000000", + "3dc6000000000000", "3dca000000000000", - "3dd6000000000000", - "427a000000000000" + "3dee000000000000" ] } }, @@ -1095,7 +1095,7 @@ }, "output": { "neighbors": [ - "3e2000000000000", + "3ee000000000000", "3fa000000000000", "3fe000000000000", "406000000000000", @@ -1119,7 +1119,7 @@ }, "output": { "neighbors": [ - "388000000000000", + "3b8000000000000", "3e8000000000000", "3f8000000000000", "418000000000000", @@ -1215,20 +1215,20 @@ }, "output": { "neighbors": [ - "446000000000000", + "44a000000000000", "452000000000000", - "52e000000000000", + "51a000000000000", "97e000000000000", - "986000000000000", - "992000000000000", + "982000000000000", + "996000000000000", "99e000000000000" ], "edgeNeighbors": [ - "446000000000000", + "44a000000000000", "452000000000000", - "52e000000000000", - "986000000000000", - "992000000000000" + "51a000000000000", + "982000000000000", + "996000000000000" ] } }, @@ -1267,7 +1267,7 @@ "4a0000000000000", "520000000000000", "560000000000000", - "5a0000000000000", + "5e0000000000000", "960000000000000", "9a0000000000000" ], @@ -1410,20 +1410,20 @@ }, "output": { "neighbors": [ - "50d8000000000000", - "50f8000000000000", "5108000000000000", + "5118000000000000", + "5128000000000000", + "51f8000000000000", "5218000000000000", - "5228000000000000", - "6958000000000000", - "6b08000000000000" + "5248000000000000", + "5318000000000000" ], "edgeNeighbors": [ - "50f8000000000000", - "5108000000000000", + "5118000000000000", + "5128000000000000", "5218000000000000", - "5228000000000000", - "6b08000000000000" + "5248000000000000", + "5318000000000000" ] } }, @@ -1433,20 +1433,20 @@ }, "output": { "neighbors": [ - "5060000000000000", - "50e0000000000000", "5120000000000000", + "51e0000000000000", "5260000000000000", "52a0000000000000", - "6960000000000000", - "6b20000000000000" + "5320000000000000", + "5360000000000000", + "53a0000000000000" ], "edgeNeighbors": [ - "50e0000000000000", "5120000000000000", "5260000000000000", "52a0000000000000", - "6b20000000000000" + "5320000000000000", + "5360000000000000" ] } }, @@ -1503,18 +1503,18 @@ }, "output": { "neighbors": [ - "52c2000000000000", - "52ca000000000000", - "52ce000000000000", - "52e2000000000000", - "548e000000000000", + "5432000000000000", + "5436000000000000", + "5496000000000000", + "549a000000000000", + "549e000000000000", "54a6000000000000", "54aa000000000000" ], "edgeNeighbors": [ - "52ca000000000000", - "52ce000000000000", - "548e000000000000", + "5432000000000000", + "549a000000000000", + "549e000000000000", "54a6000000000000", "54aa000000000000" ] @@ -1648,7 +1648,7 @@ "53f8000000000000", "5408000000000000", "59a8000000000000", - "5f88000000000000", + "5fb8000000000000", "5fe8000000000000", "5ff8000000000000", "6018000000000000", @@ -1767,15 +1767,15 @@ "be0000000000000", "c20000000000000", "5160000000000000", - "51e0000000000000", - "6360000000000000", + "51a0000000000000", + "63a0000000000000", "6aa0000000000000" ], "edgeNeighbors": [ "be0000000000000", "c20000000000000", "5160000000000000", - "6360000000000000", + "63a0000000000000", "6aa0000000000000" ] } @@ -1790,14 +1790,14 @@ "c08000000000000", "5158000000000000", "5178000000000000", - "63d8000000000000", + "63e8000000000000", "6aa8000000000000" ], "edgeNeighbors": [ "bf8000000000000", "c08000000000000", "5158000000000000", - "63d8000000000000", + "63e8000000000000", "6aa8000000000000" ] } @@ -1811,15 +1811,15 @@ "bfe000000000000", "c02000000000000", "5156000000000000", - "515e000000000000", - "63f6000000000000", + "515a000000000000", + "63fa000000000000", "6aaa000000000000" ], "edgeNeighbors": [ "bfe000000000000", "c02000000000000", "5156000000000000", - "63f6000000000000", + "63fa000000000000", "6aaa000000000000" ] } @@ -1908,14 +1908,14 @@ "4802000000000000", "6ff2000000000000", "6ffe000000000000", - "700a000000000000", + "7006000000000000", "abfe000000000000", "ac02000000000000" ], "edgeNeighbors": [ "4802000000000000", "6ffe000000000000", - "700a000000000000", + "7006000000000000", "abfe000000000000", "ac02000000000000" ] @@ -1952,7 +1952,7 @@ }, "output": { "neighbors": [ - "6788000000000000", + "67b8000000000000", "67e8000000000000", "67f8000000000000", "6808000000000000", @@ -2072,15 +2072,15 @@ "output": { "neighbors": [ "7160000000000000", - "71e0000000000000", - "7760000000000000", + "71a0000000000000", + "77a0000000000000", "7820000000000000", "7ea0000000000000", "a820000000000000" ], "edgeNeighbors": [ "7160000000000000", - "7760000000000000", + "77a0000000000000", "7820000000000000", "7ea0000000000000", "a820000000000000" @@ -2095,14 +2095,14 @@ "neighbors": [ "7158000000000000", "7178000000000000", - "77d8000000000000", + "77e8000000000000", "7808000000000000", "7ea8000000000000", "a808000000000000" ], "edgeNeighbors": [ "7158000000000000", - "77d8000000000000", + "77e8000000000000", "7808000000000000", "7ea8000000000000", "a808000000000000" @@ -2187,7 +2187,7 @@ }, "output": { "neighbors": [ - "760000000000000", + "7a0000000000000", "820000000000000", "8e0000000000000", "6560000000000000", @@ -2195,7 +2195,7 @@ "8020000000000000" ], "edgeNeighbors": [ - "760000000000000", + "7a0000000000000", "820000000000000", "6560000000000000", "7fe0000000000000", @@ -2209,7 +2209,7 @@ }, "output": { "neighbors": [ - "7d8000000000000", + "7e8000000000000", "808000000000000", "818000000000000", "6558000000000000", @@ -2217,7 +2217,7 @@ "8008000000000000" ], "edgeNeighbors": [ - "7d8000000000000", + "7e8000000000000", "808000000000000", "6558000000000000", "7ff8000000000000", @@ -2231,7 +2231,7 @@ }, "output": { "neighbors": [ - "7f6000000000000", + "7fa000000000000", "802000000000000", "80e000000000000", "6556000000000000", @@ -2239,7 +2239,7 @@ "8002000000000000" ], "edgeNeighbors": [ - "7f6000000000000", + "7fa000000000000", "802000000000000", "6556000000000000", "7ffe000000000000", @@ -2491,20 +2491,20 @@ }, "output": { "neighbors": [ - "8cd8000000000000", - "8cf8000000000000", "8d08000000000000", + "8d18000000000000", + "8d28000000000000", + "8df8000000000000", "8e18000000000000", - "8e28000000000000", - "a108000000000000", - "a208000000000000" + "8e48000000000000", + "8f18000000000000" ], "edgeNeighbors": [ - "8cf8000000000000", - "8d08000000000000", + "8d18000000000000", + "8d28000000000000", "8e18000000000000", - "8e28000000000000", - "a108000000000000" + "8e48000000000000", + "8f18000000000000" ] } }, @@ -2514,20 +2514,20 @@ }, "output": { "neighbors": [ - "8c60000000000000", - "8ce0000000000000", "8d20000000000000", + "8de0000000000000", "8e60000000000000", "8ea0000000000000", - "a120000000000000", - "a220000000000000" + "8f20000000000000", + "8f60000000000000", + "8fa0000000000000" ], "edgeNeighbors": [ - "8ce0000000000000", "8d20000000000000", "8e60000000000000", "8ea0000000000000", - "a120000000000000" + "8f20000000000000", + "8f60000000000000" ] } }, @@ -2634,17 +2634,17 @@ }, "output": { "neighbors": [ - "921e000000000000", - "922e000000000000", - "9232000000000000", - "923a000000000000", + "8c72000000000000", + "8c76000000000000", + "8c7a000000000000", + "8c8e000000000000", "925e000000000000", "9266000000000000", "926a000000000000" ], "edgeNeighbors": [ - "922e000000000000", - "923a000000000000", + "8c76000000000000", + "8c7a000000000000", "925e000000000000", "9266000000000000", "926a000000000000" @@ -2730,7 +2730,7 @@ "output": { "neighbors": [ "99a0000000000000", - "9e20000000000000", + "9e60000000000000", "9ea0000000000000", "c7e0000000000000", "c820000000000000", @@ -3134,15 +3134,15 @@ "neighbors": [ "4420000000000000", "ad60000000000000", - "ade0000000000000", - "b360000000000000", + "ada0000000000000", + "b3a0000000000000", "b420000000000000", "baa0000000000000" ], "edgeNeighbors": [ "4420000000000000", "ad60000000000000", - "b360000000000000", + "b3a0000000000000", "b420000000000000", "baa0000000000000" ] @@ -3157,14 +3157,14 @@ "4408000000000000", "ad58000000000000", "ad78000000000000", - "b3d8000000000000", + "b3e8000000000000", "b408000000000000", "baa8000000000000" ], "edgeNeighbors": [ "4408000000000000", "ad58000000000000", - "b3d8000000000000", + "b3e8000000000000", "b408000000000000", "baa8000000000000" ] @@ -3176,7 +3176,7 @@ }, "output": { "neighbors": [ - "b3d8000000000000", + "b3c8000000000000", "b3e8000000000000", "b3f8000000000000", "b428000000000000", @@ -3185,7 +3185,7 @@ "baa8000000000000" ], "edgeNeighbors": [ - "b3d8000000000000", + "b3e8000000000000", "b3f8000000000000", "b428000000000000", "b438000000000000", @@ -3200,7 +3200,7 @@ "output": { "neighbors": [ "b320000000000000", - "b360000000000000", + "b3a0000000000000", "b3e0000000000000", "b460000000000000", "b4a0000000000000", @@ -3208,7 +3208,7 @@ "baa0000000000000" ], "edgeNeighbors": [ - "b360000000000000", + "b3a0000000000000", "b3e0000000000000", "b460000000000000", "b4a0000000000000", @@ -3274,7 +3274,7 @@ "b7fa000000000000", "b802000000000000", "b806000000000000", - "b81e000000000000", + "b812000000000000", "be56000000000000", "c3fe000000000000", "c402000000000000" @@ -3370,14 +3370,14 @@ "3002000000000000", "bff2000000000000", "bffe000000000000", - "c00a000000000000", + "c006000000000000", "cffe000000000000", "d002000000000000" ], "edgeNeighbors": [ "3002000000000000", "bffe000000000000", - "c00a000000000000", + "c006000000000000", "cffe000000000000", "d002000000000000" ] @@ -3414,7 +3414,7 @@ }, "output": { "neighbors": [ - "b788000000000000", + "b7b8000000000000", "b7e8000000000000", "b7f8000000000000", "b808000000000000", @@ -3536,15 +3536,15 @@ "9960000000000000", "9ea0000000000000", "c160000000000000", - "c1e0000000000000", - "c760000000000000", + "c1a0000000000000", + "c7a0000000000000", "cea0000000000000" ], "edgeNeighbors": [ "9960000000000000", "9ea0000000000000", "c160000000000000", - "c760000000000000", + "c7a0000000000000", "cea0000000000000" ] } @@ -3559,14 +3559,14 @@ "9ea8000000000000", "c158000000000000", "c178000000000000", - "c7d8000000000000", + "c7e8000000000000", "cea8000000000000" ], "edgeNeighbors": [ "9958000000000000", "9ea8000000000000", "c158000000000000", - "c7d8000000000000", + "c7e8000000000000", "cea8000000000000" ] } @@ -3602,20 +3602,20 @@ }, "output": { "neighbors": [ + "ca32000000000000", + "ca3e000000000000", "cb82000000000000", "cb86000000000000", "cb8e000000000000", - "cb92000000000000", - "cb9a000000000000", - "d822000000000000", - "d82a000000000000" + "cb96000000000000", + "cb9a000000000000" ], "edgeNeighbors": [ + "ca32000000000000", "cb82000000000000", "cb86000000000000", "cb8e000000000000", - "cb92000000000000", - "d822000000000000" + "cb9a000000000000" ] } }, @@ -3750,20 +3750,20 @@ }, "output": { "neighbors": [ - "c988000000000000", - "c9e8000000000000", - "c9f8000000000000", - "ca18000000000000", - "d8f8000000000000", + "d8c8000000000000", + "d8d8000000000000", + "d8e8000000000000", + "d9f8000000000000", "da18000000000000", - "da28000000000000" + "da48000000000000", + "dad8000000000000" ], "edgeNeighbors": [ - "c9e8000000000000", - "c9f8000000000000", - "d8f8000000000000", + "d8d8000000000000", + "d8e8000000000000", "da18000000000000", - "da28000000000000" + "da48000000000000", + "dad8000000000000" ] } }, @@ -3773,20 +3773,20 @@ }, "output": { "neighbors": [ - "c960000000000000", - "c9a0000000000000", - "c9e0000000000000", - "ca20000000000000", "d8e0000000000000", + "d9e0000000000000", "da60000000000000", - "daa0000000000000" + "daa0000000000000", + "dae0000000000000", + "e320000000000000", + "e3a0000000000000" ], "edgeNeighbors": [ - "c9a0000000000000", - "c9e0000000000000", "d8e0000000000000", "da60000000000000", - "daa0000000000000" + "daa0000000000000", + "dae0000000000000", + "e320000000000000" ] } }, diff --git a/tests/fixtures/traversal/grid-disk.json b/tests/fixtures/traversal/grid-disk.json index 2c52f36..8028b2d 100644 --- a/tests/fixtures/traversal/grid-disk.json +++ b/tests/fixtures/traversal/grid-disk.json @@ -461,16 +461,16 @@ "cellId": "620000000000000", "k": 1, "cells": [ - "1a0000000000000", - "1e0000000000000", "4e0000000000000", "620000000000000", "660000000000000", - "6a0000000000000" + "6a0000000000000", + "6e0000000000000", + "8320000000000000" ], "extraVertexCells": [ - "160000000000000", - "220000000000000" + "5e0000000000000", + "83a0000000000000" ] }, { @@ -508,7 +508,7 @@ "cellId": "5c20000000000000", "k": 1, "cells": [ - "2760000000000000", + "27a0000000000000", "27e0000000000000", "5be0000000000000", "5c20000000000000", @@ -533,7 +533,7 @@ ], "extraVertexCells": [ "6020000000000000", - "6220000000000000" + "6260000000000000" ] }, { @@ -565,7 +565,7 @@ ], "extraVertexCells": [ "8820000000000000", - "8a20000000000000" + "8a60000000000000" ] }, { @@ -645,7 +645,7 @@ "4e0000000000000", "520000000000000", "560000000000000", - "5a0000000000000", + "5e0000000000000", "960000000000000", "9a0000000000000", "9e0000000000000", @@ -656,7 +656,7 @@ "extraVertexCells": [ "1e0000000000000", "2e0000000000000", - "620000000000000", + "660000000000000", "a20000000000000", "d60000000000000", "de0000000000000", @@ -669,30 +669,31 @@ "cellId": "620000000000000", "k": 2, "cells": [ - "120000000000000", "160000000000000", "1a0000000000000", "1e0000000000000", "220000000000000", - "260000000000000", "4a0000000000000", "4e0000000000000", "5a0000000000000", + "5e0000000000000", "620000000000000", "660000000000000", "6a0000000000000", "6e0000000000000", + "82e0000000000000", "8320000000000000", + "8360000000000000", "83a0000000000000", - "83e0000000000000", - "eea0000000000000" + "83e0000000000000" ], "extraVertexCells": [ - "2a0000000000000", - "3a0000000000000", - "420000000000000", - "e960000000000000", - "ee60000000000000" + "460000000000000", + "560000000000000", + "8060000000000000", + "8260000000000000", + "8420000000000000", + "8460000000000000" ] }, { @@ -710,7 +711,7 @@ "bf60000000000000", "bfe0000000000000", "c020000000000000", - "c0a0000000000000", + "c060000000000000", "cfe0000000000000", "d020000000000000", "d060000000000000" @@ -759,7 +760,7 @@ "k": 2, "cells": [ "2160000000000000", - "21e0000000000000", + "21a0000000000000", "2720000000000000", "2760000000000000", "27a0000000000000", @@ -777,8 +778,8 @@ ], "extraVertexCells": [ "2560000000000000", - "25e0000000000000", - "3a60000000000000", + "25a0000000000000", + "3a20000000000000", "5a20000000000000", "5b20000000000000", "5ee0000000000000" @@ -802,7 +803,7 @@ "6060000000000000", "60a0000000000000", "60e0000000000000", - "61a0000000000000", + "61e0000000000000", "6220000000000000", "6260000000000000" ], @@ -834,11 +835,11 @@ "e960000000000000", "e9a0000000000000", "e9e0000000000000", - "ee20000000000000", + "ee60000000000000", "eea0000000000000" ], "extraVertexCells": [ - "660000000000000", + "620000000000000", "8220000000000000", "8320000000000000", "86e0000000000000", @@ -864,7 +865,7 @@ "8860000000000000", "88a0000000000000", "88e0000000000000", - "89a0000000000000", + "89e0000000000000", "8a20000000000000", "8a60000000000000" ], @@ -885,10 +886,10 @@ "7160000000000000", "71a0000000000000", "71e0000000000000", - "7760000000000000", + "77a0000000000000", "77e0000000000000", "7820000000000000", - "78a0000000000000", + "7860000000000000", "7ea0000000000000", "a760000000000000", "a7a0000000000000", @@ -900,7 +901,7 @@ ], "extraVertexCells": [ "78e0000000000000", - "7e20000000000000", + "7e60000000000000", "a4e0000000000000", "a9e0000000000000" ] @@ -948,7 +949,7 @@ "3060000000000000", "bfe0000000000000", "c020000000000000", - "c0a0000000000000", + "c060000000000000", "cf60000000000000", "cfa0000000000000", "cfe0000000000000", diff --git a/tests/fixtures/traversal/lattice-flood-fill.json b/tests/fixtures/traversal/lattice-flood-fill.json index 94693f0..5d8f8d4 100644 --- a/tests/fixtures/traversal/lattice-flood-fill.json +++ b/tests/fixtures/traversal/lattice-flood-fill.json @@ -7,15 +7,15 @@ "5172000000000000" ], "firewallCells": [ - "5146000000000000", + "514a000000000000", "514e000000000000", "5152000000000000", "5156000000000000", "516e000000000000", "517e000000000000", - "63c2000000000000", - "63ca000000000000", + "63d6000000000000", "63da000000000000", + "63ea000000000000", "63f2000000000000", "63fe000000000000", "6aae000000000000", @@ -40,16 +40,16 @@ "5172000000000000" ], "firewallCells": [ - "5182000000000000", - "518a000000000000", + "518e000000000000", "519a000000000000", "51c6000000000000", + "51d6000000000000", "51da000000000000", - "634a000000000000", - "635a000000000000", - "636e000000000000", - "6376000000000000", - "63e6000000000000", + "638a000000000000", + "639e000000000000", + "63a6000000000000", + "63b6000000000000", + "63ca000000000000", "640a000000000000", "6432000000000000", "6a56000000000000", @@ -73,8 +73,8 @@ "517a000000000000" ], "frontierCells": [ - "515a000000000000", - "5162000000000000", + "515e000000000000", + "5166000000000000", "516a000000000000", "517a000000000000" ] @@ -84,21 +84,21 @@ "resolution": 5, "seedCells": [ "5172000000000000", - "515e000000000000", + "515a000000000000", "5172000000000000" ], "firewallCells": [ "5152000000000000", "5156000000000000", - "515a000000000000", + "515e000000000000", "5162000000000000", "5166000000000000", "516a000000000000", "5176000000000000", "517a000000000000", - "63c6000000000000", - "63d2000000000000", - "63d6000000000000", + "63de000000000000", + "63e2000000000000", + "63e6000000000000", "63f2000000000000", "63f6000000000000", "63fa000000000000", @@ -113,19 +113,19 @@ "name": "res3_small_ring", "resolution": 3, "seedCells": [ - "4de0000000000000" + "4da0000000000000" ], "firewallCells": [ "4ce0000000000000", "4d60000000000000", - "4e60000000000000", - "4f60000000000000", - "55e0000000000000", - "5660000000000000", + "4e20000000000000", + "4fa0000000000000", + "55a0000000000000", + "5620000000000000", "5720000000000000" ], "interiorCells": [ - "4da0000000000000", + "4de0000000000000", "4ee0000000000000", "4f20000000000000" ], diff --git a/tests/fixtures/traversal/lattice-neighbors.json b/tests/fixtures/traversal/lattice-neighbors.json index f42c1cf..68fc185 100644 --- a/tests/fixtures/traversal/lattice-neighbors.json +++ b/tests/fixtures/traversal/lattice-neighbors.json @@ -785,7 +785,7 @@ ], "supersetNeighbors": [ "11a8000000000000", - "388000000000000", + "3b8000000000000", "3e8000000000000", "3f8000000000000", "3f8000000000000", @@ -801,30 +801,30 @@ "cell": "608000000000000", "resolution": 4, "edgeOnlyNeighbors": [ - "1e8000000000000", - "1f8000000000000", - "4f8000000000000", - "618000000000000" + "4e8000000000000", + "618000000000000", + "648000000000000" ], "supersetNeighbors": [ - "188000000000000", - "1e8000000000000", - "1f8000000000000", - "218000000000000", - "4a8000000000000", "4c8000000000000", "4d8000000000000", - "4f8000000000000", + "4e8000000000000", + "5e8000000000000", + "5f8000000000000", "618000000000000", - "628000000000000", - "648000000000000" + "638000000000000", + "648000000000000", + "658000000000000", + "668000000000000", + "678000000000000", + "6d8000000000000" ] }, { "cell": "7f8000000000000", "resolution": 4, "edgeOnlyNeighbors": [ - "7d8000000000000", + "7e8000000000000", "8008000000000000", "808000000000000" ], @@ -844,7 +844,7 @@ "resolution": 4, "edgeOnlyNeighbors": [ "1ff8000000000000", - "2028000000000000", + "2018000000000000", "2958000000000000" ], "supersetNeighbors": [ @@ -862,23 +862,23 @@ "cell": "2208000000000000", "resolution": 4, "edgeOnlyNeighbors": [ - "20f8000000000000", - "2108000000000000", + "2128000000000000", "2218000000000000", - "2908000000000000" + "2248000000000000" ], "supersetNeighbors": [ - "20d8000000000000", - "20e8000000000000", - "20f8000000000000", "2108000000000000", "2118000000000000", "2128000000000000", + "21e8000000000000", + "21f8000000000000", "2218000000000000", - "2228000000000000", + "2238000000000000", "2248000000000000", - "2908000000000000", - "2a08000000000000" + "2258000000000000", + "2268000000000000", + "2278000000000000", + "2318000000000000" ] }, { @@ -931,10 +931,10 @@ "edgeOnlyNeighbors": [ "31f8000000000000", "3218000000000000", - "32a8000000000000" + "32b8000000000000" ], "supersetNeighbors": [ - "3158000000000000", + "3178000000000000", "3188000000000000", "31d8000000000000", "31e8000000000000", @@ -944,8 +944,8 @@ "3278000000000000", "3288000000000000", "3298000000000000", - "32a8000000000000", - "32f8000000000000" + "32b8000000000000", + "32c8000000000000" ] }, { @@ -962,7 +962,7 @@ "33d8000000000000", "33e8000000000000", "3408000000000000", - "3428000000000000", + "3418000000000000", "bc08000000000000", "bc18000000000000", "bc38000000000000" @@ -973,7 +973,7 @@ "resolution": 4, "edgeOnlyNeighbors": [ "3558000000000000", - "3c28000000000000", + "3c18000000000000", "4ea8000000000000" ], "supersetNeighbors": [ @@ -991,23 +991,23 @@ "cell": "3e08000000000000", "resolution": 4, "edgeOnlyNeighbors": [ - "3508000000000000", - "3cf8000000000000", - "3d08000000000000", - "3e18000000000000" + "3d28000000000000", + "3e18000000000000", + "3e48000000000000" ], "supersetNeighbors": [ - "3508000000000000", - "3608000000000000", - "3cd8000000000000", - "3ce8000000000000", - "3cf8000000000000", "3d08000000000000", "3d18000000000000", "3d28000000000000", + "3de8000000000000", + "3df8000000000000", "3e18000000000000", - "3e28000000000000", - "3e48000000000000" + "3e38000000000000", + "3e48000000000000", + "3e58000000000000", + "3e68000000000000", + "3e78000000000000", + "3f18000000000000" ] }, { @@ -1028,7 +1028,7 @@ "4008000000000000", "4008000000000000", "4018000000000000", - "4078000000000000", + "4048000000000000", "4658000000000000", "4bf8000000000000", "4c08000000000000", @@ -1039,13 +1039,13 @@ "cell": "5c08000000000000", "resolution": 4, "edgeOnlyNeighbors": [ - "27d8000000000000", + "27e8000000000000", "27f8000000000000", "5bf8000000000000", "5c28000000000000" ], "supersetNeighbors": [ - "27d8000000000000", + "27c8000000000000", "27e8000000000000", "27f8000000000000", "5be8000000000000", @@ -1059,23 +1059,23 @@ "cell": "5e08000000000000", "resolution": 4, "edgeOnlyNeighbors": [ - "5e28000000000000", + "5e18000000000000", "5e58000000000000", - "5fa8000000000000" + "60b8000000000000", + "60c8000000000000" ], "supersetNeighbors": [ + "5df8000000000000", "5e18000000000000", "5e28000000000000", "5e38000000000000", "5e48000000000000", "5e58000000000000", "5e68000000000000", - "5ef8000000000000", - "5f08000000000000", - "5f78000000000000", - "5f98000000000000", - "5fa8000000000000", - "5fb8000000000000" + "60a8000000000000", + "60b8000000000000", + "60c8000000000000", + "6258000000000000" ] }, { @@ -1096,7 +1096,7 @@ "59a8000000000000", "59b8000000000000", "59c8000000000000", - "5f88000000000000", + "5fb8000000000000", "5fd8000000000000", "5fe8000000000000", "6008000000000000", @@ -1119,7 +1119,7 @@ "67f8000000000000", "6818000000000000", "6828000000000000", - "6878000000000000", + "6848000000000000", "6e38000000000000", "6e48000000000000", "6e58000000000000", @@ -1133,7 +1133,7 @@ "resolution": 4, "edgeOnlyNeighbors": [ "6468000000000000", - "69b8000000000000", + "69a8000000000000", "6a18000000000000" ], "supersetNeighbors": [ @@ -1141,8 +1141,8 @@ "6738000000000000", "6988000000000000", "6998000000000000", - "69b8000000000000", - "69e8000000000000", + "69a8000000000000", + "69f8000000000000", "6a18000000000000", "6a28000000000000", "6a78000000000000" @@ -1153,14 +1153,14 @@ "resolution": 4, "edgeOnlyNeighbors": [ "5008000000000000", - "5028000000000000", + "5018000000000000", "6bd8000000000000", "6c08000000000000" ], "supersetNeighbors": [ "5008000000000000", "5018000000000000", - "5028000000000000", + "5038000000000000", "6bc8000000000000", "6bd8000000000000", "6be8000000000000", @@ -1192,23 +1192,23 @@ "cell": "8608000000000000", "resolution": 4, "edgeOnlyNeighbors": [ - "8628000000000000", + "8618000000000000", "8658000000000000", - "87a8000000000000" + "88b8000000000000", + "88c8000000000000" ], "supersetNeighbors": [ + "85f8000000000000", "8618000000000000", "8628000000000000", "8638000000000000", "8648000000000000", "8658000000000000", "8668000000000000", - "86f8000000000000", - "8708000000000000", - "8778000000000000", - "8798000000000000", - "87a8000000000000", - "87b8000000000000" + "88a8000000000000", + "88b8000000000000", + "88c8000000000000", + "8a58000000000000" ] }, { @@ -1229,7 +1229,7 @@ "81a8000000000000", "81b8000000000000", "81c8000000000000", - "8788000000000000", + "87b8000000000000", "87d8000000000000", "87e8000000000000", "8808000000000000", @@ -1260,23 +1260,23 @@ "cell": "9a08000000000000", "resolution": 4, "edgeOnlyNeighbors": [ - "9a28000000000000", + "9a18000000000000", "9a58000000000000", - "9ba8000000000000" + "9cb8000000000000", + "9cc8000000000000" ], "supersetNeighbors": [ + "99f8000000000000", "9a18000000000000", "9a28000000000000", "9a38000000000000", "9a48000000000000", "9a58000000000000", "9a68000000000000", - "9af8000000000000", - "9b08000000000000", - "9b78000000000000", - "9b98000000000000", - "9ba8000000000000", - "9bb8000000000000" + "9ca8000000000000", + "9cb8000000000000", + "9cc8000000000000", + "9e58000000000000" ] }, { @@ -1297,7 +1297,7 @@ "95a8000000000000", "95b8000000000000", "95c8000000000000", - "9b88000000000000", + "9bb8000000000000", "9bd8000000000000", "9be8000000000000", "9c08000000000000", @@ -1329,10 +1329,10 @@ "edgeOnlyNeighbors": [ "a9f8000000000000", "aa18000000000000", - "aaa8000000000000" + "aab8000000000000" ], "supersetNeighbors": [ - "a958000000000000", + "a978000000000000", "a988000000000000", "a9d8000000000000", "a9e8000000000000", @@ -1342,8 +1342,8 @@ "aa78000000000000", "aa88000000000000", "aa98000000000000", - "aaa8000000000000", - "aaf8000000000000" + "aab8000000000000", + "aac8000000000000" ] }, { @@ -1351,32 +1351,32 @@ "resolution": 4, "edgeOnlyNeighbors": [ "7008000000000000", - "7028000000000000", + "7018000000000000", "abd8000000000000", "ac08000000000000" ], "supersetNeighbors": [ "7008000000000000", "7018000000000000", - "7028000000000000", + "7038000000000000", "abc8000000000000", "abd8000000000000", "abe8000000000000", "ac08000000000000", - "ac28000000000000" + "ac18000000000000" ] }, { "cell": "b408000000000000", "resolution": 4, "edgeOnlyNeighbors": [ - "b3d8000000000000", + "b3e8000000000000", "b3f8000000000000", "b428000000000000", "baa8000000000000" ], "supersetNeighbors": [ - "b3d8000000000000", + "b3c8000000000000", "b3e8000000000000", "b3f8000000000000", "b418000000000000", @@ -1390,23 +1390,23 @@ "cell": "b608000000000000", "resolution": 4, "edgeOnlyNeighbors": [ - "b628000000000000", + "b618000000000000", "b658000000000000", - "b7a8000000000000" + "c4b8000000000000", + "c4c8000000000000" ], "supersetNeighbors": [ + "b5f8000000000000", "b618000000000000", "b628000000000000", "b638000000000000", "b648000000000000", "b658000000000000", "b668000000000000", - "b6f8000000000000", - "b708000000000000", - "b778000000000000", - "b798000000000000", - "b7a8000000000000", - "b7b8000000000000" + "c4a8000000000000", + "c4b8000000000000", + "c4c8000000000000", + "c658000000000000" ] }, { @@ -1421,13 +1421,13 @@ "c408000000000000" ], "supersetNeighbors": [ - "b788000000000000", + "b7b8000000000000", "b7d8000000000000", "b7e8000000000000", "b808000000000000", "b808000000000000", "b818000000000000", - "b878000000000000", + "b848000000000000", "be58000000000000", "c3f8000000000000", "c408000000000000", @@ -1459,10 +1459,10 @@ "edgeOnlyNeighbors": [ "d1f8000000000000", "d218000000000000", - "d2a8000000000000" + "d2b8000000000000" ], "supersetNeighbors": [ - "d158000000000000", + "d178000000000000", "d188000000000000", "d1d8000000000000", "d1e8000000000000", @@ -1472,8 +1472,8 @@ "d278000000000000", "d288000000000000", "d298000000000000", - "d2a8000000000000", - "d2f8000000000000" + "d2b8000000000000", + "d2c8000000000000" ] }, { @@ -1493,7 +1493,7 @@ "d3d8000000000000", "d3e8000000000000", "d408000000000000", - "d428000000000000" + "d418000000000000" ] }, { @@ -1501,7 +1501,7 @@ "resolution": 4, "edgeOnlyNeighbors": [ "1bf8000000000000", - "dc28000000000000", + "dc18000000000000", "e2a8000000000000" ], "supersetNeighbors": [ @@ -1519,23 +1519,23 @@ "cell": "de08000000000000", "resolution": 4, "edgeOnlyNeighbors": [ - "1b08000000000000", - "dcf8000000000000", - "dd08000000000000", - "de18000000000000" + "dd28000000000000", + "de18000000000000", + "de48000000000000" ], "supersetNeighbors": [ - "1958000000000000", - "1b08000000000000", - "dcd8000000000000", - "dce8000000000000", - "dcf8000000000000", "dd08000000000000", "dd18000000000000", "dd28000000000000", + "dde8000000000000", + "ddf8000000000000", "de18000000000000", - "de28000000000000", - "de48000000000000" + "de38000000000000", + "de48000000000000", + "de58000000000000", + "de68000000000000", + "de78000000000000", + "df18000000000000" ] }, { @@ -1576,7 +1576,7 @@ ], "supersetNeighbors": [ "11aa800000000000", - "3f8800000000000", + "3fb800000000000", "3fe800000000000", "3ff800000000000", "3ff800000000000", @@ -1592,30 +1592,30 @@ "cell": "600800000000000", "resolution": 6, "edgeOnlyNeighbors": [ - "1fe800000000000", - "1ff800000000000", - "4ff800000000000", - "601800000000000" + "4e5800000000000", + "601800000000000", + "615800000000000" ], "supersetNeighbors": [ - "1f8800000000000", - "1fe800000000000", - "1ff800000000000", - "215800000000000", - "4aa800000000000", - "4fc800000000000", - "4fd800000000000", - "4ff800000000000", + "4e3800000000000", + "4e4800000000000", + "4e5800000000000", + "5ea800000000000", + "5ff800000000000", "601800000000000", "602800000000000", - "604800000000000" + "603800000000000", + "614800000000000", + "615800000000000", + "617800000000000", + "6da800000000000" ] }, { "cell": "7ff800000000000", "resolution": 6, "edgeOnlyNeighbors": [ - "7fd800000000000", + "7fe800000000000", "8000800000000000", "800800000000000" ], @@ -1635,7 +1635,7 @@ "resolution": 6, "edgeOnlyNeighbors": [ "1fff800000000000", - "2002800000000000", + "2001800000000000", "2955800000000000" ], "supersetNeighbors": [ @@ -1653,23 +1653,23 @@ "cell": "2200800000000000", "resolution": 6, "edgeOnlyNeighbors": [ - "20ff800000000000", - "2100800000000000", + "2125800000000000", "2201800000000000", - "2900800000000000" + "2215800000000000" ], "supersetNeighbors": [ - "20fd800000000000", - "20fe800000000000", - "20ff800000000000", - "2100800000000000", - "2101800000000000", - "2102800000000000", + "2123800000000000", + "2124800000000000", + "2125800000000000", + "21ea800000000000", + "21ff800000000000", "2201800000000000", "2202800000000000", - "2204800000000000", - "2900800000000000", - "2a00800000000000" + "2203800000000000", + "2214800000000000", + "2215800000000000", + "2217800000000000", + "231a800000000000" ] }, { @@ -1722,21 +1722,21 @@ "edgeOnlyNeighbors": [ "31ff800000000000", "3201800000000000", - "32aa800000000000" + "32bf800000000000" ], "supersetNeighbors": [ - "3155800000000000", + "317f800000000000", "3180800000000000", "31fd800000000000", "31fe800000000000", "31ff800000000000", "3201800000000000", "3202800000000000", - "3207800000000000", - "32a8800000000000", - "32a9800000000000", - "32aa800000000000", - "32ff800000000000" + "3204800000000000", + "32bd800000000000", + "32be800000000000", + "32bf800000000000", + "32c0800000000000" ] }, { @@ -1753,7 +1753,7 @@ "33fd800000000000", "33fe800000000000", "3400800000000000", - "3402800000000000", + "3401800000000000", "bc00800000000000", "bc01800000000000", "bc03800000000000" @@ -1764,7 +1764,7 @@ "resolution": 6, "edgeOnlyNeighbors": [ "3555800000000000", - "3c02800000000000", + "3c01800000000000", "4eaa800000000000" ], "supersetNeighbors": [ @@ -1782,23 +1782,23 @@ "cell": "3e00800000000000", "resolution": 6, "edgeOnlyNeighbors": [ - "3500800000000000", - "3cff800000000000", - "3d00800000000000", - "3e01800000000000" + "3d25800000000000", + "3e01800000000000", + "3e15800000000000" ], "supersetNeighbors": [ - "3500800000000000", - "3600800000000000", - "3cfd800000000000", - "3cfe800000000000", - "3cff800000000000", - "3d00800000000000", - "3d01800000000000", - "3d02800000000000", + "3d23800000000000", + "3d24800000000000", + "3d25800000000000", + "3dea800000000000", + "3dff800000000000", "3e01800000000000", "3e02800000000000", - "3e04800000000000" + "3e03800000000000", + "3e14800000000000", + "3e15800000000000", + "3e17800000000000", + "3f1a800000000000" ] }, { @@ -1819,7 +1819,7 @@ "4000800000000000", "4000800000000000", "4001800000000000", - "4007800000000000", + "4004800000000000", "4655800000000000", "4bff800000000000", "4c00800000000000", @@ -1830,13 +1830,13 @@ "cell": "5c00800000000000", "resolution": 6, "edgeOnlyNeighbors": [ - "27fd800000000000", + "27fe800000000000", "27ff800000000000", "5bff800000000000", "5c02800000000000" ], "supersetNeighbors": [ - "27fd800000000000", + "27fc800000000000", "27fe800000000000", "27ff800000000000", "5bfe800000000000", @@ -1850,23 +1850,23 @@ "cell": "5e00800000000000", "resolution": 6, "edgeOnlyNeighbors": [ - "5e02800000000000", + "5e01800000000000", "5e55800000000000", - "5faa800000000000" + "60bf800000000000", + "60c0800000000000" ], "supersetNeighbors": [ + "5dff800000000000", "5e01800000000000", "5e02800000000000", "5e03800000000000", "5e54800000000000", "5e55800000000000", "5e56800000000000", - "5eff800000000000", - "5f00800000000000", - "5f7f800000000000", - "5fa9800000000000", - "5faa800000000000", - "5fab800000000000" + "60be800000000000", + "60bf800000000000", + "60c0800000000000", + "6255800000000000" ] }, { @@ -1887,7 +1887,7 @@ "59aa800000000000", "59ab800000000000", "59ac800000000000", - "5ff8800000000000", + "5ffb800000000000", "5ffd800000000000", "5ffe800000000000", "6000800000000000", @@ -1910,7 +1910,7 @@ "67ff800000000000", "6801800000000000", "6802800000000000", - "6807800000000000", + "6804800000000000", "6e53800000000000", "6e54800000000000", "6e55800000000000", @@ -1924,19 +1924,19 @@ "resolution": 6, "edgeOnlyNeighbors": [ "646a800000000000", - "69bf800000000000", + "69aa800000000000", "6a01800000000000" ], "supersetNeighbors": [ "646a800000000000", "673f800000000000", - "69bc800000000000", - "69bd800000000000", - "69bf800000000000", - "69ea800000000000", + "69a8800000000000", + "69a9800000000000", + "69aa800000000000", + "69ff800000000000", "6a01800000000000", "6a02800000000000", - "6a07800000000000" + "6a04800000000000" ] }, { @@ -1944,14 +1944,14 @@ "resolution": 6, "edgeOnlyNeighbors": [ "5000800000000000", - "5002800000000000", + "5001800000000000", "6bfd800000000000", "6c00800000000000" ], "supersetNeighbors": [ "5000800000000000", "5001800000000000", - "5002800000000000", + "5003800000000000", "6bfc800000000000", "6bfd800000000000", "6bfe800000000000", @@ -1983,23 +1983,23 @@ "cell": "8600800000000000", "resolution": 6, "edgeOnlyNeighbors": [ - "8602800000000000", + "8601800000000000", "8655800000000000", - "87aa800000000000" + "88bf800000000000", + "88c0800000000000" ], "supersetNeighbors": [ + "85ff800000000000", "8601800000000000", "8602800000000000", "8603800000000000", "8654800000000000", "8655800000000000", "8656800000000000", - "86ff800000000000", - "8700800000000000", - "877f800000000000", - "87a9800000000000", - "87aa800000000000", - "87ab800000000000" + "88be800000000000", + "88bf800000000000", + "88c0800000000000", + "8a55800000000000" ] }, { @@ -2020,7 +2020,7 @@ "81aa800000000000", "81ab800000000000", "81ac800000000000", - "87f8800000000000", + "87fb800000000000", "87fd800000000000", "87fe800000000000", "8800800000000000", @@ -2051,23 +2051,23 @@ "cell": "9a00800000000000", "resolution": 6, "edgeOnlyNeighbors": [ - "9a02800000000000", + "9a01800000000000", "9a55800000000000", - "9baa800000000000" + "9cbf800000000000", + "9cc0800000000000" ], "supersetNeighbors": [ + "99ff800000000000", "9a01800000000000", "9a02800000000000", "9a03800000000000", "9a54800000000000", "9a55800000000000", "9a56800000000000", - "9aff800000000000", - "9b00800000000000", - "9b7f800000000000", - "9ba9800000000000", - "9baa800000000000", - "9bab800000000000" + "9cbe800000000000", + "9cbf800000000000", + "9cc0800000000000", + "9e55800000000000" ] }, { @@ -2088,7 +2088,7 @@ "95aa800000000000", "95ab800000000000", "95ac800000000000", - "9bf8800000000000", + "9bfb800000000000", "9bfd800000000000", "9bfe800000000000", "9c00800000000000", @@ -2120,21 +2120,21 @@ "edgeOnlyNeighbors": [ "a9ff800000000000", "aa01800000000000", - "aaaa800000000000" + "aabf800000000000" ], "supersetNeighbors": [ - "a955800000000000", + "a97f800000000000", "a980800000000000", "a9fd800000000000", "a9fe800000000000", "a9ff800000000000", "aa01800000000000", "aa02800000000000", - "aa07800000000000", - "aaa8800000000000", - "aaa9800000000000", - "aaaa800000000000", - "aaff800000000000" + "aa04800000000000", + "aabd800000000000", + "aabe800000000000", + "aabf800000000000", + "aac0800000000000" ] }, { @@ -2142,32 +2142,32 @@ "resolution": 6, "edgeOnlyNeighbors": [ "7000800000000000", - "7002800000000000", + "7001800000000000", "abfd800000000000", "ac00800000000000" ], "supersetNeighbors": [ "7000800000000000", "7001800000000000", - "7002800000000000", + "7003800000000000", "abfc800000000000", "abfd800000000000", "abfe800000000000", "ac00800000000000", - "ac02800000000000" + "ac01800000000000" ] }, { "cell": "b400800000000000", "resolution": 6, "edgeOnlyNeighbors": [ - "b3fd800000000000", + "b3fe800000000000", "b3ff800000000000", "b402800000000000", "baaa800000000000" ], "supersetNeighbors": [ - "b3fd800000000000", + "b3fc800000000000", "b3fe800000000000", "b3ff800000000000", "b401800000000000", @@ -2181,23 +2181,23 @@ "cell": "b600800000000000", "resolution": 6, "edgeOnlyNeighbors": [ - "b602800000000000", + "b601800000000000", "b655800000000000", - "b7aa800000000000" + "c4bf800000000000", + "c4c0800000000000" ], "supersetNeighbors": [ + "b5ff800000000000", "b601800000000000", "b602800000000000", "b603800000000000", "b654800000000000", "b655800000000000", "b656800000000000", - "b6ff800000000000", - "b700800000000000", - "b77f800000000000", - "b7a9800000000000", - "b7aa800000000000", - "b7ab800000000000" + "c4be800000000000", + "c4bf800000000000", + "c4c0800000000000", + "c655800000000000" ] }, { @@ -2212,13 +2212,13 @@ "c400800000000000" ], "supersetNeighbors": [ - "b7f8800000000000", + "b7fb800000000000", "b7fd800000000000", "b7fe800000000000", "b800800000000000", "b800800000000000", "b801800000000000", - "b807800000000000", + "b804800000000000", "be55800000000000", "c3ff800000000000", "c400800000000000", @@ -2250,21 +2250,21 @@ "edgeOnlyNeighbors": [ "d1ff800000000000", "d201800000000000", - "d2aa800000000000" + "d2bf800000000000" ], "supersetNeighbors": [ - "d155800000000000", + "d17f800000000000", "d180800000000000", "d1fd800000000000", "d1fe800000000000", "d1ff800000000000", "d201800000000000", "d202800000000000", - "d207800000000000", - "d2a8800000000000", - "d2a9800000000000", - "d2aa800000000000", - "d2ff800000000000" + "d204800000000000", + "d2bd800000000000", + "d2be800000000000", + "d2bf800000000000", + "d2c0800000000000" ] }, { @@ -2284,7 +2284,7 @@ "d3fd800000000000", "d3fe800000000000", "d400800000000000", - "d402800000000000" + "d401800000000000" ] }, { @@ -2292,7 +2292,7 @@ "resolution": 6, "edgeOnlyNeighbors": [ "1bff800000000000", - "dc02800000000000", + "dc01800000000000", "e2aa800000000000" ], "supersetNeighbors": [ @@ -2310,23 +2310,23 @@ "cell": "de00800000000000", "resolution": 6, "edgeOnlyNeighbors": [ - "1b00800000000000", - "dcff800000000000", - "dd00800000000000", - "de01800000000000" + "dd25800000000000", + "de01800000000000", + "de15800000000000" ], "supersetNeighbors": [ - "1955800000000000", - "1b00800000000000", - "dcfd800000000000", - "dcfe800000000000", - "dcff800000000000", - "dd00800000000000", - "dd01800000000000", - "dd02800000000000", + "dd23800000000000", + "dd24800000000000", + "dd25800000000000", + "ddea800000000000", + "ddff800000000000", "de01800000000000", "de02800000000000", - "de04800000000000" + "de03800000000000", + "de14800000000000", + "de15800000000000", + "de17800000000000", + "df1a800000000000" ] }, { diff --git a/tests/fixtures/traversal/line.json b/tests/fixtures/traversal/line.json index 00b9122..ac109b8 100644 --- a/tests/fixtures/traversal/line.json +++ b/tests/fixtures/traversal/line.json @@ -13,7 +13,7 @@ "resolution": 3, "cells": [ "5160000000000000", - "6360000000000000", + "63a0000000000000", "63e0000000000000" ] }, @@ -31,7 +31,7 @@ "cells": [ "5160000000000000", "6320000000000000", - "6360000000000000", + "63a0000000000000", "63e0000000000000", "6a60000000000000", "6ae0000000000000" @@ -66,10 +66,10 @@ ], "resolution": 3, "cells": [ - "4de0000000000000", + "4da0000000000000", "4f20000000000000", - "4fa0000000000000", - "55e0000000000000", + "4f60000000000000", + "55a0000000000000", "56e0000000000000" ] } diff --git a/tests/fixtures/traversal/quintant-neighbors.json b/tests/fixtures/traversal/quintant-neighbors.json index 9404227..c8660ad 100644 --- a/tests/fixtures/traversal/quintant-neighbors.json +++ b/tests/fixtures/traversal/quintant-neighbors.json @@ -22,11 +22,11 @@ "neighbors": [ 1633, 1634, - 1636, + 1635, 1637, 1639, 1640, - 1643 + 1641 ] } }, @@ -74,13 +74,13 @@ }, "output": { "neighbors": [ - 6545, - 6551, + 6532, + 6542, + 6546, + 6547, + 6548, 6552, - 6554, - 6555, - 6557, - 6559 + 6554 ] } }, @@ -92,9 +92,9 @@ }, "output": { "neighbors": [ - 7164, - 7167, - 7850, + 6824, + 6826, + 8191, 8193, 8194 ] @@ -109,12 +109,12 @@ "output": { "neighbors": [ 9825, - 9826, + 9827, 9828, 9829, 9831, 9832, - 9835 + 9838 ] } }, @@ -162,13 +162,13 @@ }, "output": { "neighbors": [ - 14737, - 14743, 14744, 14746, 14747, - 14749, - 14751 + 14748, + 14750, + 14768, + 14771 ] } }, @@ -198,8 +198,8 @@ 1635, 1637, 1639, - 1641, - 1643 + 1640, + 1641 ] } }, @@ -211,13 +211,13 @@ }, "output": { "neighbors": [ + 3275, 3277, - 3278, - 3288, - 3290, - 3291, - 3300, - 3310 + 3319, + 3320, + 3321, + 3340, + 3369 ] } }, @@ -229,13 +229,13 @@ }, "output": { "neighbors": [ + 4822, + 4851, + 4870, + 4871, + 4872, 4914, - 4918, - 4920, - 4921, - 4923, - 4963, - 4968 + 4916 ] } }, @@ -247,12 +247,12 @@ }, "output": { "neighbors": [ - 6549, + 6545, 6551, 6552, 6554, + 6555, 6556, - 6557, 6558 ] } @@ -265,9 +265,13 @@ }, "output": { "neighbors": [ - 4095, + 3667, + 3668, + 3669, + 8191, 8193, - 8194 + 8533, + 11690 ] } }, @@ -280,12 +284,12 @@ "output": { "neighbors": [ 9825, - 9826, 9827, + 9828, 9829, 9831, - 9833, - 9835 + 9832, + 9838 ] } }, @@ -297,13 +301,13 @@ }, "output": { "neighbors": [ + 11465, + 11467, 11469, 11470, - 11480, - 11482, - 11483, - 11492, - 11502 + 11472, + 11473, + 11474 ] } }, @@ -315,13 +319,13 @@ }, "output": { "neighbors": [ + 13093, + 13100, + 13101, + 13103, + 13104, 13106, - 13110, - 13112, - 13113, - 13115, - 13155, - 13160 + 13108 ] } }, @@ -333,13 +337,13 @@ }, "output": { "neighbors": [ - 5732, - 5734, 14741, - 14742, + 14743, 14744, 14746, - 14747 + 14747, + 14748, + 14749 ] } }, @@ -364,13 +368,13 @@ }, "output": { "neighbors": [ - 1632, - 1634, + 1612, + 1615, + 1633, + 1635, 1636, 1637, - 1639, - 1640, - 1646 + 1639 ] } }, @@ -418,12 +422,12 @@ }, "output": { "neighbors": [ - 6548, + 6545, 6551, 6552, 6554, 6555, - 6557, + 6556, 6558 ] } @@ -436,13 +440,9 @@ }, "output": { "neighbors": [ - 8194, - 8195, - 9556, - 9557, - 9558, - 15017, - 15018 + 8191, + 8193, + 9557 ] } }, @@ -454,13 +454,13 @@ }, "output": { "neighbors": [ - 9824, - 9826, - 9828, 9829, 9831, - 9832, - 9838 + 9835, + 9836, + 9837, + 9841, + 9851 ] } }, @@ -508,11 +508,11 @@ }, "output": { "neighbors": [ - 14740, + 14742, 14743, 14744, 14746, - 14747, + 14748, 14749, 14750 ] @@ -539,13 +539,13 @@ }, "output": { "neighbors": [ - 1632, - 1634, + 1612, + 1615, + 1633, + 1635, 1636, 1637, - 1639, - 1640, - 1646 + 1639 ] } }, @@ -575,13 +575,13 @@ }, "output": { "neighbors": [ - 4901, - 4908, 4909, + 4910, 4911, - 4912, + 4913, 4914, - 4916 + 4916, + 4918 ] } }, @@ -593,12 +593,12 @@ }, "output": { "neighbors": [ - 6548, + 6545, 6551, 6552, 6554, 6555, - 6557, + 6556, 6558 ] } @@ -634,7 +634,7 @@ 9828, 9829, 9831, - 9835, + 9833, 9836 ] } @@ -701,7 +701,7 @@ }, "output": { "neighbors": [ - 2 + 1 ] } }, @@ -713,13 +713,13 @@ }, "output": { "neighbors": [ + 1634, + 1635, 1636, 1637, 1639, - 1641, - 1642, - 10649, - 10651 + 1640, + 1642 ] } }, @@ -731,13 +731,13 @@ }, "output": { "neighbors": [ - 3223, - 3228, - 3268, - 3270, - 3271, - 3273, - 3277 + 3275, + 3277, + 3279, + 3280, + 3282, + 3283, + 3290 ] } }, @@ -749,13 +749,13 @@ }, "output": { "neighbors": [ - 4881, - 4891, - 4900, - 4901, - 4903, + 4909, + 4910, + 4911, 4913, - 4914 + 4914, + 4916, + 4918 ] } }, @@ -767,12 +767,12 @@ }, "output": { "neighbors": [ - 6548, - 6550, + 6545, + 6551, 6552, 6554, + 6555, 6556, - 6557, 6558 ] } @@ -785,11 +785,13 @@ }, "output": { "neighbors": [ - 4093, - 4095, - 4096, + 4691, + 4692, + 4693, + 8191, 8193, - 8194 + 8533, + 12714 ] } }, @@ -802,12 +804,12 @@ "output": { "neighbors": [ 9825, - 9826, 9827, + 9828, 9829, 9831, 9832, - 9834 + 9838 ] } }, @@ -819,13 +821,13 @@ }, "output": { "neighbors": [ - 11415, - 11420, - 11460, - 11462, - 11463, - 11465, - 11469 + 11467, + 11469, + 11511, + 11512, + 11513, + 11532, + 11561 ] } }, @@ -837,13 +839,13 @@ }, "output": { "neighbors": [ - 13073, - 13083, - 13092, - 13093, - 13095, - 13105, - 13106 + 13014, + 13043, + 13062, + 13063, + 13064, + 13106, + 13108 ] } }, @@ -855,8 +857,8 @@ }, "output": { "neighbors": [ - 14740, 14742, + 14743, 14744, 14746, 14748, @@ -940,7 +942,7 @@ "output": { "neighbors": [ 6547, - 6548, + 6550, 6552, 6554, 6555, @@ -957,13 +959,13 @@ }, "output": { "neighbors": [ - 5461, + 6143, 6144, 8190, 8191, 8193, 8194, - 10922 + 11263 ] } }, @@ -976,12 +978,12 @@ "output": { "neighbors": [ 9825, - 9826, + 9827, 9828, 9829, 9831, 9832, - 9835 + 9838 ] } }, @@ -993,13 +995,13 @@ }, "output": { "neighbors": [ + 11465, 11467, 11469, - 11471, + 11470, 11472, - 11474, - 11475, - 11482 + 11473, + 11474 ] } }, @@ -1029,13 +1031,13 @@ }, "output": { "neighbors": [ - 14737, - 14743, 14744, 14746, 14747, - 14749, - 14751 + 14748, + 14750, + 14768, + 14771 ] } } diff --git a/tests/fixtures/utils/spiral.json b/tests/fixtures/utils/spiral.json deleted file mode 100644 index 31770e0..0000000 --- a/tests/fixtures/utils/spiral.json +++ /dev/null @@ -1,922 +0,0 @@ -{ - "sampleCount": 24, - "spiral": [ - { - "name": "equator_low_res", - "center": [ - 0.5, - 1.5707963267948966 - ], - "scaleRad": 1.2217304763960306, - "sampleCount": 24, - "samples": [ - [ - 0.8592298767674167, - 0.5130199024921893, - -0.030377594290314974 - ], - [ - 0.8426400791141796, - 0.5433873212729783, - 0.06512077656001185 - ], - [ - 0.9148233953693096, - 0.41125665130529765, - 0.12433795987699575 - ], - [ - 0.9643467756177951, - 0.320604717242963, - -0.07388590566845617 - ], - [ - 0.8523821698752342, - 0.5255545476694466, - -0.23862537384598662 - ], - [ - 0.7371564685853693, - 0.736473768747596, - 0.013488523264033932 - ], - [ - 0.8571715263536136, - 0.5167876835312797, - 0.33942493682702113 - ], - [ - 1.0568877406349833, - 0.15120962113883324, - 0.11388064343824085 - ], - [ - 0.9723962969776923, - 0.3058701711981002, - -0.39285256311328254 - ], - [ - 0.6892626877051473, - 0.824142746695878, - -0.29073308814980336 - ], - [ - 0.6912810877682496, - 0.820448083163242, - 0.3714399735473625 - ], - [ - 1.034478856131609, - 0.1922288035776924, - 0.4866235408258444 - ], - [ - 1.1555359968457009, - -0.029364790054826506, - -0.25976948623764173 - ], - [ - 0.7962909340111833, - 0.628228867063702, - -0.6628246771335342 - ], - [ - 0.5272594048781216, - 1.120687752282203, - 0.058323129832977556 - ], - [ - 0.8434613038097045, - 0.5418840719186447, - 0.7786616836418222 - ], - [ - 1.2622915510811414, - -0.22477951934265727, - 0.2151376188717562 - ], - [ - 1.0544374453881014, - 0.15569486616989459, - -0.7985598205229467 - ], - [ - 0.5110726767144722, - 1.1503173646722942, - -0.5269867815804341 - ], - [ - 0.5499305294069579, - 1.0791885317995793, - 0.698719347130111 - ], - [ - 1.1657232673435338, - -0.04801247470308101, - 0.8318536697321097 - ], - [ - 1.340612936107934, - -0.3681458403806175, - -0.4723501947745631 - ], - [ - 0.7265543249421229, - 0.7558808735758038, - -1.0789444015039178 - ], - [ - 0.3188866816065695, - 1.502111449149764, - 0.1325743968310346 - ] - ] - }, - { - "name": "equator_high_res", - "center": [ - 0.5, - 1.5707963267948966 - ], - "scaleRad": 0.019089538693687978, - "sampleCount": 24, - "samples": [ - [ - 0.8772958011853266, - 0.4799504505399528, - -0.0004746499107861112 - ], - [ - 0.8770365855969947, - 0.48042494145840264, - 0.0010175121337502454 - ], - [ - 0.8781644499134812, - 0.4783603997401576, - 0.001942780623078119 - ], - [ - 0.8789382527298637, - 0.47694396327043365, - -0.0011544672760695673 - ], - [ - 0.8771888057651362, - 0.48014630437084743, - -0.0037285214663434806 - ], - [ - 0.8753884041824821, - 0.4834419172001935, - 0.00021075817600059048 - ], - [ - 0.8772636394601109, - 0.4800093221186886, - 0.005303514637922266 - ], - [ - 0.8803842053082573, - 0.4742971648938066, - 0.0017793850537225736 - ], - [ - 0.8790640265011122, - 0.47671373598848266, - -0.006138321298644979 - ], - [ - 0.8746400638562286, - 0.48481174498063545, - -0.004542704502340617 - ], - [ - 0.8746716013572146, - 0.484754015862938, - 0.0058037495866776 - ], - [ - 0.8800340664878921, - 0.47493808961941375, - 0.00760349282540388 - ], - [ - 0.8819255843115498, - 0.4714756897189057, - -0.004058898222463091 - ], - [ - 0.8763123802047604, - 0.4817505906113827, - -0.010356635580211413 - ], - [ - 0.8721087625620564, - 0.48944526069292177, - 0.0009112989036403346 - ], - [ - 0.8770494172328623, - 0.48040145318724115, - 0.01216658880690353 - ], - [ - 0.8835936398464785, - 0.4684223345737833, - 0.003361525294871251 - ], - [ - 0.8803459194450247, - 0.47436724684741693, - -0.012477497195670983 - ], - [ - 0.8718558449344993, - 0.4899082233865169, - -0.008234168462194224 - ], - [ - 0.8724629988828194, - 0.48879683537288077, - 0.010917489798908043 - ], - [ - 0.8820847604130784, - 0.4711843196462767, - 0.012997713589564273 - ], - [ - 0.8848174114875221, - 0.4661822358075652, - -0.007380471793352487 - ], - [ - 0.8752227456880564, - 0.48374515321313427, - -0.016858506273498653 - ], - [ - 0.8688529387609384, - 0.4954050059564774, - 0.002071474950484976 - ] - ] - }, - { - "name": "midlat_north", - "center": [ - 1, - 0.7853981633974483 - ], - "scaleRad": 0.30543261909900765, - "sampleCount": 24, - "samples": [ - [ - 0.38234718600687434, - 0.6042759806208212, - 0.699149791176292 - ], - [ - 0.35990713415418873, - 0.6045633965869189, - 0.7110323513571545 - ], - [ - 0.3698727342410847, - 0.57208278864789, - 0.7329794050557719 - ], - [ - 0.42082006569390695, - 0.5655111378584363, - 0.7109822967343594 - ], - [ - 0.41882272925159836, - 0.6206870658928512, - 0.6656325171668246 - ], - [ - 0.338898255099781, - 0.6497321755620524, - 0.6843752786824556 - ], - [ - 0.31345748213072633, - 0.5807640538732328, - 0.756155664233776 - ], - [ - 0.41294048880816536, - 0.5165122894218026, - 0.7564707620811132 - ], - [ - 0.48205641938685245, - 0.5833063399467031, - 0.6629220048427674 - ], - [ - 0.3812124566641663, - 0.6887113096394145, - 0.6287130046353663 - ], - [ - 0.2595093838506648, - 0.644351693349448, - 0.7317967910303931 - ], - [ - 0.3376150135904654, - 0.500865880311964, - 0.8103352921708828 - ], - [ - 0.5105095880343125, - 0.5020270833929673, - 0.7159428313125037 - ], - [ - 0.4809202634349959, - 0.6708050451405387, - 0.5899082467902665 - ], - [ - 0.2698400107911132, - 0.7299034090926872, - 0.6542258386404538 - ], - [ - 0.2283709915895613, - 0.5572986932461711, - 0.821873514887739 - ], - [ - 0.45371803359091584, - 0.4285099421388191, - 0.8084899854548875 - ], - [ - 0.5807369040235977, - 0.57750650105708, - 0.6144851050922486 - ], - [ - 0.3732456785737941, - 0.77481742056507, - 0.560561675402909 - ], - [ - 0.1581388593546318, - 0.678797742483164, - 0.7575821694961132 - ], - [ - 0.31186275501272415, - 0.4261816446972503, - 0.8870939184082799 - ], - [ - 0.6033595423554643, - 0.4427197738834949, - 0.7156811672262327 - ], - [ - 0.5375745012530645, - 0.7257951765099824, - 0.513025227270064 - ], - [ - 0.19579060507121035, - 0.8075358515051173, - 0.6289094539406496 - ] - ] - }, - { - "name": "midlat_south", - "center": [ - -2.5, - 2.356194490192345 - ], - "scaleRad": 0.07635815477475191, - "sampleCount": 24, - "samples": [ - [ - -0.5690073210435174, - -0.4224390765764791, - -0.7055389600164214 - ], - [ - -0.56761831386935, - -0.41767756801398265, - -0.7095013842744574 - ], - [ - -0.5595276166947774, - -0.4226100256559954, - -0.7130312562326223 - ], - [ - -0.5610881009198458, - -0.43393597768725756, - -0.7050028179354346 - ], - [ - -0.5758077624308886, - -0.42870868436376514, - -0.6963386445533591 - ], - [ - -0.5784023034176528, - -0.40930906535398204, - -0.7058701754602508 - ], - [ - -0.5581776134493592, - -0.40994620346842464, - -0.7216917470078948 - ], - [ - -0.5473855384063996, - -0.43654051634793545, - -0.7144217944672144 - ], - [ - -0.5698790815566483, - -0.44531135498901403, - -0.6911521340654692 - ], - [ - -0.5916582942984122, - -0.4148454216587999, - -0.6919368683920444 - ], - [ - -0.5717664590328977, - -0.3930208961424905, - -0.7209344546270426 - ], - [ - -0.5382522241470498, - -0.4220041591077474, - -0.7304384950438897 - ], - [ - -0.5498626861479182, - -0.45839629051680836, - -0.6993571722461391 - ], - [ - -0.593354445857491, - -0.43745058513862445, - -0.6770494476664068 - ], - [ - -0.5954671120349563, - -0.38775002629090777, - -0.705101296724211 - ], - [ - -0.5463020469017189, - -0.39403058018863535, - -0.7407308377049986 - ], - [ - -0.526365020677912, - -0.45281235480103943, - -0.721524006317905 - ], - [ - -0.5747664537989494, - -0.4666452341670765, - -0.6744689155037928 - ], - [ - -0.6143125000822129, - -0.4056641882361174, - -0.6792823084966743 - ], - [ - -0.5744132124036608, - -0.368624197373242, - -0.7334147687563376 - ], - [ - -0.5164687315583552, - -0.423073413073352, - -0.7472502820521664 - ], - [ - -0.5399679312711415, - -0.4831598972915009, - -0.6924639639320771 - ], - [ - -0.6118567352478972, - -0.44461920186894155, - -0.6579362397901789 - ], - [ - -0.6115224730390689, - -0.36535861442175394, - -0.7056392823882329 - ] - ] - }, - { - "name": "north_pole", - "center": [ - 0, - 0.001 - ], - "scaleRad": 0.15271630954950383, - "sampleCount": 24, - "samples": [ - [ - 0.00203827002566926, - 0.006019769840415706, - 0.9999995000000417 - ], - [ - -0.010511417658027686, - 0.00409265232276999, - 0.9999995000000417 - ], - [ - -0.007984498968889902, - -0.015972460254691363, - 0.9999995000000417 - ], - [ - 0.01995064923791001, - -0.015424753804413441, - 0.9999995000000417 - ], - [ - 0.024026633842205516, - 0.02006651375596285, - 0.9999995000000417 - ], - [ - -0.01803292341009756, - 0.031322685933186704, - 0.9999995000000417 - ], - [ - -0.038785554810114, - -0.015670855240955565, - 0.9999995000000417 - ], - [ - 0.010920688992693071, - -0.0478516509404969, - 0.9999995000000417 - ], - [ - 0.05594678598551987, - 0.0018485235674714504, - 0.9999995000000417 - ], - [ - 0.00935280117043957, - 0.06051275982972531, - 0.9999995000000417 - ], - [ - -0.06303383932890251, - 0.020368091391522097, - 0.9999995000000417 - ], - [ - -0.03276950437047895, - -0.06506206168625647, - 0.9999995000000417 - ], - [ - 0.06424032522241231, - -0.04803127499679504, - 0.9999995000000417 - ], - [ - 0.06354896764770196, - 0.058322301690142124, - 0.9999995000000417 - ], - [ - -0.04918831491890472, - 0.07666257688860607, - 0.9999995000000417 - ], - [ - -0.0886826456712132, - -0.03885647153071181, - 0.9999995000000417 - ], - [ - 0.02548849595956586, - -0.10091844113676374, - 0.9999995000000417 - ], - [ - 0.11070713072818218, - 0.00738991354177867, - 0.9999995000000417 - ], - [ - 0.012995564639018546, - 0.11544284417628632, - 0.9999995000000417 - ], - [ - -0.1166044925299554, - 0.03309738578078151, - 0.9999995000000417 - ], - [ - -0.05423494507889407, - -0.11578123950351657, - 0.9999995000000417 - ], - [ - 0.11069458266631874, - -0.07763932841190255, - 0.9999995000000417 - ], - [ - 0.10047931761889148, - 0.09921610594378376, - 0.9999995000000417 - ], - [ - -0.08338010735741264, - 0.11989079468678306, - 0.9999995000000417 - ] - ] - }, - { - "name": "south_pole", - "center": [ - 0, - 3.1405926535897932 - ], - "scaleRad": 0.15271630954950383, - "sampleCount": 24, - "samples": [ - [ - -0.00003827035900256441, - 0.006019769840415706, - -0.9999995000000417 - ], - [ - 0.012511417324694381, - 0.00409265232276999, - -0.9999995000000417 - ], - [ - 0.009984498635556597, - -0.015972460254691363, - -0.9999995000000417 - ], - [ - -0.017950649571243312, - -0.015424753804413441, - -0.9999995000000417 - ], - [ - -0.02202663417553882, - 0.02006651375596285, - -0.9999995000000417 - ], - [ - 0.020032923076764256, - 0.031322685933186704, - -0.9999995000000417 - ], - [ - 0.04078555447678069, - -0.015670855240955565, - -0.9999995000000417 - ], - [ - -0.008920689326026377, - -0.0478516509404969, - -0.9999995000000417 - ], - [ - -0.05394678631885318, - 0.0018485235674714504, - -0.9999995000000417 - ], - [ - -0.007352801503772874, - 0.06051275982972531, - -0.9999995000000417 - ], - [ - 0.06503383899556921, - 0.020368091391522097, - -0.9999995000000417 - ], - [ - 0.03476950403714565, - -0.06506206168625647, - -0.9999995000000417 - ], - [ - -0.06224032555574561, - -0.04803127499679504, - -0.9999995000000417 - ], - [ - -0.061548967981035256, - 0.058322301690142124, - -0.9999995000000417 - ], - [ - 0.051188314585571416, - 0.07666257688860607, - -0.9999995000000417 - ], - [ - 0.0906826453378799, - -0.03885647153071181, - -0.9999995000000417 - ], - [ - -0.023488496292899164, - -0.10091844113676374, - -0.9999995000000417 - ], - [ - -0.10870713106151549, - 0.00738991354177867, - -0.9999995000000417 - ], - [ - -0.010995564972351851, - 0.11544284417628632, - -0.9999995000000417 - ], - [ - 0.1186044921966221, - 0.03309738578078151, - -0.9999995000000417 - ], - [ - 0.05623494474556077, - -0.11578123950351657, - -0.9999995000000417 - ], - [ - -0.10869458299965204, - -0.07763932841190255, - -0.9999995000000417 - ], - [ - -0.09847931795222478, - 0.09921610594378376, - -0.9999995000000417 - ], - [ - 0.08538010702407933, - 0.11989079468678306, - -0.9999995000000417 - ] - ] - }, - { - "name": "south_pole_exact", - "center": [ - 0, - 3.141592653589793 - ], - "scaleRad": 0.0011930961683554986, - "sampleCount": 24, - "samples": [ - [ - -0.000008111485877501899, - 0.000047029451878247704, - -1 - ], - [ - 0.00008993294915138049, - 0.00003197384627164055, - -1 - ], - [ - 0.00007019139689249155, - -0.00012478484573977627, - -1 - ], - [ - -0.00014805194847313275, - -0.00012050588909698001, - -1 - ], - [ - -0.0001798955781941914, - 0.00015676963871845976, - -1 - ], - [ - 0.00014869471283942637, - 0.00024470848385302113, - -1 - ], - [ - 0.0003108246456520548, - -0.00012242855656996535, - -1 - ], - [ - -0.00007750538405737543, - -0.000373841022972632, - -1 - ], - [ - -0.0004292717668138348, - 0.000014441590370870706, - -1 - ], - [ - -0.00006525626044601995, - 0.000472755936169729, - -1 - ], - [ - 0.0005002643684550902, - 0.00015912571399626639, - -1 - ], - [ - 0.000263824251592406, - -0.0005082973569238787, - -1 - ], - [ - -0.0004940650421020569, - -0.00037524433591246126, - -1 - ], - [ - -0.0004886638110496323, - 0.00045564298195423534, - -1 - ], - [ - 0.0003920962090019823, - 0.000598926381942235, - -1 - ], - [ - 0.0007006456680043924, - -0.000303566183833686, - -1 - ], - [ - -0.0001913163759860691, - -0.0007884253213809667, - -1 - ], - [ - -0.000857086960115884, - 0.00005773369954514586, - -1 - ], - [ - -0.0000937153500442932, - 0.0009018972201272369, - -1 - ], - [ - 0.0009187850965883159, - 0.00025857332641235554, - -1 - ], - [ - 0.0004315230071268991, - -0.0009045409336212232, - -1 - ], - [ - -0.0008569889283825758, - -0.0006065572532179887, - -1 - ], - [ - -0.0007771821701995504, - 0.0007751258276858106, - -1 - ], - [ - 0.0006592195874278255, - 0.0009366468334904926, - -1 - ] - ] - } - ] -} \ No newline at end of file diff --git a/tests/lattice_curve.rs b/tests/lattice_curve.rs index 1aa8e6e..cc2eac8 100644 --- a/tests/lattice_curve.rs +++ b/tests/lattice_curve.rs @@ -6,8 +6,8 @@ use a5::coordinate_systems::IJ; use a5::lattice::{ - ij_to_s, s_to_cell, s_to_triple, triple_in_bounds, triple_parity, triple_to_s, Orientation, - Triple, + round_to_triple, s_to_cell, s_to_triple, triple_in_bounds, triple_parity, triple_to_s, + Orientation, Triple, }; use serde::Deserialize; use std::fs; @@ -17,8 +17,8 @@ use std::str::FromStr; struct Fixtures { #[serde(rename = "sToCell")] s_to_cell: Vec, - #[serde(rename = "IJToS")] - ij_to_s: Vec, + #[serde(rename = "pointToS")] + point_to_s: Vec, #[serde(rename = "tripleInBounds")] triple_in_bounds: Vec, } @@ -36,7 +36,7 @@ struct SToCellFixture { } #[derive(Deserialize)] -struct IJToSFixture { +struct PointToSFixture { i: f64, j: f64, resolution: usize, @@ -120,9 +120,14 @@ fn test_triple_to_s() { } #[test] -fn test_ij_to_s() { - for f in &load().ij_to_s { - let s = ij_to_s(IJ::new(f.i, f.j), f.resolution, ori(&f.orientation)); +fn test_point_to_s() { + for f in &load().point_to_s { + let s = triple_to_s( + &round_to_triple(IJ::new(f.i, f.j), f.resolution), + f.resolution, + ori(&f.orientation), + ) + .unwrap(); assert_eq!(s, f.s, "s for ({},{}) res={}", f.i, f.j, f.resolution); } } @@ -142,3 +147,22 @@ fn test_triple_in_bounds() { ); } } + +#[test] +fn test_triple_flavor_closed_form() { + // The pentagon flavor depends only on (parity, y mod 2); pin the closed + // form against the descent over all cells at res 6, two orientations. + use a5::lattice::{s_to_cell, triple_flavor, Orientation}; + for orientation in [Orientation::UV, Orientation::WU] { + for s in 0..(1u64 << 12) { + let cell = s_to_cell(s, 6, orientation); + assert_eq!( + triple_flavor(&cell.triple), + cell.flavor, + "flavor mismatch at s={} {:?}", + s, + orientation + ); + } + } +} diff --git a/tests/lattice_lsystem.rs b/tests/lattice_lsystem.rs index ed5f40f..ebf6254 100644 --- a/tests/lattice_lsystem.rs +++ b/tests/lattice_lsystem.rs @@ -3,7 +3,7 @@ // Copyright (c) A5 contributors use a5::coordinate_systems::IJ; -use a5::lattice::curve::ij_to_s; +use a5::lattice::curve::round_to_triple; use a5::lattice::lsystem::{s_to_cell, s_to_triple, triple_to_s_lattice}; use a5::lattice::{Orientation, Triple}; use serde::Deserialize; @@ -14,8 +14,8 @@ use std::str::FromStr; struct Fixtures { #[serde(rename = "sToCell")] s_to_cell: Vec, - #[serde(rename = "IJToS")] - ij_to_s: Vec, + #[serde(rename = "pointToS")] + point_to_s: Vec, } #[derive(Deserialize)] @@ -32,7 +32,7 @@ struct SToCellFixture { } #[derive(Deserialize)] -struct IJToSFixture { +struct PointToSFixture { i: f64, j: f64, resolution: usize, @@ -87,9 +87,13 @@ fn test_triple_to_s_lattice() { } #[test] -fn test_ij_to_s() { - for f in &load().ij_to_s { - let s = ij_to_s(IJ::new(f.i, f.j), f.resolution, ori(&f.orientation)); +fn test_point_to_s() { + for f in &load().point_to_s { + let s = triple_to_s_lattice( + &round_to_triple(IJ::new(f.i, f.j), f.resolution), + f.resolution, + ori(&f.orientation), + ); assert_eq!(s, f.s, "s for ({},{}) res={}", f.i, f.j, f.resolution); } } diff --git a/tests/utils_spiral.rs b/tests/utils_spiral.rs deleted file mode 100644 index d6699f2..0000000 --- a/tests/utils_spiral.rs +++ /dev/null @@ -1,65 +0,0 @@ -use a5::coordinate_systems::{Radians, Spherical}; -use a5::utils::spiral::{Spiral, SPIRAL_SAMPLE_COUNT}; -use serde::Deserialize; -use std::fs; - -#[derive(Deserialize)] -struct Fixture { - name: String, - center: [f64; 2], - #[serde(rename = "scaleRad")] - scale_rad: f64, - #[serde(rename = "sampleCount")] - sample_count: usize, - samples: Vec>, -} - -#[derive(Deserialize)] -struct Fixtures { - #[serde(rename = "sampleCount")] - sample_count: usize, - spiral: Vec, -} - -#[test] -fn test_spiral_sample_count_matches_fixture() { - let content = - fs::read_to_string("tests/fixtures/utils/spiral.json").expect("Could not read spiral.json"); - let fixtures: Fixtures = serde_json::from_str(&content).expect("Could not parse spiral.json"); - assert_eq!(SPIRAL_SAMPLE_COUNT, fixtures.sample_count); -} - -#[test] -fn test_spiral_fixtures() { - let content = - fs::read_to_string("tests/fixtures/utils/spiral.json").expect("Could not read spiral.json"); - let fixtures: Fixtures = serde_json::from_str(&content).expect("Could not parse spiral.json"); - - for f in &fixtures.spiral { - let center = Spherical::new( - Radians::new_unchecked(f.center[0]), - Radians::new_unchecked(f.center[1]), - ); - let spiral = Spiral::new(center, f.scale_rad); - assert_eq!(f.sample_count, SPIRAL_SAMPLE_COUNT, "{}", f.name); - for i in 0..SPIRAL_SAMPLE_COUNT { - let s = spiral.sample(i); - let expected = &f.samples[i]; - for (axis_index, (got, want)) in [s.x(), s.y(), s.z()] - .iter() - .zip(expected.iter()) - .enumerate() - { - assert!( - (got - want).abs() < 1e-6, - "{}: sample {} axis {}: {} != {}", - f.name, - i, - axis_index, - got, - want - ); - } - } - } -}