diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ff39f09b..0f154730 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,6 +25,13 @@ jobs: miniforge-version: latest python-version: ${{ matrix.python_version }} + - name: Reclaim space. + run: | + rm -rf /usr/share/dotnet + rm -rf /opt/ghc + rm -rf "/usr/local/share/boost" + rm -rf "$AGENT_TOOLSDIRECTORY" + - name: Install prerequisites. run: | mamba install -y nox pip pyyaml diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 00000000..4e54fc66 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,2606 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +dependencies = [ + "cfg-if", + "const-random", + "getrandom", + "once_cell", + "version_check", +] + +[[package]] +name = "aho-corasick" +version = "0.7.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" +dependencies = [ + "memchr", +] + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anes" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" + +[[package]] +name = "anyhow" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" + +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + +[[package]] +name = "array-init-cursor" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf7d0a018de4f6aa429b9d33d69edf69072b1c5b1cb8d3e4a5f7ef898fc3eb76" + +[[package]] +name = "arrow-format" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07884ea216994cdc32a2d5f8274a8bee979cfe90274b83f86f440866ee3132c7" +dependencies = [ + "planus", + "serde", +] + +[[package]] +name = "arrow2" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a4c5b03335bc1cb0fd9f5297f8fd3bbfd6fb04f3cb0bc7d6c91b7128cb8336a" +dependencies = [ + "ahash", + "arrow-format", + "base64", + "bytemuck", + "chrono", + "dyn-clone", + "either", + "ethnum", + "fallible-streaming-iterator", + "foreign_vec", + "futures", + "getrandom", + "hash_hasher", + "lexical-core", + "lz4", + "multiversion", + "num-traits", + "parquet2", + "rustc_version", + "simdutf8", + "streaming-iterator", + "strength_reduce", + "zstd", +] + +[[package]] +name = "async-stream" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad445822218ce64be7a341abfb0b1ea43b5c23aa83902542a4542e78309d8e5e" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4655ae1a7b0cdf149156f780c5bf3f1352bc53cbd9e0a361a7ef7b22947e965" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "async-trait" +version = "0.1.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b84f9ebcc6c1f5b8cb160f6990096a5c127f423fcb6e1ccc46c370cbdfb75dfc" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi 0.1.19", + "libc", + "winapi", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "av2" +version = "0.3.0" +dependencies = [ + "anyhow", + "bincode", + "criterion", + "glob", + "image", + "itertools", + "ndarray", + "nshare", + "numpy", + "once_cell", + "polars", + "pyo3", + "pyo3-polars", + "rayon", + "serde", +] + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bit_field" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "brotli" +version = "3.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "2.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bumpalo" +version = "3.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" + +[[package]] +name = "bytemuck" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aca418a974d83d40a0c1f0c5cba6ff4bc28d8df099109ca459a2118d40b6322" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + +[[package]] +name = "bytes" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" + +[[package]] +name = "cast" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" + +[[package]] +name = "cc" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +dependencies = [ + "jobserver", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" +dependencies = [ + "iana-time-zone", + "js-sys", + "num-integer", + "num-traits", + "time", + "wasm-bindgen", + "winapi", +] + +[[package]] +name = "ciborium" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c137568cc60b904a7724001b35ce2630fd00d5d84805fbb608ab89509d788f" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346de753af073cc87b52b2083a506b38ac176a44cfb05497b622e27be899b369" + +[[package]] +name = "ciborium-ll" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213030a2b5a4e0c0892b6652260cf6ccac84827b83a85a534e178e3906c4cf1b" +dependencies = [ + "ciborium-io", + "half 1.8.2", +] + +[[package]] +name = "clap" +version = "3.2.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" +dependencies = [ + "bitflags", + "clap_lex", + "indexmap", + "textwrap", +] + +[[package]] +name = "clap_lex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" +dependencies = [ + "os_str_bytes", +] + +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "comfy-table" +version = "6.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e7b787b0dc42e8111badfdbe4c3059158ccb2db8780352fa1b01e8ccf45cc4d" +dependencies = [ + "crossterm", + "strum", + "strum_macros", + "unicode-width", +] + +[[package]] +name = "const-random" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "368a7a772ead6ce7e1de82bfb04c485f3db8ec744f72925af5735e29a22cc18e" +dependencies = [ + "const-random-macro", + "proc-macro-hack", +] + +[[package]] +name = "const-random-macro" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d7d6ab3c3a2282db210df5f02c4dab6e0a7057af0fb7ebd4070f30fe05c0ddb" +dependencies = [ + "getrandom", + "once_cell", + "proc-macro-hack", + "tiny-keccak", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "criterion" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c76e09c1aae2bc52b3d2f29e13c6572553b30c4aa1b8a49fd70de6412654cb" +dependencies = [ + "anes", + "atty", + "cast", + "ciborium", + "clap", + "criterion-plot", + "itertools", + "lazy_static", + "num-traits", + "oorandom", + "plotters", + "rayon", + "regex", + "serde", + "serde_derive", + "serde_json", + "tinytemplate", + "walkdir", +] + +[[package]] +name = "criterion-plot" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" +dependencies = [ + "cast", + "itertools", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +dependencies = [ + "cfg-if", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695" +dependencies = [ + "autocfg", + "cfg-if", + "crossbeam-utils", + "memoffset", + "scopeguard", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossterm" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67" +dependencies = [ + "bitflags", + "crossterm_winapi", + "libc", + "mio", + "parking_lot 0.12.1", + "signal-hook", + "signal-hook-mio", + "winapi", +] + +[[package]] +name = "crossterm_winapi" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ae1b35a484aa10e07fe0638d02301c5ad24de82d310ccbd2f3693da5f09bf1c" +dependencies = [ + "winapi", +] + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "cxx" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a140f260e6f3f79013b8bfc65e7ce630c9ab4388c6a89c71e07226f49487b72" +dependencies = [ + "cc", + "cxxbridge-flags", + "cxxbridge-macro", + "link-cplusplus", +] + +[[package]] +name = "cxx-build" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da6383f459341ea689374bf0a42979739dc421874f112ff26f829b8040b8e613" +dependencies = [ + "cc", + "codespan-reporting", + "once_cell", + "proc-macro2", + "quote", + "scratch", + "syn", +] + +[[package]] +name = "cxxbridge-flags" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90201c1a650e95ccff1c8c0bb5a343213bdd317c6e600a93075bca2eff54ec97" + +[[package]] +name = "cxxbridge-macro" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b75aed41bb2e6367cae39e6326ef817a851db13c13e4f3263714ca3cfb8de56" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "dirs" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "dyn-clone" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68b0cf012f1230e43cd00ebb729c6bb58707ecfa8ad08b52ef3a4ccd2697fc30" + +[[package]] +name = "either" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" + +[[package]] +name = "enum_dispatch" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11f36e95862220b211a6e2aa5eca09b4fa391b13cd52ceb8035a24bf65a79de2" +dependencies = [ + "once_cell", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "ethnum" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0198b9d0078e0f30dedc7acbb21c974e838fc8fae3ee170128658a98cb2c1c04" + +[[package]] +name = "exr" +version = "1.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdd2162b720141a91a054640662d3edce3d50a944a50ffca5313cd951abb35b4" +dependencies = [ + "bit_field", + "flume", + "half 2.2.1", + "lebe", + "miniz_oxide", + "rayon-core", + "smallvec", + "zune-inflate", +] + +[[package]] +name = "fallible-streaming-iterator" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" + +[[package]] +name = "flate2" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "flume" +version = "0.10.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577" +dependencies = [ + "futures-core", + "futures-sink", + "nanorand", + "pin-project", + "spin", +] + +[[package]] +name = "foreign_vec" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee1b05cbd864bcaecbd3455d6d967862d446e4ebfc3c2e5e5b9841e53cba6673" + +[[package]] +name = "futures" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "531ac96c6ff5fd7c62263c5e3c67a603af4fcaee2e1a0ae5565ba3a11e69e549" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "164713a5a0dcc3e7b4b1ed7d3b433cabc18025386f9339346e8daf15963cf7ac" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86d7a0c1aa76363dac491de0ee99faf6941128376f1cf96f07db7603b7de69dd" + +[[package]] +name = "futures-executor" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1997dd9df74cdac935c76252744c1ed5794fac083242ea4fe77ef3ed60ba0f83" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89d422fa3cbe3b40dca574ab087abb5bc98258ea57eea3fd6f1fa7162c778b91" + +[[package]] +name = "futures-macro" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec93083a4aecafb2a80a885c9de1f0ccae9dbd32c2bb54b0c3a65690e0b8d2f2" + +[[package]] +name = "futures-task" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd65540d33b37b16542a0438c12e6aeead10d4ac5d05bd3f805b8f35ab592879" + +[[package]] +name = "futures-util" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ef6b17e481503ec85211fed8f39d1970f128935ca1f814cd32ac4a6842e84ab" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "getrandom" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "gif" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3edd93c6756b4dfaf2709eafcc345ba2636565295c198a9cfbf75fa5e3e00b06" +dependencies = [ + "color_quant", + "weezl", +] + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "half" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" + +[[package]] +name = "half" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0" +dependencies = [ + "crunchy", +] + +[[package]] +name = "hash_hasher" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74721d007512d0cb3338cd20f0654ac913920061a4c4d0d8708edb3f2a698c0c" + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", + "rayon", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "hermit-abi" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" +dependencies = [ + "libc", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "winapi", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" +dependencies = [ + "cxx", + "cxx-build", +] + +[[package]] +name = "image" +version = "0.24.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69b7ea949b537b0fd0af141fff8c77690f2ce96f4f41f042ccb6c69c6c965945" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "exr", + "gif", + "jpeg-decoder", + "num-rational", + "num-traits", + "png", + "scoped_threadpool", + "tiff", +] + +[[package]] +name = "indexmap" +version = "1.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", +] + +[[package]] +name = "indoc" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa799dd5ed20a7e349f3b4639aa80d74549c81716d9ec4f994c9b5815598306" + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" + +[[package]] +name = "jobserver" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" +dependencies = [ + "libc", +] + +[[package]] +name = "jpeg-decoder" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e" +dependencies = [ + "rayon", +] + +[[package]] +name = "js-sys" +version = "0.3.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "lebe" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" + +[[package]] +name = "lexical" +version = "6.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7aefb36fd43fef7003334742cbf77b243fcd36418a1d1bdd480d613a67968f6" +dependencies = [ + "lexical-core", +] + +[[package]] +name = "lexical-core" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cde5de06e8d4c2faabc400238f9ae1c74d5412d03a7bd067645ccbc47070e46" +dependencies = [ + "lexical-parse-float", + "lexical-parse-integer", + "lexical-util", + "lexical-write-float", + "lexical-write-integer", +] + +[[package]] +name = "lexical-parse-float" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683b3a5ebd0130b8fb52ba0bdc718cc56815b6a097e28ae5a6997d0ad17dc05f" +dependencies = [ + "lexical-parse-integer", + "lexical-util", + "static_assertions", +] + +[[package]] +name = "lexical-parse-integer" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d0994485ed0c312f6d965766754ea177d07f9c00c9b82a5ee62ed5b47945ee9" +dependencies = [ + "lexical-util", + "static_assertions", +] + +[[package]] +name = "lexical-util" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5255b9ff16ff898710eb9eb63cb39248ea8a5bb036bea8085b1a767ff6c4e3fc" +dependencies = [ + "static_assertions", +] + +[[package]] +name = "lexical-write-float" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accabaa1c4581f05a3923d1b4cfd124c329352288b7b9da09e766b0668116862" +dependencies = [ + "lexical-util", + "lexical-write-integer", + "static_assertions", +] + +[[package]] +name = "lexical-write-integer" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1b6f3d1f4422866b68192d62f77bc5c700bee84f3069f2469d7bc8c77852446" +dependencies = [ + "lexical-util", + "static_assertions", +] + +[[package]] +name = "libc" +version = "0.2.140" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" + +[[package]] +name = "libm" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" + +[[package]] +name = "link-cplusplus" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" +dependencies = [ + "cc", +] + +[[package]] +name = "lock_api" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "lz4" +version = "1.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e9e2dd86df36ce760a60f6ff6ad526f7ba1f14ba0356f8254fb6905e6494df1" +dependencies = [ + "libc", + "lz4-sys", +] + +[[package]] +name = "lz4-sys" +version = "1.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d27b317e207b10f69f5e75494119e391a96f48861ae870d1da6edac98ca900" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "matrixmultiply" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "add85d4dd35074e6fedc608f8c8f513a3548619a9024b751949ef0e8e45a4d84" +dependencies = [ + "num_cpus", + "once_cell", + "rawpointer", + "thread-tree", +] + +[[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "memmap2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" +dependencies = [ + "autocfg", +] + +[[package]] +name = "miniz_oxide" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" +dependencies = [ + "libc", + "log", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys", +] + +[[package]] +name = "multiversion" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "025c962a3dd3cc5e0e520aa9c612201d127dcdf28616974961a649dca64f5373" +dependencies = [ + "multiversion-macros", +] + +[[package]] +name = "multiversion-macros" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8a3e2bde382ebf960c1f3e79689fa5941625fe9bf694a1cb64af3e85faff3af" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "nalgebra" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb2d0de08694bed883320212c18ee3008576bfe8c306f4c3c4a58b4876998be" +dependencies = [ + "approx", + "matrixmultiply", + "num-complex", + "num-rational", + "num-traits", + "simba", + "typenum", +] + +[[package]] +name = "nanorand" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" +dependencies = [ + "getrandom", +] + +[[package]] +name = "ndarray" +version = "0.15.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb12d4e967ec485a5f71c6311fe28158e9d6f4bc4a447b474184d0f91a8fa32" +dependencies = [ + "matrixmultiply", + "num-complex", + "num-integer", + "num-traits", + "rawpointer", + "rayon", +] + +[[package]] +name = "now" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d89e9874397a1f0a52fc1f197a8effd9735223cb2390e9dcc83ac6cd02923d0" +dependencies = [ + "chrono", +] + +[[package]] +name = "nshare" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4447657cd40e3107416ec4f2ac3e61a18781b00061789e3b8f4bbcbccb26c4c6" +dependencies = [ + "image", + "nalgebra", + "ndarray", +] + +[[package]] +name = "ntapi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc51db7b362b205941f71232e56c625156eb9a929f8cf74a428fd5bc094a4afc" +dependencies = [ + "winapi", +] + +[[package]] +name = "num" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" +dependencies = [ + "hermit-abi 0.2.6", + "libc", +] + +[[package]] +name = "numpy" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b0fee4571867d318651c24f4a570c3f18408cf95f16ccb576b3ce85496a46e" +dependencies = [ + "libc", + "ndarray", + "num-complex", + "num-integer", + "num-traits", + "pyo3", + "rustc-hash", +] + +[[package]] +name = "once_cell" +version = "1.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" + +[[package]] +name = "oorandom" +version = "11.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" + +[[package]] +name = "os_str_bytes" +version = "6.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" + +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core 0.8.6", +] + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core 0.9.7", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" +dependencies = [ + "cfg-if", + "instant", + "libc", + "redox_syscall", + "smallvec", + "winapi", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-sys", +] + +[[package]] +name = "parquet-format-safe" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1131c54b167dd4e4799ce762e1ab01549ebb94d5bdd13e6ec1b467491c378e1f" +dependencies = [ + "async-trait", + "futures", +] + +[[package]] +name = "parquet2" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aefc53bedbf9bbe0ff8912befafaafe30ced83851fb0aebe86696a9289ebb29e" +dependencies = [ + "async-stream", + "brotli", + "flate2", + "futures", + "lz4", + "parquet-format-safe", + "seq-macro", + "snap", + "streaming-decompression", + "zstd", +] + +[[package]] +name = "paste" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" + +[[package]] +name = "pin-project" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" + +[[package]] +name = "planus" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc1691dd09e82f428ce8d6310bd6d5da2557c82ff17694d2a32cad7242aea89f" +dependencies = [ + "array-init-cursor", +] + +[[package]] +name = "plotters" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2538b639e642295546c50fcd545198c9d64ee2a38620a628724a3b266d5fbf97" +dependencies = [ + "num-traits", + "plotters-backend", + "plotters-svg", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "plotters-backend" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "193228616381fecdc1224c62e96946dfbc73ff4384fba576e052ff8c1bea8142" + +[[package]] +name = "plotters-svg" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9a81d2759aae1dae668f783c308bc5c8ebd191ff4184aaa1b37f65a6ae5a56f" +dependencies = [ + "plotters-backend", +] + +[[package]] +name = "png" +version = "0.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d708eaf860a19b19ce538740d2b4bdeeb8337fa53f7738455e706623ad5c638" +dependencies = [ + "bitflags", + "crc32fast", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "polars" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8918f4add49e6244bae2fe91cac89be339f2d6a77c59a4df3d7348bd40f98d1e" +dependencies = [ + "getrandom", + "polars-core", + "polars-io", + "polars-lazy", + "polars-ops", + "polars-time", + "version_check", +] + +[[package]] +name = "polars-arrow" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06e57a7b929edf6c73475dbc3f63d35152f14f4a9455476acc6127d770daa0f6" +dependencies = [ + "arrow2", + "hashbrown 0.13.2", + "num", + "thiserror", +] + +[[package]] +name = "polars-core" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a440cd53916f1a87fac1fda36cd7cc2d226247b4d4570d96242da5fa7f07b2a" +dependencies = [ + "ahash", + "anyhow", + "arrow2", + "bitflags", + "chrono", + "comfy-table", + "hashbrown 0.13.2", + "indexmap", + "ndarray", + "num", + "once_cell", + "polars-arrow", + "polars-utils", + "rand", + "rand_distr", + "rayon", + "regex", + "serde", + "smartstring", + "thiserror", + "wasm-timer", + "xxhash-rust", +] + +[[package]] +name = "polars-io" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d941750cba70a3acf150b959fcf446c09e8a8a4a35d03472d941bd6740bc43" +dependencies = [ + "ahash", + "anyhow", + "arrow2", + "bytes", + "chrono", + "dirs", + "lexical", + "lexical-core", + "memchr", + "memmap2", + "num", + "once_cell", + "polars-arrow", + "polars-core", + "polars-time", + "polars-utils", + "rayon", + "regex", + "simdutf8", +] + +[[package]] +name = "polars-lazy" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d227fcb817485be462748d3172d2e55c61d56fbdc7fd56c24b72fa2e510e7be6" +dependencies = [ + "ahash", + "bitflags", + "glob", + "polars-arrow", + "polars-core", + "polars-io", + "polars-ops", + "polars-pipe", + "polars-plan", + "polars-time", + "polars-utils", + "rayon", +] + +[[package]] +name = "polars-ops" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36638340fd9f4377dab11f307877ebb5bdac3bc9b25ea32a771584de76e5280a" +dependencies = [ + "arrow2", + "polars-arrow", + "polars-core", + "polars-utils", +] + +[[package]] +name = "polars-pipe" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac1dfae18a14a812119d3328dae8790be53f1bc0fbcb977606dcf0f181490a8f" +dependencies = [ + "crossbeam-channel", + "enum_dispatch", + "hashbrown 0.13.2", + "num", + "polars-arrow", + "polars-core", + "polars-io", + "polars-ops", + "polars-plan", + "polars-utils", + "rayon", + "smartstring", +] + +[[package]] +name = "polars-plan" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ca57df4974f25fa0642ae18ef00c0836c5120d4371be77a34d4684173b043c3" +dependencies = [ + "ahash", + "once_cell", + "polars-arrow", + "polars-core", + "polars-io", + "polars-ops", + "polars-time", + "polars-utils", + "rayon", +] + +[[package]] +name = "polars-time" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d961a9ccbe3c739de063fbf78449b3c172baf3379f958769c42ee9c309289786" +dependencies = [ + "chrono", + "lexical", + "now", + "once_cell", + "polars-arrow", + "polars-core", + "polars-ops", + "polars-utils", + "regex", +] + +[[package]] +name = "polars-utils" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a741a3325c544c97c7a9ff57d857f089b60041bd92b06c41582df6940ffaa05b" +dependencies = [ + "once_cell", + "rayon", + "sysinfo", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "proc-macro-hack" +version = "0.5.20+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" + +[[package]] +name = "proc-macro2" +version = "1.0.51" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "pyo3" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06a3d8e8a46ab2738109347433cb7b96dffda2e4a218b03ef27090238886b147" +dependencies = [ + "cfg-if", + "indoc", + "libc", + "memoffset", + "parking_lot 0.12.1", + "pyo3-build-config", + "pyo3-ffi", + "pyo3-macros", + "unindent", +] + +[[package]] +name = "pyo3-build-config" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75439f995d07ddfad42b192dfcf3bc66a7ecfd8b4a1f5f6f046aa5c2c5d7677d" +dependencies = [ + "once_cell", + "target-lexicon", +] + +[[package]] +name = "pyo3-ffi" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "839526a5c07a17ff44823679b68add4a58004de00512a95b6c1c98a6dcac0ee5" +dependencies = [ + "libc", + "pyo3-build-config", +] + +[[package]] +name = "pyo3-macros" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd44cf207476c6a9760c4653559be4f206efafb924d3e4cbf2721475fc0d6cc5" +dependencies = [ + "proc-macro2", + "pyo3-macros-backend", + "quote", + "syn", +] + +[[package]] +name = "pyo3-macros-backend" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc1f43d8e30460f36350d18631ccf85ded64c059829208fe680904c65bcd0a4c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pyo3-polars" +version = "0.2.0" +source = "git+https://github.com/benjaminrwilson/pyo3-polars#101be638680305e384ee47066576aaddc7941833" +dependencies = [ + "arrow2", + "polars", + "polars-core", + "pyo3", + "serde", + "thiserror", +] + +[[package]] +name = "quote" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rand_distr" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" +dependencies = [ + "num-traits", + "rand", +] + +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + +[[package]] +name = "rayon" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-utils", + "num_cpus", +] + +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags", +] + +[[package]] +name = "redox_users" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +dependencies = [ + "getrandom", + "redox_syscall", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.6.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustversion" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" + +[[package]] +name = "ryu" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" + +[[package]] +name = "safe_arch" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "794821e4ccb0d9f979512f9c1973480123f9bd62a90d74ab0f9426fcf8f4a529" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scoped_threadpool" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8" + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "scratch" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" + +[[package]] +name = "semver" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" + +[[package]] +name = "seq-macro" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6b44e8fc93a14e66336d230954dda83d18b4605ccace8fe09bc7514a71ad0bc" + +[[package]] +name = "serde" +version = "1.0.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71f2b4817415c6d4210bfe1c7bfcf4801b2d904cb4d0e1a8fdb651013c9e86b8" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d071a94a3fac4aff69d023a7f411e33f40f3483f8c5190b1953822b6b76d7630" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "signal-hook" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "732768f1176d21d09e076c23a93123d40bba92d50c4058da34d45c8de8e682b9" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-mio" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" +dependencies = [ + "libc", + "mio", + "signal-hook", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +dependencies = [ + "libc", +] + +[[package]] +name = "simba" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f3fd720c48c53cace224ae62bef1bbff363a70c68c4802a78b5cc6159618176" +dependencies = [ + "approx", + "num-complex", + "num-traits", + "paste", + "wide", +] + +[[package]] +name = "simd-adler32" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "238abfbb77c1915110ad968465608b68e869e0772622c9656714e73e5a1a522f" + +[[package]] +name = "simdutf8" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" + +[[package]] +name = "slab" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" + +[[package]] +name = "smartstring" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29" +dependencies = [ + "autocfg", + "static_assertions", + "version_check", +] + +[[package]] +name = "snap" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831" + +[[package]] +name = "spin" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5d6e0250b93c8427a177b849d144a96d5acc57006149479403d7861ab721e34" +dependencies = [ + "lock_api", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "streaming-decompression" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf6cc3b19bfb128a8ad11026086e31d3ce9ad23f8ea37354b31383a187c44cf3" +dependencies = [ + "fallible-streaming-iterator", +] + +[[package]] +name = "streaming-iterator" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b2231b7c3057d5e4ad0156fb3dc807d900806020c5ffa3ee6ff2c8c76fb8520" + +[[package]] +name = "strength_reduce" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe895eb47f22e2ddd4dabc02bce419d2e643c8e3b585c78158b349195bc24d82" + +[[package]] +name = "strum" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" + +[[package]] +name = "strum_macros" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sysinfo" +version = "0.27.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a902e9050fca0a5d6877550b769abd2bd1ce8c04634b941dbe2809735e1a1e33" +dependencies = [ + "cfg-if", + "core-foundation-sys", + "libc", + "ntapi", + "once_cell", + "winapi", +] + +[[package]] +name = "target-lexicon" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ae9980cab1db3fceee2f6c6f643d5d8de2997c58ee8d25fb0cc8a9e9e7348e5" + +[[package]] +name = "termcolor" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "textwrap" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" + +[[package]] +name = "thiserror" +version = "1.0.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5ab016db510546d856297882807df8da66a16fb8c4101cb8b30054b0d5b2d9c" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5420d42e90af0c38c3290abcca25b9b3bdf379fc9f55c528f53a269d9c9a267e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thread-tree" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffbd370cb847953a25954d9f63e14824a36113f8c72eecf6eccef5dc4b45d630" +dependencies = [ + "crossbeam-channel", +] + +[[package]] +name = "tiff" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7449334f9ff2baf290d55d73983a7d6fa15e01198faef72af07e2a8db851e471" +dependencies = [ + "flate2", + "jpeg-decoder", + "weezl", +] + +[[package]] +name = "time" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" +dependencies = [ + "libc", + "wasi 0.10.0+wasi-snapshot-preview1", + "winapi", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tinytemplate" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "typenum" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" + +[[package]] +name = "unicode-ident" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" + +[[package]] +name = "unicode-width" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" + +[[package]] +name = "unindent" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1766d682d402817b5ac4490b3c3002d91dfa0d22812f341609f97b08757359c" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "walkdir" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +dependencies = [ + "same-file", + "winapi", + "winapi-util", +] + +[[package]] +name = "wasi" +version = "0.10.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" + +[[package]] +name = "wasm-timer" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f" +dependencies = [ + "futures", + "js-sys", + "parking_lot 0.11.2", + "pin-utils", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "web-sys" +version = "0.3.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "weezl" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" + +[[package]] +name = "wide" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b689b6c49d6549434bf944e6b0f39238cf63693cb7a147e9d887507fffa3b223" +dependencies = [ + "bytemuck", + "safe_arch", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" + +[[package]] +name = "xxhash-rust" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "735a71d46c4d68d71d4b24d03fdc2b98e38cea81730595801db779c04fe80d70" + +[[package]] +name = "zstd" +version = "0.11.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "5.0.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.7+zstd.1.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94509c3ba2fe55294d752b79842c530ccfab760192521df74a081a78d2b3c7f5" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + +[[package]] +name = "zune-inflate" +version = "0.2.51" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a01728b79fb9b7e28a8c11f715e1cd8dc2cda7416a007d66cac55cebb3a8ac6b" +dependencies = [ + "simd-adler32", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 00000000..d50b2af8 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,3 @@ +[workspace] +members = ["rust"] +resolver = "2" diff --git a/README.md b/README.md index 6444b23b..e4c0cfc1 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ If you have any questions or run into any problems with either the data or API, ## TL;DR -- Install the API: `pip install av2` +- Install the API: `bash conda/install.sh` - Read the [instructions](DOWNLOAD.md) to download the data. ## Overview @@ -39,12 +39,14 @@ If you have any questions or run into any problems with either the data or API, ### Setup -The easiest way to install the API is via [pip](https://pypi.org/project/av2/) by running the following command: +The easiest way to install the API is via [conda](https://docs.conda.io/en/latest/) by running the following command: ```bash -pip install av2 +bash conda/install.sh ``` +Additional information can be found in the: [INSTALL README](conda/INSTALL.md). + ### Datasets The _Argoverse 2_ family consists of **four** distinct datasets: diff --git a/conda/INSTALL.md b/conda/INSTALL.md new file mode 100644 index 00000000..6723d23d --- /dev/null +++ b/conda/INSTALL.md @@ -0,0 +1,33 @@ +# Installation + +We _highly_ recommend using `conda` with the `conda-forge` channel for package management. + +## Install `conda` + +You will need to install `conda` on your machine. We recommend to install the `conda-forge` version of `conda` found at https://github.com/conda-forge/miniforge#install. + +## Install `av2` + +Simply run: + +```bash +bash install.sh +``` + +which will install _all_ of the necessary dependencies in a conda environment named `av2`. + +To activate your environment (i.e., update your system paths), run: + +```bash +conda activate av2 +``` + +## FAQ + +> Why manage dependencies in `conda` instead of `pip`? + +`conda` enables package management outside of the `python` ecosystem. This enables us to specify all necessary dependencies in `environment.yml`. Further, gpu-based packages (e.g., `torch`) are handled better through `conda`. + +> Why `conda-forge`? + +`conda-forge` is a community-driven channel of conda recipes. It includes a large number of packages which can all be properly tracked in the `conda` resolver allowing for consistent environments without conflicts. \ No newline at end of file diff --git a/conda/environment.yml b/conda/environment.yml index 28ac5155..0ee542db 100644 --- a/conda/environment.yml +++ b/conda/environment.yml @@ -5,15 +5,20 @@ dependencies: - av - click - joblib + - kornia - matplotlib-base + - maturin - nox - numba - numpy - opencv - pandas - pip + - polars - pyarrow - pyproj - rich + - rust - scipy - - universal_pathlib \ No newline at end of file + - pytorch + - universal_pathlib diff --git a/integration_tests/verify_tbv_download.py b/integration_tests/verify_tbv_download.py index ddba7063..6fbf4983 100644 --- a/integration_tests/verify_tbv_download.py +++ b/integration_tests/verify_tbv_download.py @@ -195,7 +195,6 @@ def verify_logs_using_dataloader(data_root: Path, log_ids: Tuple[str, ...]) -> N """ loader = AV2SensorDataLoader(data_dir=data_root, labels_dir=data_root) for log_id in track(log_ids, description="Verify logs using an AV2 dataloader object"): - logger.info("Verifying log %s", log_id) # city abbreviation should be parsable from every vector map file name, and should fall into 1 of 6 cities city_name = loader.get_city_name(log_id=log_id) diff --git a/noxfile.py b/noxfile.py index b1ed5d00..e2a40335 100644 --- a/noxfile.py +++ b/noxfile.py @@ -22,7 +22,6 @@ def _setup(session: Session) -> None: session: `nox` session. """ if isinstance(session.virtualenv, CondaEnv): - # Load environment.yml file and install conda dependencies. env = yaml.safe_load(Path("conda/environment.yml").read_text()) diff --git a/pyproject.toml b/pyproject.toml index 322104c3..cc172da4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,13 +1,46 @@ [build-system] -requires = [ - "setuptools>=42", - "wheel" +requires = ["maturin>=0.14,<0.15"] +build-backend = "maturin" + +[project] +author = "Argoverse" +license = {file = "LICENSE"} +name = "av2" +requires-python = ">=3.8" +classifiers = [ + "Programming Language :: Rust", + "Programming Language :: Python :: Implementation :: CPython", +] + +dependencies = [ + "av", + "click", + "joblib", + "kornia", + "matplotlib", + "nox", + "numba", + "numpy", + "opencv-python", + "pandas", + "polars", + "pyarrow", + "pyproj", + "rich", + "scipy", + "torch", + "universal_pathlib", ] -build-backend = "setuptools.build_meta" + +[tool.maturin] +features = ["pyo3/extension-module"] [tool.black] line-length = 120 +[tool.ruff] +line-length = 120 + [tool.isort] known_first_party = "av2" known_third_party = "" @@ -23,6 +56,9 @@ disallow_untyped_decorators = false plugins = "numpy.typing.mypy_plugin" strict = true +[tool.pylint] +max-line-length = 120 + [tool.pyright] include = ["src"] @@ -33,6 +69,4 @@ reportUntypedFunctionDecorator = false [tool.pytest.ini_options] minversion = "6.0" addopts = "--cov-report term-missing:skip-covered --cov av2" -testpaths = [ - "tests", -] \ No newline at end of file +testpaths = ["tests"] diff --git a/rust/.cargo/config.toml b/rust/.cargo/config.toml new file mode 100644 index 00000000..59c989e6 --- /dev/null +++ b/rust/.cargo/config.toml @@ -0,0 +1,11 @@ +[target.x86_64-apple-darwin] +rustflags = [ + "-C", "link-arg=-undefined", + "-C", "link-arg=dynamic_lookup", +] + +[target.aarch64-apple-darwin] +rustflags = [ + "-C", "link-arg=-undefined", + "-C", "link-arg=dynamic_lookup", +] \ No newline at end of file diff --git a/rust/Cargo.lock b/rust/Cargo.lock new file mode 100644 index 00000000..decf4311 --- /dev/null +++ b/rust/Cargo.lock @@ -0,0 +1,3183 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +dependencies = [ + "cfg-if", + "const-random", + "getrandom", + "once_cell", + "version_check", +] + +[[package]] +name = "aho-corasick" +version = "0.7.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" +dependencies = [ + "memchr", +] + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anes" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" + +[[package]] +name = "anyhow" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" + +[[package]] +name = "approx" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f2a05fd1bd10b2527e20a2cd32d8873d115b8b39fe219ee25f42a8aca6ba278" +dependencies = [ + "num-traits", +] + +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits", +] + +[[package]] +name = "array-init-cursor" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf7d0a018de4f6aa429b9d33d69edf69072b1c5b1cb8d3e4a5f7ef898fc3eb76" + +[[package]] +name = "arrayvec" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" + +[[package]] +name = "arrow-format" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07884ea216994cdc32a2d5f8274a8bee979cfe90274b83f86f440866ee3132c7" +dependencies = [ + "planus", + "serde", +] + +[[package]] +name = "arrow2" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a4c5b03335bc1cb0fd9f5297f8fd3bbfd6fb04f3cb0bc7d6c91b7128cb8336a" +dependencies = [ + "ahash", + "arrow-format", + "base64 0.13.1", + "bytemuck", + "chrono", + "dyn-clone", + "either", + "ethnum", + "fallible-streaming-iterator", + "foreign_vec", + "futures", + "getrandom", + "hash_hasher", + "lexical-core", + "lz4", + "multiversion", + "num-traits", + "parquet2", + "rustc_version", + "simdutf8", + "streaming-iterator", + "strength_reduce", + "zstd", +] + +[[package]] +name = "async-stream" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad445822218ce64be7a341abfb0b1ea43b5c23aa83902542a4542e78309d8e5e" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4655ae1a7b0cdf149156f780c5bf3f1352bc53cbd9e0a361a7ef7b22947e965" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "async-trait" +version = "0.1.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b84f9ebcc6c1f5b8cb160f6990096a5c127f423fcb6e1ccc46c370cbdfb75dfc" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi 0.1.19", + "libc", + "winapi", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "av2" +version = "0.1.0" +dependencies = [ + "anyhow", + "bincode", + "blas-src", + "criterion", + "dirs 4.0.0", + "glob", + "indicatif", + "itertools", + "ndarray", + "ndarray_einsum_beta", + "nshare", + "numpy", + "once_cell", + "openblas-src", + "phf", + "polars", + "pprof", + "pyo3", + "pyo3-polars", + "rayon", + "serde", + "strum", + "strum_macros", + "walkdir", +] + +[[package]] +name = "backtrace" +version = "0.3.67" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233d376d6d185f2a3093e58f283f60f880315b6c60075b01f36b3b85154564ca" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "base64" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4a4ddaa51a5bc52a6948f74c06d20aaaddb71924eab79b8c97a8c556e942d6a" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "blas-src" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb48fbaa7a0cb9d6d96c46bac6cedb16f13a10aebcef1c4e73515aaae8c9909d" +dependencies = [ + "openblas-src", +] + +[[package]] +name = "brotli" +version = "3.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "2.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b6561fd3f895a11e8f72af2cb7d22e08366bebc2b6b57f7744c4bda27034744" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bumpalo" +version = "3.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535" + +[[package]] +name = "bytemuck" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" +dependencies = [ + "bytemuck_derive", +] + +[[package]] +name = "bytemuck_derive" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aca418a974d83d40a0c1f0c5cba6ff4bc28d8df099109ca459a2118d40b6322" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + +[[package]] +name = "bytes" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" + +[[package]] +name = "cast" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" + +[[package]] +name = "cblas-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6feecd82cce51b0204cf063f0041d69f24ce83f680d87514b004248e7b0fa65" +dependencies = [ + "libc", +] + +[[package]] +name = "cc" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +dependencies = [ + "jobserver", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" +dependencies = [ + "iana-time-zone", + "js-sys", + "num-integer", + "num-traits", + "time", + "wasm-bindgen", + "winapi", +] + +[[package]] +name = "ciborium" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c137568cc60b904a7724001b35ce2630fd00d5d84805fbb608ab89509d788f" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346de753af073cc87b52b2083a506b38ac176a44cfb05497b622e27be899b369" + +[[package]] +name = "ciborium-ll" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213030a2b5a4e0c0892b6652260cf6ccac84827b83a85a534e178e3906c4cf1b" +dependencies = [ + "ciborium-io", + "half", +] + +[[package]] +name = "clap" +version = "3.2.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" +dependencies = [ + "bitflags", + "clap_lex", + "indexmap", + "textwrap", +] + +[[package]] +name = "clap_lex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5" +dependencies = [ + "os_str_bytes", +] + +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "comfy-table" +version = "6.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e7b787b0dc42e8111badfdbe4c3059158ccb2db8780352fa1b01e8ccf45cc4d" +dependencies = [ + "crossterm", + "strum", + "strum_macros", + "unicode-width", +] + +[[package]] +name = "console" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d79fbe8970a77e3e34151cc13d3b3e248aa0faaecb9f6091fa07ebefe5ad60" +dependencies = [ + "encode_unicode", + "lazy_static", + "libc", + "unicode-width", + "windows-sys 0.42.0", +] + +[[package]] +name = "const-random" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "368a7a772ead6ce7e1de82bfb04c485f3db8ec744f72925af5735e29a22cc18e" +dependencies = [ + "const-random-macro", + "proc-macro-hack", +] + +[[package]] +name = "const-random-macro" +version = "0.1.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d7d6ab3c3a2282db210df5f02c4dab6e0a7057af0fb7ebd4070f30fe05c0ddb" +dependencies = [ + "getrandom", + "once_cell", + "proc-macro-hack", + "tiny-keccak", +] + +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" + +[[package]] +name = "cpp_demangle" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b446fd40bcc17eddd6a4a78f24315eb90afdb3334999ddfd4909985c47722442" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "criterion" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c76e09c1aae2bc52b3d2f29e13c6572553b30c4aa1b8a49fd70de6412654cb" +dependencies = [ + "anes", + "atty", + "cast", + "ciborium", + "clap", + "criterion-plot", + "itertools", + "lazy_static", + "num-traits", + "oorandom", + "plotters", + "rayon", + "regex", + "serde", + "serde_derive", + "serde_json", + "tinytemplate", + "walkdir", +] + +[[package]] +name = "criterion-plot" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" +dependencies = [ + "cast", + "itertools", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +dependencies = [ + "cfg-if", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695" +dependencies = [ + "autocfg", + "cfg-if", + "crossbeam-utils", + "memoffset", + "scopeguard", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossterm" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67" +dependencies = [ + "bitflags", + "crossterm_winapi", + "libc", + "mio", + "parking_lot 0.12.1", + "signal-hook", + "signal-hook-mio", + "winapi", +] + +[[package]] +name = "crossterm_winapi" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ae1b35a484aa10e07fe0638d02301c5ad24de82d310ccbd2f3693da5f09bf1c" +dependencies = [ + "winapi", +] + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "cxx" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a140f260e6f3f79013b8bfc65e7ce630c9ab4388c6a89c71e07226f49487b72" +dependencies = [ + "cc", + "cxxbridge-flags", + "cxxbridge-macro", + "link-cplusplus", +] + +[[package]] +name = "cxx-build" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da6383f459341ea689374bf0a42979739dc421874f112ff26f829b8040b8e613" +dependencies = [ + "cc", + "codespan-reporting", + "once_cell", + "proc-macro2", + "quote", + "scratch", + "syn", +] + +[[package]] +name = "cxxbridge-flags" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90201c1a650e95ccff1c8c0bb5a343213bdd317c6e600a93075bca2eff54ec97" + +[[package]] +name = "cxxbridge-macro" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b75aed41bb2e6367cae39e6326ef817a851db13c13e4f3263714ca3cfb8de56" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "debugid" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d" +dependencies = [ + "uuid", +] + +[[package]] +name = "dirs" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30baa043103c9d0c2a57cf537cc2f35623889dc0d405e6c3cccfadbc81c71309" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "dyn-clone" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68b0cf012f1230e43cd00ebb729c6bb58707ecfa8ad08b52ef3a4ccd2697fc30" + +[[package]] +name = "either" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" + +[[package]] +name = "encode_unicode" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" + +[[package]] +name = "enum_dispatch" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11f36e95862220b211a6e2aa5eca09b4fa391b13cd52ceb8035a24bf65a79de2" +dependencies = [ + "once_cell", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "errno" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" +dependencies = [ + "errno-dragonfly", + "libc", + "winapi", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "ethnum" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0198b9d0078e0f30dedc7acbb21c974e838fc8fae3ee170128658a98cb2c1c04" + +[[package]] +name = "fallible-streaming-iterator" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "filetime" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a3de6e8d11b22ff9edc6d916f890800597d60f8b2da1caf2955c274638d6412" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "windows-sys 0.45.0", +] + +[[package]] +name = "findshlibs" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40b9e59cd0f7e0806cca4be089683ecb6434e602038df21fe6bf6711b2f07f64" +dependencies = [ + "cc", + "lazy_static", + "libc", + "winapi", +] + +[[package]] +name = "flate2" +version = "1.0.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "foreign_vec" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee1b05cbd864bcaecbd3455d6d967862d446e4ebfc3c2e5e5b9841e53cba6673" + +[[package]] +name = "form_urlencoded" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "531ac96c6ff5fd7c62263c5e3c67a603af4fcaee2e1a0ae5565ba3a11e69e549" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "164713a5a0dcc3e7b4b1ed7d3b433cabc18025386f9339346e8daf15963cf7ac" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86d7a0c1aa76363dac491de0ee99faf6941128376f1cf96f07db7603b7de69dd" + +[[package]] +name = "futures-executor" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1997dd9df74cdac935c76252744c1ed5794fac083242ea4fe77ef3ed60ba0f83" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89d422fa3cbe3b40dca574ab087abb5bc98258ea57eea3fd6f1fa7162c778b91" + +[[package]] +name = "futures-macro" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec93083a4aecafb2a80a885c9de1f0ccae9dbd32c2bb54b0c3a65690e0b8d2f2" + +[[package]] +name = "futures-task" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd65540d33b37b16542a0438c12e6aeead10d4ac5d05bd3f805b8f35ab592879" + +[[package]] +name = "futures-util" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ef6b17e481503ec85211fed8f39d1970f128935ca1f814cd32ac4a6842e84ab" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "getrandom" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", +] + +[[package]] +name = "gimli" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4" + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "half" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" + +[[package]] +name = "hash_hasher" +version = "2.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74721d007512d0cb3338cd20f0654ac913920061a4c4d0d8708edb3f2a698c0c" + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", + "rayon", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + +[[package]] +name = "hermit-abi" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" +dependencies = [ + "libc", +] + +[[package]] +name = "hermit-abi" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" + +[[package]] +name = "iana-time-zone" +version = "0.1.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "winapi", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca" +dependencies = [ + "cxx", + "cxx-build", +] + +[[package]] +name = "idna" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "image" +version = "0.24.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69b7ea949b537b0fd0af141fff8c77690f2ce96f4f41f042ccb6c69c6c965945" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "num-rational", + "num-traits", +] + +[[package]] +name = "indexmap" +version = "1.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", +] + +[[package]] +name = "indicatif" +version = "0.17.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cef509aa9bc73864d6756f0d34d35504af3cf0844373afe9b8669a5b8005a729" +dependencies = [ + "console", + "number_prefix", + "portable-atomic", + "rayon", + "unicode-width", +] + +[[package]] +name = "indoc" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa799dd5ed20a7e349f3b4639aa80d74549c81716d9ec4f994c9b5815598306" + +[[package]] +name = "inferno" +version = "0.11.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fb7c1b80a1dfa604bb4a649a5c5aeef3d913f7c520cb42b40e534e8a61bcdfc" +dependencies = [ + "ahash", + "indexmap", + "is-terminal", + "itoa", + "log", + "num-format", + "once_cell", + "quick-xml", + "rgb", + "str_stack", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfa919a82ea574332e2de6e74b4c36e74d41982b335080fa59d4ef31be20fdf3" +dependencies = [ + "libc", + "windows-sys 0.45.0", +] + +[[package]] +name = "is-terminal" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857" +dependencies = [ + "hermit-abi 0.3.1", + "io-lifetimes", + "rustix", + "windows-sys 0.45.0", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" + +[[package]] +name = "jobserver" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "445dde2150c55e483f3d8416706b97ec8e8237c307e5b7b4b8dd15e6af2a0730" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "lexical" +version = "6.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7aefb36fd43fef7003334742cbf77b243fcd36418a1d1bdd480d613a67968f6" +dependencies = [ + "lexical-core", +] + +[[package]] +name = "lexical-core" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cde5de06e8d4c2faabc400238f9ae1c74d5412d03a7bd067645ccbc47070e46" +dependencies = [ + "lexical-parse-float", + "lexical-parse-integer", + "lexical-util", + "lexical-write-float", + "lexical-write-integer", +] + +[[package]] +name = "lexical-parse-float" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683b3a5ebd0130b8fb52ba0bdc718cc56815b6a097e28ae5a6997d0ad17dc05f" +dependencies = [ + "lexical-parse-integer", + "lexical-util", + "static_assertions", +] + +[[package]] +name = "lexical-parse-integer" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d0994485ed0c312f6d965766754ea177d07f9c00c9b82a5ee62ed5b47945ee9" +dependencies = [ + "lexical-util", + "static_assertions", +] + +[[package]] +name = "lexical-util" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5255b9ff16ff898710eb9eb63cb39248ea8a5bb036bea8085b1a767ff6c4e3fc" +dependencies = [ + "static_assertions", +] + +[[package]] +name = "lexical-write-float" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accabaa1c4581f05a3923d1b4cfd124c329352288b7b9da09e766b0668116862" +dependencies = [ + "lexical-util", + "lexical-write-integer", + "static_assertions", +] + +[[package]] +name = "lexical-write-integer" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1b6f3d1f4422866b68192d62f77bc5c700bee84f3069f2469d7bc8c77852446" +dependencies = [ + "lexical-util", + "static_assertions", +] + +[[package]] +name = "libc" +version = "0.2.140" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" + +[[package]] +name = "libm" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" + +[[package]] +name = "link-cplusplus" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecd207c9c713c34f95a097a5b029ac2ce6010530c7b49d7fea24d977dede04f5" +dependencies = [ + "cc", +] + +[[package]] +name = "linux-raw-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" + +[[package]] +name = "lock_api" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "lz4" +version = "1.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e9e2dd86df36ce760a60f6ff6ad526f7ba1f14ba0356f8254fb6905e6494df1" +dependencies = [ + "libc", + "lz4-sys", +] + +[[package]] +name = "lz4-sys" +version = "1.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d27b317e207b10f69f5e75494119e391a96f48861ae870d1da6edac98ca900" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "matrixmultiply" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "add85d4dd35074e6fedc608f8c8f513a3548619a9024b751949ef0e8e45a4d84" +dependencies = [ + "rawpointer", +] + +[[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "memmap2" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83faa42c0a078c393f6b29d5db232d8be22776a891f8f56e5284faee4a20b327" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1" +dependencies = [ + "autocfg", +] + +[[package]] +name = "miniz_oxide" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" +dependencies = [ + "adler", +] + +[[package]] +name = "mio" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b9d9a46eff5b4ff64b45a9e316a6d1e0bc719ef429cbec4dc630684212bfdf9" +dependencies = [ + "libc", + "log", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.45.0", +] + +[[package]] +name = "multiversion" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "025c962a3dd3cc5e0e520aa9c612201d127dcdf28616974961a649dca64f5373" +dependencies = [ + "multiversion-macros", +] + +[[package]] +name = "multiversion-macros" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8a3e2bde382ebf960c1f3e79689fa5941625fe9bf694a1cb64af3e85faff3af" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "nalgebra" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb2d0de08694bed883320212c18ee3008576bfe8c306f4c3c4a58b4876998be" +dependencies = [ + "approx 0.5.1", + "matrixmultiply", + "num-complex", + "num-rational", + "num-traits", + "simba", + "typenum", +] + +[[package]] +name = "native-tls" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "ndarray" +version = "0.15.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb12d4e967ec485a5f71c6311fe28158e9d6f4bc4a447b474184d0f91a8fa32" +dependencies = [ + "approx 0.4.0", + "cblas-sys", + "libc", + "matrixmultiply", + "num-complex", + "num-integer", + "num-traits", + "rawpointer", + "rayon", +] + +[[package]] +name = "ndarray_einsum_beta" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "668b3abeae3e0637740340e0e32a9bf9308380e146ea6797950f9ff16e88d88a" +dependencies = [ + "lazy_static", + "ndarray", + "num-traits", + "regex", +] + +[[package]] +name = "nix" +version = "0.26.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" +dependencies = [ + "bitflags", + "cfg-if", + "libc", + "static_assertions", +] + +[[package]] +name = "now" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d89e9874397a1f0a52fc1f197a8effd9735223cb2390e9dcc83ac6cd02923d0" +dependencies = [ + "chrono", +] + +[[package]] +name = "nshare" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4447657cd40e3107416ec4f2ac3e61a18781b00061789e3b8f4bbcbccb26c4c6" +dependencies = [ + "image", + "nalgebra", + "ndarray", +] + +[[package]] +name = "ntapi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc51db7b362b205941f71232e56c625156eb9a929f8cf74a428fd5bc094a4afc" +dependencies = [ + "winapi", +] + +[[package]] +name = "num" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43db66d1170d347f9a065114077f7dccb00c1b9478c89384490a3425279a4606" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02e0d21255c828d6f128a1e41534206671e8c3ea0c62f32291e808dc82cff17d" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-format" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a652d9771a63711fd3c3deb670acfbe5c30a4072e664d7a3bf5a9e1056ac72c3" +dependencies = [ + "arrayvec", + "itoa", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" +dependencies = [ + "hermit-abi 0.2.6", + "libc", +] + +[[package]] +name = "number_prefix" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" + +[[package]] +name = "numpy" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b0fee4571867d318651c24f4a570c3f18408cf95f16ccb576b3ce85496a46e" +dependencies = [ + "libc", + "ndarray", + "num-complex", + "num-integer", + "num-traits", + "pyo3", + "rustc-hash", +] + +[[package]] +name = "object" +version = "0.30.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3" + +[[package]] +name = "oorandom" +version = "11.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" + +[[package]] +name = "openblas-build" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eba42c395477605f400a8d79ee0b756cfb82abe3eb5618e35fa70d3a36010a7f" +dependencies = [ + "anyhow", + "flate2", + "native-tls", + "tar", + "thiserror", + "ureq", + "walkdir", +] + +[[package]] +name = "openblas-src" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e5d8af0b707ac2fe1574daa88b4157da73b0de3dc7c39fe3e2c0bb64070501" +dependencies = [ + "dirs 3.0.2", + "openblas-build", + "vcpkg", +] + +[[package]] +name = "openssl" +version = "0.10.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b102428fd03bc5edf97f62620f7298614c45cedf287c271e7ed450bbaf83f2e1" +dependencies = [ + "bitflags", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23bbbf7854cd45b83958ebe919f0e8e516793727652e27fda10a8384cfc790b7" +dependencies = [ + "autocfg", + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "os_str_bytes" +version = "6.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" + +[[package]] +name = "parking_lot" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +dependencies = [ + "instant", + "lock_api", + "parking_lot_core 0.8.6", +] + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core 0.9.7", +] + +[[package]] +name = "parking_lot_core" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc" +dependencies = [ + "cfg-if", + "instant", + "libc", + "redox_syscall", + "smallvec", + "winapi", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-sys 0.45.0", +] + +[[package]] +name = "parquet-format-safe" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1131c54b167dd4e4799ce762e1ab01549ebb94d5bdd13e6ec1b467491c378e1f" +dependencies = [ + "async-trait", + "futures", +] + +[[package]] +name = "parquet2" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aefc53bedbf9bbe0ff8912befafaafe30ced83851fb0aebe86696a9289ebb29e" +dependencies = [ + "async-stream", + "brotli", + "flate2", + "futures", + "lz4", + "parquet-format-safe", + "seq-macro", + "snap", + "streaming-decompression", + "zstd", +] + +[[package]] +name = "paste" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" + +[[package]] +name = "percent-encoding" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" + +[[package]] +name = "phf" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "928c6535de93548188ef63bb7c4036bd415cd8f36ad25af44b9789b2ee72a48c" +dependencies = [ + "phf_macros", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1181c94580fa345f50f19d738aaa39c0ed30a600d95cb2d3e23f94266f14fbf" +dependencies = [ + "phf_shared", + "rand", +] + +[[package]] +name = "phf_macros" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92aacdc5f16768709a569e913f7451034034178b05bdc8acda226659a3dccc66" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "phf_shared" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1fb5f6f826b772a8d4c0394209441e7d37cbbb967ae9c7e0e8134365c9ee676" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" + +[[package]] +name = "planus" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc1691dd09e82f428ce8d6310bd6d5da2557c82ff17694d2a32cad7242aea89f" +dependencies = [ + "array-init-cursor", +] + +[[package]] +name = "plotters" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2538b639e642295546c50fcd545198c9d64ee2a38620a628724a3b266d5fbf97" +dependencies = [ + "num-traits", + "plotters-backend", + "plotters-svg", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "plotters-backend" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "193228616381fecdc1224c62e96946dfbc73ff4384fba576e052ff8c1bea8142" + +[[package]] +name = "plotters-svg" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9a81d2759aae1dae668f783c308bc5c8ebd191ff4184aaa1b37f65a6ae5a56f" +dependencies = [ + "plotters-backend", +] + +[[package]] +name = "polars" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8918f4add49e6244bae2fe91cac89be339f2d6a77c59a4df3d7348bd40f98d1e" +dependencies = [ + "getrandom", + "polars-core", + "polars-io", + "polars-lazy", + "polars-ops", + "polars-time", + "version_check", +] + +[[package]] +name = "polars-arrow" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06e57a7b929edf6c73475dbc3f63d35152f14f4a9455476acc6127d770daa0f6" +dependencies = [ + "arrow2", + "hashbrown 0.13.2", + "num", + "thiserror", +] + +[[package]] +name = "polars-core" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a440cd53916f1a87fac1fda36cd7cc2d226247b4d4570d96242da5fa7f07b2a" +dependencies = [ + "ahash", + "anyhow", + "arrow2", + "bitflags", + "chrono", + "comfy-table", + "hashbrown 0.13.2", + "indexmap", + "ndarray", + "num", + "once_cell", + "polars-arrow", + "polars-utils", + "rand", + "rand_distr", + "rayon", + "regex", + "serde", + "smartstring", + "thiserror", + "wasm-timer", + "xxhash-rust", +] + +[[package]] +name = "polars-io" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d941750cba70a3acf150b959fcf446c09e8a8a4a35d03472d941bd6740bc43" +dependencies = [ + "ahash", + "anyhow", + "arrow2", + "bytes", + "chrono", + "dirs 4.0.0", + "lexical", + "lexical-core", + "memchr", + "memmap2", + "num", + "once_cell", + "polars-arrow", + "polars-core", + "polars-time", + "polars-utils", + "rayon", + "regex", + "simdutf8", +] + +[[package]] +name = "polars-lazy" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d227fcb817485be462748d3172d2e55c61d56fbdc7fd56c24b72fa2e510e7be6" +dependencies = [ + "ahash", + "bitflags", + "glob", + "polars-arrow", + "polars-core", + "polars-io", + "polars-ops", + "polars-pipe", + "polars-plan", + "polars-time", + "polars-utils", + "rayon", +] + +[[package]] +name = "polars-ops" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36638340fd9f4377dab11f307877ebb5bdac3bc9b25ea32a771584de76e5280a" +dependencies = [ + "arrow2", + "polars-arrow", + "polars-core", + "polars-utils", +] + +[[package]] +name = "polars-pipe" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac1dfae18a14a812119d3328dae8790be53f1bc0fbcb977606dcf0f181490a8f" +dependencies = [ + "crossbeam-channel", + "enum_dispatch", + "hashbrown 0.13.2", + "num", + "polars-arrow", + "polars-core", + "polars-io", + "polars-ops", + "polars-plan", + "polars-utils", + "rayon", + "smartstring", +] + +[[package]] +name = "polars-plan" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ca57df4974f25fa0642ae18ef00c0836c5120d4371be77a34d4684173b043c3" +dependencies = [ + "ahash", + "once_cell", + "polars-arrow", + "polars-core", + "polars-io", + "polars-ops", + "polars-time", + "polars-utils", + "rayon", +] + +[[package]] +name = "polars-time" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d961a9ccbe3c739de063fbf78449b3c172baf3379f958769c42ee9c309289786" +dependencies = [ + "chrono", + "lexical", + "now", + "once_cell", + "polars-arrow", + "polars-core", + "polars-ops", + "polars-utils", + "regex", +] + +[[package]] +name = "polars-utils" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a741a3325c544c97c7a9ff57d857f089b60041bd92b06c41582df6940ffaa05b" +dependencies = [ + "once_cell", + "rayon", + "sysinfo", +] + +[[package]] +name = "portable-atomic" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26f6a7b87c2e435a3241addceeeff740ff8b7e76b74c13bf9acb17fa454ea00b" + +[[package]] +name = "pprof" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "196ded5d4be535690899a4631cc9f18cdc41b7ebf24a79400f46f48e49a11059" +dependencies = [ + "backtrace", + "cfg-if", + "criterion", + "findshlibs", + "inferno", + "libc", + "log", + "nix", + "once_cell", + "parking_lot 0.12.1", + "smallvec", + "symbolic-demangle", + "tempfile", + "thiserror", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "proc-macro-hack" +version = "0.5.20+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" + +[[package]] +name = "proc-macro2" +version = "1.0.51" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "pyo3" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06a3d8e8a46ab2738109347433cb7b96dffda2e4a218b03ef27090238886b147" +dependencies = [ + "cfg-if", + "indoc", + "libc", + "memoffset", + "parking_lot 0.12.1", + "pyo3-build-config", + "pyo3-ffi", + "pyo3-macros", + "unindent", +] + +[[package]] +name = "pyo3-build-config" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75439f995d07ddfad42b192dfcf3bc66a7ecfd8b4a1f5f6f046aa5c2c5d7677d" +dependencies = [ + "once_cell", + "target-lexicon", +] + +[[package]] +name = "pyo3-ffi" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "839526a5c07a17ff44823679b68add4a58004de00512a95b6c1c98a6dcac0ee5" +dependencies = [ + "libc", + "pyo3-build-config", +] + +[[package]] +name = "pyo3-macros" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd44cf207476c6a9760c4653559be4f206efafb924d3e4cbf2721475fc0d6cc5" +dependencies = [ + "proc-macro2", + "pyo3-macros-backend", + "quote", + "syn", +] + +[[package]] +name = "pyo3-macros-backend" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc1f43d8e30460f36350d18631ccf85ded64c059829208fe680904c65bcd0a4c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pyo3-polars" +version = "0.2.0" +source = "git+https://github.com/benjaminrwilson/pyo3-polars#101be638680305e384ee47066576aaddc7941833" +dependencies = [ + "arrow2", + "polars", + "polars-core", + "pyo3", + "serde", + "thiserror", +] + +[[package]] +name = "quick-xml" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f50b1c63b38611e7d4d7f68b82d3ad0cc71a2ad2e7f61fc10f1328d917c93cd" +dependencies = [ + "memchr", +] + +[[package]] +name = "quote" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rand_distr" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" +dependencies = [ + "num-traits", + "rand", +] + +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + +[[package]] +name = "rayon" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-utils", + "num_cpus", +] + +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags", +] + +[[package]] +name = "redox_users" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +dependencies = [ + "getrandom", + "redox_syscall", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.6.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" + +[[package]] +name = "rgb" +version = "0.8.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20ec2d3e3fc7a92ced357df9cebd5a10b6fb2aa1ee797bf7e9ce2f17dffc8f59" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.36.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd5c6ff11fecd55b40746d1995a02f2eb375bf8c00d192d521ee09f42bef37bc" +dependencies = [ + "bitflags", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys", + "windows-sys 0.45.0", +] + +[[package]] +name = "rustls-native-certs" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50" +dependencies = [ + "openssl-probe", + "rustls-pemfile", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" +dependencies = [ + "base64 0.21.0", +] + +[[package]] +name = "rustversion" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" + +[[package]] +name = "ryu" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" + +[[package]] +name = "safe_arch" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "794821e4ccb0d9f979512f9c1973480123f9bd62a90d74ab0f9426fcf8f4a529" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "schannel" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" +dependencies = [ + "windows-sys 0.42.0", +] + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "scratch" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" + +[[package]] +name = "security-framework" +version = "2.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" +dependencies = [ + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31c9bb296072e961fcbd8853511dd39c2d8be2deb1e17c6860b1d30732b323b4" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" + +[[package]] +name = "seq-macro" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6b44e8fc93a14e66336d230954dda83d18b4605ccace8fe09bc7514a71ad0bc" + +[[package]] +name = "serde" +version = "1.0.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71f2b4817415c6d4210bfe1c7bfcf4801b2d904cb4d0e1a8fdb651013c9e86b8" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d071a94a3fac4aff69d023a7f411e33f40f3483f8c5190b1953822b6b76d7630" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.94" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "signal-hook" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "732768f1176d21d09e076c23a93123d40bba92d50c4058da34d45c8de8e682b9" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-mio" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" +dependencies = [ + "libc", + "mio", + "signal-hook", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +dependencies = [ + "libc", +] + +[[package]] +name = "simba" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f3fd720c48c53cace224ae62bef1bbff363a70c68c4802a78b5cc6159618176" +dependencies = [ + "approx 0.5.1", + "num-complex", + "num-traits", + "paste", + "wide", +] + +[[package]] +name = "simdutf8" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" + +[[package]] +name = "siphasher" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" + +[[package]] +name = "slab" +version = "0.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" + +[[package]] +name = "smartstring" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29" +dependencies = [ + "autocfg", + "static_assertions", + "version_check", +] + +[[package]] +name = "snap" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831" + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "str_stack" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9091b6114800a5f2141aee1d1b9d6ca3592ac062dc5decb3764ec5895a47b4eb" + +[[package]] +name = "streaming-decompression" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf6cc3b19bfb128a8ad11026086e31d3ce9ad23f8ea37354b31383a187c44cf3" +dependencies = [ + "fallible-streaming-iterator", +] + +[[package]] +name = "streaming-iterator" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b2231b7c3057d5e4ad0156fb3dc807d900806020c5ffa3ee6ff2c8c76fb8520" + +[[package]] +name = "strength_reduce" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe895eb47f22e2ddd4dabc02bce419d2e643c8e3b585c78158b349195bc24d82" + +[[package]] +name = "strum" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" + +[[package]] +name = "strum_macros" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn", +] + +[[package]] +name = "symbolic-common" +version = "10.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b55cdc318ede251d0957f07afe5fed912119b8c1bc5a7804151826db999e737" +dependencies = [ + "debugid", + "memmap2", + "stable_deref_trait", + "uuid", +] + +[[package]] +name = "symbolic-demangle" +version = "10.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79be897be8a483a81fff6a3a4e195b4ac838ef73ca42d348b3f722da9902e489" +dependencies = [ + "cpp_demangle", + "rustc-demangle", + "symbolic-common", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sysinfo" +version = "0.27.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a902e9050fca0a5d6877550b769abd2bd1ce8c04634b941dbe2809735e1a1e33" +dependencies = [ + "cfg-if", + "core-foundation-sys", + "libc", + "ntapi", + "once_cell", + "winapi", +] + +[[package]] +name = "tar" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6" +dependencies = [ + "filetime", + "libc", + "xattr", +] + +[[package]] +name = "target-lexicon" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ae9980cab1db3fceee2f6c6f643d5d8de2997c58ee8d25fb0cc8a9e9e7348e5" + +[[package]] +name = "tempfile" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af18f7ae1acd354b992402e9ec5864359d693cd8a79dcbef59f76891701c1e95" +dependencies = [ + "cfg-if", + "fastrand", + "redox_syscall", + "rustix", + "windows-sys 0.42.0", +] + +[[package]] +name = "termcolor" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "textwrap" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" + +[[package]] +name = "thiserror" +version = "1.0.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5ab016db510546d856297882807df8da66a16fb8c4101cb8b30054b0d5b2d9c" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5420d42e90af0c38c3290abcca25b9b3bdf379fc9f55c528f53a269d9c9a267e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "time" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" +dependencies = [ + "libc", + "wasi 0.10.0+wasi-snapshot-preview1", + "winapi", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tinytemplate" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "typenum" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" + +[[package]] +name = "unicode-bidi" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524b68aca1d05e03fdf03fcdce2c6c94b6daf6d16861ddaa7e4f2b6638a9052c" + +[[package]] +name = "unicode-ident" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-width" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" + +[[package]] +name = "unindent" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1766d682d402817b5ac4490b3c3002d91dfa0d22812f341609f97b08757359c" + +[[package]] +name = "ureq" +version = "2.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "338b31dd1314f68f3aabf3ed57ab922df95ffcd902476ca7ba3c4ce7b908c46d" +dependencies = [ + "base64 0.13.1", + "flate2", + "log", + "native-tls", + "once_cell", + "rustls-native-certs", + "url", +] + +[[package]] +name = "url" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "uuid" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1674845326ee10d37ca60470760d4288a6f80f304007d92e5c53bab78c9cfd79" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "walkdir" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +dependencies = [ + "same-file", + "winapi", + "winapi-util", +] + +[[package]] +name = "wasi" +version = "0.10.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31f8dcbc21f30d9b8f2ea926ecb58f6b91192c17e9d33594b3df58b2007ca53b" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95ce90fd5bcc06af55a641a86428ee4229e44e07033963a2290a8e241607ccb9" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f219e0d211ba40266969f6dbdd90636da12f75bee4fc9d6c23d1260dadb51454" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c21f77c0bedc37fd5dc21f897894a5ca01e7bb159884559461862ae90c0b4c5" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.84" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" + +[[package]] +name = "wasm-timer" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f" +dependencies = [ + "futures", + "js-sys", + "parking_lot 0.11.2", + "pin-utils", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "web-sys" +version = "0.3.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e33b99f4b23ba3eec1a53ac264e35a755f00e966e0065077d6027c0f575b0b97" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "wide" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b689b6c49d6549434bf944e6b0f39238cf63693cb7a147e9d887507fffa3b223" +dependencies = [ + "bytemuck", + "safe_arch", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-sys" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" + +[[package]] +name = "xattr" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc" +dependencies = [ + "libc", +] + +[[package]] +name = "xxhash-rust" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "735a71d46c4d68d71d4b24d03fdc2b98e38cea81730595801db779c04fe80d70" + +[[package]] +name = "zstd" +version = "0.11.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "5.0.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.7+zstd.1.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94509c3ba2fe55294d752b79842c530ccfab760192521df74a081a78d2b3c7f5" +dependencies = [ + "cc", + "libc", + "pkg-config", +] diff --git a/rust/Cargo.toml b/rust/Cargo.toml new file mode 100644 index 00000000..3ba3c962 --- /dev/null +++ b/rust/Cargo.toml @@ -0,0 +1,39 @@ +[package] +name = "av2" +version = "0.3.0" +edition = "2021" + +[package.metadata.maturin] +name = "av2._r" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +[lib] +name = "av2" +crate-type = ["cdylib"] + +[dependencies] +anyhow = "1.0.66" +bincode = "1.3.3" +criterion = "0.4.0" +glob = "0.3.1" +image = "0.24.5" +itertools = "0.10.5" +ndarray = { version = "0.15.6", features = [ + "matrixmultiply-threading", + "rayon", +] } +nshare = "0.9.0" +numpy = { version = "0.18.0" } +once_cell = "1.17.1" +polars = { version = "0.27.2", features = [ + "dtype-u8", + "lazy", + "ndarray", + "parquet", + "ipc", + "serde", +] } +pyo3 = { version = "0.18.1", features = ["extension-module"] } +pyo3-polars = { git = "https://github.com/benjaminrwilson/pyo3-polars" } +rayon = "1.6.1" +serde = "1.0.155" diff --git a/rust/README.md b/rust/README.md new file mode 100644 index 00000000..6ddaabdf --- /dev/null +++ b/rust/README.md @@ -0,0 +1,3 @@ +# Rust API + +This API is **experimental** and is not intended to be used directly at this time. diff --git a/rust/src/constants.rs b/rust/src/constants.rs new file mode 100644 index 00000000..98fa980f --- /dev/null +++ b/rust/src/constants.rs @@ -0,0 +1,28 @@ +//! # constants +//! +//! Common constants used throughout the library. + +/// Annotation dataframe columns. +/// Found in `annotations.feather`. +pub const ANNOTATION_COLUMNS: [&str; 13] = [ + "tx_m", + "ty_m", + "tz_m", + "length_m", + "width_m", + "height_m", + "qw", + "qx", + "qy", + "qz", + "num_interior_pts", + "category", + "track_uuid", +]; + +/// Pose dataframe columns. +/// Found in `city_SE3_egovehicle`. +pub const POSE_COLUMNS: [&str; 7] = ["tx_m", "ty_m", "tz_m", "qw", "qx", "qy", "qz"]; + +/// Unknown map file name for use if the map doesn't exist. +pub const DEFAULT_MAP_FILE_NAME: &str = "log_map_archive___DEFAULT_city_00000.json"; diff --git a/rust/src/data_loader.rs b/rust/src/data_loader.rs new file mode 100644 index 00000000..7e50ad1f --- /dev/null +++ b/rust/src/data_loader.rs @@ -0,0 +1,339 @@ +//! # data_loaders +//! +//! Data-loader for loading the sensor dataset. + +use constants::{ANNOTATION_COLUMNS, POSE_COLUMNS}; +use io::{read_accumulate_lidar, read_timestamped_feather}; +use itertools::{multiunzip, Itertools}; +use path::{extract_file_stem, walk_dir}; +use pyo3::prelude::*; +use pyo3_polars::PyDataFrame; +use rayon::slice::ParallelSliceMut; +use serde::{Deserialize, Serialize}; +use std::{ + path::{Path, PathBuf}, + str::FromStr, +}; + +use anyhow::Result; +use bincode::{deserialize, serialize}; +use glob::glob; +use polars::prelude::*; +use pyo3::types::PyBytes; + +use crate::{ + constants::{self, DEFAULT_MAP_FILE_NAME}, + io, path, +}; + +const MIN_NUM_LIDAR_PTS: u64 = 1; + +/// Data associated with a single lidar sweep. +#[pyclass] +pub struct Sweep { + /// Ego-vehicle city pose. + #[pyo3(get, set)] + pub city_pose: PyDataFrame, + /// Point cloud associated with the sweep. + #[pyo3(get, set)] + pub lidar: PyDataFrame, + /// Log id and nanosecond timestamp (unique identifier). + #[pyo3(get, set)] + pub sweep_uuid: (String, u64), + /// Cuboids associated with the sweep. + #[pyo3(get, set)] + pub cuboids: Option, +} + +/// Encapsulates sensor data associated with a single sweep. +#[pymethods] +impl Sweep { + /// Initialize a sweep object. + #[new] + pub fn new( + annotations: PyDataFrame, + city_pose: PyDataFrame, + lidar: PyDataFrame, + sweep_uuid: (String, u64), + ) -> Sweep { + Sweep { + city_pose, + lidar, + sweep_uuid, + cuboids: Some(annotations), + } + } +} + +/// Sensor data-loader for `av2`. +#[derive(Serialize, Deserialize)] +#[pyclass(module = "av2._r")] +pub struct DataLoader { + /// Root dataset directory. + #[pyo3(get, set)] + pub root_dir: PathBuf, + /// Dataset name (e.g., `av2`). + #[pyo3(get, set)] + pub dataset_name: String, + /// Root dataset type (e.g., `sensor`). + #[pyo3(get, set)] + pub dataset_type: String, + /// Root dataset split name (e.g., `train`). + #[pyo3(get, set)] + pub split_name: String, + /// Number of accumulated lidar sweeps. + #[pyo3(get, set)] + pub num_accumulated_sweeps: usize, + /// Boolean flag to enable memory-mapped data-frame loading. + #[pyo3(get, set)] + pub memory_mapped: bool, + /// Data-frame consisting of `log_id`, `timestamp_ns`, and `city_name`. + #[pyo3(get, set)] + pub file_index: PyDataFrame, + /// Current index of the data-loader. + #[pyo3(get, set)] + pub current_index: usize, +} + +#[pymethods] +impl DataLoader { + /// Initialize the data-loader and build the file index. + #[new] + pub fn new( + root_dir: &str, + dataset_name: &str, + dataset_type: &str, + split_name: &str, + num_accumulated_sweeps: usize, + memory_mapped: bool, + ) -> DataLoader { + let root_dir = PathBuf::from_str(root_dir).unwrap(); + let file_index = PyDataFrame(build_file_index( + root_dir.as_path(), + dataset_name, + dataset_type, + split_name, + )); + + let dataset_name = dataset_name.to_string(); + let dataset_type = dataset_type.to_string(); + let split_name = split_name.to_string(); + let current_index = 0; + DataLoader { + root_dir, + dataset_name, + dataset_type, + split_name, + num_accumulated_sweeps, + memory_mapped, + file_index, + current_index, + } + } + + fn split_dir(&self) -> PathBuf { + self.root_dir + .join(&self.dataset_name) + .join(&self.dataset_type) + .join(&self.split_name) + } + + fn log_dir(&self, log_id: &str) -> PathBuf { + self.split_dir().join(log_id) + } + + fn lidar_path(&self, log_id: &str, timestamp_ns: u64) -> PathBuf { + let file_name = format!("{timestamp_ns}.feather"); + let lidar_path = [ + self.log_dir(log_id), + "sensors".to_string().into(), + "lidar".to_string().into(), + file_name.into(), + ] + .iter() + .collect(); + lidar_path + } + + fn annotations_path(&self, log_id: &str) -> PathBuf { + self.log_dir(log_id).join("annotations.feather") + } + + fn city_pose_path(&self, log_id: &str) -> PathBuf { + self.log_dir(log_id).join("city_SE3_egovehicle.feather") + } + + fn map_dir(&self, log_id: &str) -> PathBuf { + self.log_dir(log_id).join("map") + } + + fn read_city_pose(&self, log_id: &str, timestamp_ns: u64) -> PyDataFrame { + PyDataFrame( + read_timestamped_feather( + &self.city_pose_path(log_id), + &POSE_COLUMNS.to_vec(), + ×tamp_ns, + self.memory_mapped, + ) + .collect() + .unwrap(), + ) + } + + fn read_lidar(&self, log_id: &str, timestamp_ns: u64, index: usize) -> PyDataFrame { + PyDataFrame( + read_accumulate_lidar( + self.log_dir(log_id), + &self.file_index.0, + log_id, + timestamp_ns, + index, + self.num_accumulated_sweeps, + self.memory_mapped, + ) + .collect() + .unwrap(), + ) + } + + fn read_annotations(&self, log_id: &str, timestamp_ns: u64) -> PyDataFrame { + PyDataFrame( + read_timestamped_feather( + &self.annotations_path(log_id), + &ANNOTATION_COLUMNS.to_vec(), + ×tamp_ns, + self.memory_mapped, + ) + .filter(col("num_interior_pts").gt_eq(MIN_NUM_LIDAR_PTS)) + .collect() + .unwrap(), + ) + } + + /// Get the sweep at `index`. + pub fn get(&self, index: usize) -> Sweep { + let row = self.file_index.0.get_row(index).unwrap().0; + let (log_id, timestamp_ns) = ( + row.get(0).unwrap().get_str().unwrap(), + row.get(1).unwrap().try_extract::().unwrap(), + ); + + // Annotations aren't available for the test set. + let cuboids = match self.split_name.as_str() { + "test" => None, + _ => Some(self.read_annotations(log_id, timestamp_ns)), + }; + + let city_pose = self.read_city_pose(log_id, timestamp_ns); + let lidar = self.read_lidar(log_id, timestamp_ns, index); + let sweep_uuid = (log_id.to_string(), timestamp_ns); + + Sweep { + city_pose, + lidar, + sweep_uuid, + cuboids, + } + } + + fn __iter__(slf: PyRef<'_, Self>) -> PyRef<'_, Self> { + slf + } + + fn __next__(mut slf: PyRefMut<'_, Self>) -> Option { + slf.next() + } + + fn __len__(slf: PyRef<'_, Self>) -> usize { + slf.file_index.0.shape().0 + } + + /// Used for python pickling. + pub fn __setstate__(&mut self, state: &PyBytes) -> PyResult<()> { + *self = deserialize(state.as_bytes()).unwrap(); + Ok(()) + } + + /// Used for python pickling. + pub fn __getstate__<'py>(&self, py: Python<'py>) -> PyResult<&'py PyBytes> { + Ok(PyBytes::new(py, &serialize(&self).unwrap())) + } + + /// Used for python pickling. + pub fn __getnewargs__(&self) -> PyResult<(PathBuf, String, String, String, usize)> { + Ok(( + self.root_dir.clone(), + self.dataset_type.clone(), + self.split_name.clone(), + self.dataset_name.clone(), + self.num_accumulated_sweeps, + )) + } +} + +impl Iterator for DataLoader { + type Item = Sweep; + + fn next(&mut self) -> Option { + let idx = self.current_index; + let sweep_data = self.get(idx); + self.current_index += 1; + + Some(sweep_data) + } +} + +fn build_file_index( + root_dir: &Path, + dataset_name: &str, + dataset_type: &str, + split_name: &str, +) -> DataFrame { + let split_dir = root_dir.join(format!("{dataset_name}/{dataset_type}/{split_name}")); + let mut entry_set: Vec<_> = walk_dir(&split_dir) + .unwrap_or_else(|_| panic!("Cannot walk the following directory: {split_dir:?}")); + entry_set.par_sort(); + + let city_name_index = 7; + let (log_ids, timestamp_nss, city_names): (Vec<_>, Vec<_>, Vec<_>) = + multiunzip(entry_set.into_iter().map(|log_path| { + let log_id = extract_file_stem(&log_path).unwrap(); + let lidar_dir = log_path.join("sensors/lidar"); + let x = log_path.join("map/log_map_archive_*.json"); + let city_name = glob(x.to_str().unwrap()) + .unwrap() + .find_map(Result::ok) + .unwrap_or(DEFAULT_MAP_FILE_NAME.into()) + .to_str() + .unwrap() + .split('_') + .collect_vec()[city_name_index] + .to_string(); + + let mut lidar_entry_set: Vec<_> = glob(lidar_dir.join("*.feather").to_str().unwrap()) + .unwrap() + .filter_map(|x| x.ok()) + .map(|x| x.as_path().to_owned()) + .collect(); + lidar_entry_set.par_sort(); + + let num_entries = lidar_entry_set.len(); + ( + vec![log_id; num_entries], + lidar_entry_set + .into_iter() + .map(|lidar_path| { + let lidar_path = lidar_path.file_stem().unwrap().to_str(); + lidar_path.unwrap().parse::().unwrap() + }) + .collect_vec(), + vec![city_name; num_entries], + ) + })); + df!( + "log_id" => log_ids.into_iter().flatten().collect_vec(), + "timestamp_ns" => timestamp_nss.into_iter().flatten().collect_vec(), + "city_name" => city_names.into_iter().flatten().collect_vec(), + ) + .unwrap() +} diff --git a/rust/src/io.rs b/rust/src/io.rs new file mode 100644 index 00000000..6985fd0a --- /dev/null +++ b/rust/src/io.rs @@ -0,0 +1,205 @@ +//! # io +//! +//! Reading and writing operations. + +use ndarray::s; +use ndarray::Array2; + +use polars::lazy::dsl::lit; +use polars::lazy::dsl::Expr; +use polars::prelude::Float32Type; +use polars::prelude::NamedFrom; + +use polars::prelude::concat; +use polars::prelude::LazyFrame; +use polars::prelude::SerReader; + +use polars::prelude::TakeRandom; +use polars::series::Series; +use polars::{ + self, + lazy::dsl::{col, cols}, + prelude::{DataFrame, IntoLazy}, +}; +use rayon::prelude::IntoParallelIterator; +use rayon::prelude::ParallelIterator; +use std::fs::File; +use std::path::PathBuf; + +use crate::constants::POSE_COLUMNS; +use crate::se3::SE3; +use crate::so3::quat_to_mat3; + +/// Read a feather file and load into a `polars` dataframe. +pub fn read_feather(path: &PathBuf, memory_mapped: bool) -> DataFrame { + let file = File::open(path).expect("File not found"); + polars::io::ipc::IpcReader::new(file) + .memory_mapped(memory_mapped) + .finish() + .unwrap_or_else(|_| panic!("This IPC file is malformed: {:?}.", path)) +} + +/// Read and accumulate lidar sweeps. +/// Accumulation will only occur if `num_accumulated_sweeps` > 1. +/// Sweeps are motion-compensated to the most recent sweep (i.e., at `timestamp_ns`). +pub fn read_accumulate_lidar( + log_dir: PathBuf, + file_index: &DataFrame, + log_id: &str, + timestamp_ns: u64, + idx: usize, + num_accumulated_sweeps: usize, + memory_mapped: bool, +) -> LazyFrame { + let start_idx = i64::max(idx as i64 - num_accumulated_sweeps as i64 + 1, 0) as usize; + let log_ids = file_index["log_id"].utf8().unwrap(); + let timestamps = file_index["timestamp_ns"].u64().unwrap(); + let poses_path = log_dir.join("city_SE3_egovehicle.feather"); + let poses = read_feather(&poses_path, memory_mapped); + + let pose_ref = ndarray_filtered_from_frame( + &poses, + cols(POSE_COLUMNS), + col("timestamp_ns").eq(timestamp_ns), + ); + + let translation = pose_ref.slice(s![0, ..3]).as_standard_layout().to_owned(); + let quat_wxyz = pose_ref.slice(s![0, 3..]).as_standard_layout().to_owned(); + let rotation = quat_to_mat3(&quat_wxyz.view()); + let city_se3_ego = SE3 { + rotation, + translation, + }; + let ego_se3_city = city_se3_ego.inverse(); + let indices: Vec<_> = (start_idx..=idx).collect(); + let mut lidar_list = indices + .into_par_iter() + .filter_map(|i| { + let log_id_i = log_ids.get(i).unwrap(); + match log_id_i == log_id { + true => Some(i), + _ => None, + } + }) + .map(|i| { + let timestamp_ns_i = timestamps.get(i).unwrap(); + let lidar_path = build_lidar_file_path(log_dir.clone(), timestamp_ns_i); + let mut lidar = read_feather(&lidar_path, memory_mapped).lazy(); + + let xyz = + ndarray_from_frame(&lidar.clone().collect().unwrap(), cols(["x", "y", "z"])); + let timedeltas = Series::new( + "timedelta_ns", + vec![(timestamp_ns - timestamp_ns_i) as f32 * 1e-9; xyz.shape()[0]], + ); + if timestamp_ns_i != timestamp_ns { + let pose_i = ndarray_filtered_from_frame( + &poses, + cols(POSE_COLUMNS), + col("timestamp_ns").eq(timestamp_ns_i), + ); + + let translation_i = pose_i.slice(s![0, ..3]).as_standard_layout().to_owned(); + let quat_wxyz = pose_i.slice(s![0, 3..]).as_standard_layout().to_owned(); + let rotation_i = quat_to_mat3(&quat_wxyz.view()); + let city_se3_ego_i = SE3 { + rotation: rotation_i, + translation: translation_i, + }; + let ego_ref_se3_ego_i = ego_se3_city.compose(&city_se3_ego_i); + let xyz_ref = ego_ref_se3_ego_i.transform_from(&xyz.view()); + let x_ref = Series::new( + "x", + xyz_ref + .slice(s![.., 0]) + .as_standard_layout() + .to_owned() + .into_raw_vec(), + ); + let y_ref = Series::new( + "y", + xyz_ref + .slice(s![.., 1]) + .as_standard_layout() + .to_owned() + .into_raw_vec(), + ); + let z_ref = Series::new( + "z", + xyz_ref + .slice(s![.., 2]) + .as_standard_layout() + .to_owned() + .into_raw_vec(), + ); + + lidar = lidar.with_columns(vec![lit(x_ref), lit(y_ref), lit(z_ref)]); + } + lidar = lidar.with_column(lit(timedeltas)); + lidar + }) + .collect::>(); + + lidar_list.reverse(); + concat(lidar_list, true, true).unwrap() +} + +/// Read a dataframe, but filter for the specified timestamp. +pub fn read_timestamped_feather( + path: &PathBuf, + columns: &Vec<&str>, + timestamp_ns: &u64, + memory_mapped: bool, +) -> LazyFrame { + read_feather(path, memory_mapped) + .lazy() + .filter(col("timestamp_ns").eq(*timestamp_ns)) + .select(&[cols(columns)]) +} + +/// Build the lidar file path. +pub fn build_lidar_file_path(log_dir: PathBuf, timestamp_ns: u64) -> PathBuf { + let file_name = format!("{timestamp_ns}.feather"); + let lidar_path = [ + log_dir, + "sensors".to_string().into(), + "lidar".to_string().into(), + file_name.into(), + ] + .iter() + .collect(); + lidar_path +} + +/// Convert a dataframe to `ndarray`. +pub fn ndarray_from_frame(frame: &DataFrame, exprs: Expr) -> Array2 { + frame + .clone() + .lazy() + .select(&[exprs]) + .collect() + .unwrap() + .to_ndarray::() + .unwrap() + .as_standard_layout() + .to_owned() +} + +/// Convert a dataframe to `ndarray` and filter. +pub fn ndarray_filtered_from_frame( + frame: &DataFrame, + select_exprs: Expr, + filter_exprs: Expr, +) -> Array2 { + frame + .clone() + .lazy() + .filter(filter_exprs) + .select(&[select_exprs]) + .collect() + .unwrap() + .to_ndarray::() + .unwrap() + .as_standard_layout() + .to_owned() +} diff --git a/rust/src/lib.rs b/rust/src/lib.rs new file mode 100644 index 00000000..49426e9b --- /dev/null +++ b/rust/src/lib.rs @@ -0,0 +1,61 @@ +//! # av2 +//! +//! Argoverse 2 Rust library. + +#![warn(missing_docs)] +#![warn(missing_doc_code_examples)] + +pub mod constants; +pub mod data_loader; +pub mod io; +pub mod ops; +pub mod path; +pub mod se3; +pub mod so3; + +use data_loader::{DataLoader, Sweep}; +use ndarray::Dim; +use numpy::{IntoPyArray, PyArray}; +use pyo3::prelude::*; + +use numpy::PyReadonlyArray2; + +use crate::ops::voxelize; + +#[pyfunction] +#[pyo3(name = "voxelize")] +#[allow(clippy::type_complexity)] +fn py_voxelize<'py>( + py: Python<'py>, + indices: PyReadonlyArray2, + features: PyReadonlyArray2, + length: usize, + width: usize, + height: usize, +) -> ( + &'py PyArray>, + &'py PyArray>, + &'py PyArray>, +) { + let (indices, values, counts) = voxelize( + &indices.as_array(), + &features.as_array(), + length, + width, + height, + ); + ( + indices.into_pyarray(py), + values.into_pyarray(py), + counts.into_pyarray(py), + ) +} + +/// A Python module implemented in Rust. +#[pymodule] +fn _r(_py: Python, m: &PyModule) -> PyResult<()> { + m.add_class::()?; + m.add_class::()?; + m.add_function(wrap_pyfunction!(py_voxelize, m)?)?; + Ok(()) +} diff --git a/rust/src/ops.rs b/rust/src/ops.rs new file mode 100644 index 00000000..dd03a484 --- /dev/null +++ b/rust/src/ops.rs @@ -0,0 +1,72 @@ +//! # ops +//! +//! Optimized operations for data processing. + +use itertools::Itertools; +use ndarray::{azip, par_azip, s, Array1, Array2, ArrayView2, Axis}; +use std::{ + collections::HashMap, + ops::{AddAssign, DivAssign}, +}; + +/// Convert unraveled coordinates (i.e., multi-dimensional indices) to a linear index. +pub fn ravel_multi_index(unraveled_coords: &ArrayView2, size: Vec) -> Array2 { + let shape_arr = Array1::::from_vec( + size.into_iter() + .chain(vec![1].into_iter()) + .collect::>(), + ); + + let mut coefs = shape_arr + .slice(s![1..]) + .into_iter() + .rev() + .copied() + .collect::>(); + + coefs.accumulate_axis_inplace(Axis(0), |prev, curr| *curr *= prev); + coefs = coefs.iter().rev().copied().collect::>(); + (unraveled_coords * &coefs) + .sum_axis(Axis(1)) + .insert_axis(Axis(1)) +} + +/// Cluster a group of features into a set of voxels based on their indices. +pub fn voxelize( + indices: &ArrayView2, + features: &ArrayView2, + length: usize, + width: usize, + height: usize, +) -> (Array2, Array2, Array2) { + let shape = vec![length, width, height]; + let raveled_indices = ravel_multi_index(&indices.view(), shape); + + let num_features = features.shape()[1]; + + let unique_indices = raveled_indices + .clone() + .into_raw_vec() + .into_iter() + .unique() + .enumerate() + .map(|(k, v)| (v, k)) + .collect::>(); + + let mut indices_buffer = Array2::::zeros([unique_indices.len(), 3]); + let mut values_buffer = Array2::::zeros([unique_indices.len(), num_features]); + let mut counts = Array2::::zeros([unique_indices.len(), 1]); + + azip!((idx in raveled_indices.rows(), coo in indices.rows(), val in features.rows()) { + let i = *unique_indices.get(&idx[0]).unwrap(); + + indices_buffer.slice_mut(s![i, ..]).assign(&coo); + values_buffer.slice_mut(s![i, ..]).add_assign(&val); + counts[[i, 0]] += 1.; + }); + + par_azip!((mut val in values_buffer.rows_mut(), count in counts.rows()) { + val.div_assign(&count); + }); + (indices_buffer, values_buffer, counts) +} diff --git a/rust/src/path.rs b/rust/src/path.rs new file mode 100644 index 00000000..0d31a0f6 --- /dev/null +++ b/rust/src/path.rs @@ -0,0 +1,28 @@ +//! # path +//! +//! File path traversal utilities. + +use anyhow::{Context, Result}; +use std::fs; +use std::path::Path; +use std::path::PathBuf; + +/// Walk a directory and filter invalid paths. +pub fn walk_dir(dir: &PathBuf) -> Result> { + let files: Vec<_> = fs::read_dir(dir)? + .filter_map(|x| x.ok()) + .map(|x| x.path()) + .collect(); + Ok(files) +} + +/// Extract the file stem from a path. +pub fn extract_file_stem(dir: &Path) -> Result { + let file_stem = dir + .file_stem() + .context("Cannot parse file stem.")? + .to_str() + .context("Cannot convert file stem to string.")? + .to_string(); + Ok(file_stem) +} diff --git a/rust/src/se3.rs b/rust/src/se3.rs new file mode 100644 index 00000000..157ed7c4 --- /dev/null +++ b/rust/src/se3.rs @@ -0,0 +1,58 @@ +//! # SE(3) +//! +//! Special Euclidean Group 3. + +use ndarray::{s, Array1, Array2, ArrayView2}; + +/// Special Euclidean Group 3 (SE(3)). +/// Rigid transformation parameterized by a rotation and translation in $R^3$. +pub struct SE3 { + /// (3,3) Orthonormal rotation matrix. + pub rotation: Array2, + /// (3,) Translation vector. + pub translation: Array1, +} + +impl SE3 { + /// Get the (4,4) homogeneous transformation matrix associated with the rigid transformation. + pub fn transform_matrix(&self) -> Array2 { + let mut transform_matrix = Array2::eye(4); + transform_matrix + .slice_mut(s![..3, ..3]) + .assign(&self.rotation); + transform_matrix + .slice_mut(s![..3, 3]) + .assign(&self.translation); + transform_matrix + } + + /// Transform the point cloud from its reference from to the SE(3) destination. + pub fn transform_from(&self, point_cloud: &ArrayView2) -> Array2 { + point_cloud.dot(&self.rotation.t()) + &self.translation + } + + /// Invert the SE(3) transformation. + pub fn inverse(&self) -> SE3 { + let rotation = self.rotation.t().as_standard_layout().to_owned(); + let translation = rotation.dot(&(-&self.translation)); + SE3 { + rotation, + translation, + } + } + + /// Compose (right multiply) an SE(3) with another SE(3). + pub fn compose(&self, right_se3: &SE3) -> SE3 { + let chained_transform_matrix = self.transform_matrix().dot(&right_se3.transform_matrix()); + SE3 { + rotation: chained_transform_matrix + .slice(s![..3, ..3]) + .as_standard_layout() + .to_owned(), + translation: chained_transform_matrix + .slice(s![..3, 3]) + .as_standard_layout() + .to_owned(), + } + } +} diff --git a/rust/src/so3.rs b/rust/src/so3.rs new file mode 100644 index 00000000..b964578d --- /dev/null +++ b/rust/src/so3.rs @@ -0,0 +1,44 @@ +//! # SO(3) +//! +//! Special Orthogonal Group 3 (SO(3)). + +use ndarray::{Array2, ArrayView1}; + +/// Convert a quaternion in scalar-first format to a 3x3 rotation matrix. +pub fn quat_to_mat3(quat_wxyz: &ArrayView1) -> Array2 { + let w = quat_wxyz[0]; + let x = quat_wxyz[1]; + let y = quat_wxyz[2]; + let z = quat_wxyz[3]; + + let tx = 2. * x; + let ty = 2. * y; + let tz = 2. * z; + let twx = tx * w; + let twy = ty * w; + let twz = tz * w; + let txx = tx * x; + let txy = ty * x; + let txz = tz * x; + let tyy = ty * y; + let tyz = tz * y; + let tzz = tz * z; + + let e_00 = 1. - (tyy + tzz); + let e_01 = txy - twz; + let e_02 = txy + twy; + let e_10 = txy + twz; + let e_11 = 1. - (txx + tzz); + let e_12 = tyz - twx; + let e_20 = txz - twy; + let e_21 = tyz + twx; + let e_22 = 1. - (txx + tyy); + + // Safety: We will always have nine elements. + unsafe { + Array2::from_shape_vec_unchecked( + [3, 3], + vec![e_00, e_01, e_02, e_10, e_11, e_12, e_20, e_21, e_22], + ) + } +} diff --git a/setup.cfg b/setup.cfg index 152bdcee..a46f1a4f 100644 --- a/setup.cfg +++ b/setup.cfg @@ -8,37 +8,10 @@ url = https://github.com/argoai/av2-api version = attr: av2.__version__ long_description = file: README.md long_description_content_type = text/markdown -classifiers = - Programming Language :: Python :: 3.8 - Programming Language :: Python :: 3.9 - Programming Language :: Python :: 3.10 [options] zip_safe = False include_package_data = True -python_requires = >= 3.8 -install_requires = - av - click - joblib - matplotlib - nox - numba - numpy - opencv-python - pandas - pyarrow - pyproj - rich - scipy - universal_pathlib - -package_dir= - =src -packages=find: - -[options.packages.find] -where=src [flake8] enable_extensions = G diff --git a/src/av2/__init__.py b/src/av2/__init__.py index a7c96927..c0993eaa 100644 --- a/src/av2/__init__.py +++ b/src/av2/__init__.py @@ -2,4 +2,4 @@ """Argoverse 2 API.""" -__version__ = "0.2.1" +__version__ = "0.3.0" diff --git a/src/av2/_r.pyi b/src/av2/_r.pyi new file mode 100644 index 00000000..1e61a549 --- /dev/null +++ b/src/av2/_r.pyi @@ -0,0 +1,27 @@ +"""Rust backend typing stubs.""" + +from dataclasses import dataclass, field +from typing import Optional, Tuple + +import polars as pl + +@dataclass +class DataLoader: + root_dir: str + dataset_name: str + dataset_type: str + split_name: str + num_accumulated_sweeps: int + memory_map: bool + + file_index: pl.DataFrame = field(init=False) + + def get(self, index: int) -> Sweep: ... + def __len__(self) -> int: ... + +@dataclass +class Sweep: + city_pose: pl.DataFrame + lidar: pl.DataFrame + sweep_uuid: Tuple[str, int] + cuboids: Optional[pl.DataFrame] diff --git a/src/av2/datasets/motion_forecasting/scenario_serialization.py b/src/av2/datasets/motion_forecasting/scenario_serialization.py index bb38c82a..3c185657 100644 --- a/src/av2/datasets/motion_forecasting/scenario_serialization.py +++ b/src/av2/datasets/motion_forecasting/scenario_serialization.py @@ -90,7 +90,6 @@ def _convert_tracks_to_tabular_format(tracks: List[Track]) -> pd.DataFrame: track_dfs: List[pd.DataFrame] = [] for track in tracks: - track_df = pd.DataFrame() observed_states: List[bool] = [] @@ -138,7 +137,6 @@ def _load_tracks_from_tabular_format(tracks_df: pd.DataFrame) -> List[Track]: tracks: List[Track] = [] for track_id, track_df in tracks_df.groupby("track_id"): - observed_states: List[bool] = track_df.loc[:, "observed"].values.tolist() object_type: ObjectType = ObjectType(track_df["object_type"].iloc[0]) object_category: TrackCategory = TrackCategory(track_df["object_category"].iloc[0]) diff --git a/src/av2/datasets/sensor/__init__.py b/src/av2/datasets/sensor/__init__.py index 8986d95b..4ab690f9 100644 --- a/src/av2/datasets/sensor/__init__.py +++ b/src/av2/datasets/sensor/__init__.py @@ -1,3 +1,3 @@ # -"""Sensor dataset submodule.""" +"""Sensor dataset sub-package.""" diff --git a/src/av2/datasets/sensor/utils.py b/src/av2/datasets/sensor/utils.py index 2996c473..91159fd2 100644 --- a/src/av2/datasets/sensor/utils.py +++ b/src/av2/datasets/sensor/utils.py @@ -6,7 +6,7 @@ from pathlib import Path from typing import Dict, Union -logger = logging.Logger(__name__) +logger = logging.getLogger(__name__) def convert_path_to_named_record(path: Path) -> Dict[str, Union[str, int]]: diff --git a/src/av2/evaluation/detection/constants.py b/src/av2/evaluation/detection/constants.py index f0181adb..877abd9e 100644 --- a/src/av2/evaluation/detection/constants.py +++ b/src/av2/evaluation/detection/constants.py @@ -3,30 +3,30 @@ """3D object detection evaluation constants.""" from enum import Enum, unique -from typing import Final, List +from typing import Final from av2.utils.constants import PI -MAX_SCALE_ERROR: Final[float] = 1.0 -MAX_YAW_RAD_ERROR: Final[float] = PI +MAX_SCALE_ERROR: Final = 1.0 +MAX_YAW_RAD_ERROR: Final = PI # Higher is better. -MIN_AP: Final[float] = 0.0 -MIN_CDS: Final[float] = 0.0 +MIN_AP: Final = 0.0 +MIN_CDS: Final = 0.0 # Lower is better. -MAX_NORMALIZED_ATE: Final[float] = 1.0 -MAX_NORMALIZED_ASE: Final[float] = 1.0 -MAX_NORMALIZED_AOE: Final[float] = 1.0 +MAX_NORMALIZED_ATE: Final = 1.0 +MAX_NORMALIZED_ASE: Final = 1.0 +MAX_NORMALIZED_AOE: Final = 1.0 # Max number of boxes considered per class per scene. -MAX_NUM_BOXES: Final[int] = 500 +MAX_NUM_BOXES: Final = 500 -NUM_DECIMALS: Final[int] = 3 +NUM_DECIMALS: Final = 3 -TRANSLATION_COLS: Final[List[str]] = ["tx_m", "ty_m", "tz_m"] -DIMENSION_COLS: Final[List[str]] = ["length_m", "width_m", "height_m"] -QUAT_WXYZ_COLS: Final[List[str]] = ["qw", "qx", "qy", "qz"] +TRANSLATION_COLS: Final = ["tx_m", "ty_m", "tz_m"] +DIMENSION_COLS: Final = ["length_m", "width_m", "height_m"] +QUAT_WXYZ_COLS: Final = ["qw", "qx", "qy", "qz"] @unique diff --git a/src/av2/evaluation/detection/eval.py b/src/av2/evaluation/detection/eval.py index f5e85141..ee0391d9 100644 --- a/src/av2/evaluation/detection/eval.py +++ b/src/av2/evaluation/detection/eval.py @@ -111,7 +111,6 @@ def evaluate( K refers to the number of evaluation metrics. Raises: - RuntimeError: If accumulation fails. ValueError: If ROI pruning is enabled but a dataset directory is not specified. """ if cfg.eval_only_roi_instances and cfg.dataset_dir is None: @@ -168,10 +167,8 @@ def evaluate( logger.info("Starting evaluation ...") with mp.get_context("spawn").Pool(processes=n_jobs) as p: - outputs: Optional[List[Tuple[NDArrayFloat, NDArrayFloat]]] = p.starmap(accumulate, args_list) + outputs: List[Tuple[NDArrayFloat, NDArrayFloat]] = p.starmap(accumulate, args_list) - if outputs is None: - raise RuntimeError("Accumulation has failed! Please check the integrity of your detections and annotations.") dts_list, gts_list = zip(*outputs) METRIC_COLUMN_NAMES = cfg.affinity_thresholds_m + TP_ERROR_COLUMNS + ("is_evaluated",) @@ -198,7 +195,7 @@ def summarize_metrics( dts: (N,14) Table of detections. gts: (M,15) Table of ground truth annotations. cfg: Detection configuration. - + Returns: The summary metrics. """ diff --git a/src/av2/evaluation/detection/utils.py b/src/av2/evaluation/detection/utils.py index 4090cb97..653696f8 100644 --- a/src/av2/evaluation/detection/utils.py +++ b/src/av2/evaluation/detection/utils.py @@ -316,7 +316,7 @@ def compute_average_precision( # Evaluate precision at different recalls. precision_interpolated: NDArrayFloat = np.interp(recall_interpolated, recall, precision, right=0) - average_precision: float = float(np.mean(precision_interpolated)) + average_precision = np.mean(precision_interpolated).astype(float) return average_precision, precision_interpolated diff --git a/src/av2/rendering/map.py b/src/av2/rendering/map.py index 990a677f..79e6052e 100644 --- a/src/av2/rendering/map.py +++ b/src/av2/rendering/map.py @@ -171,7 +171,6 @@ def draw_dashed_polyline_egoview( """ interp_polyline, num_waypts = polyline_utils.interp_polyline_by_fixed_waypt_interval(polyline, dash_interval_m) for i in range(num_waypts - 1): - # every other segment is a gap # (first the next dash interval is a line, and then the dash interval is empty, ...) if (i % dash_frequency) != 0: @@ -254,7 +253,6 @@ def draw_visible_polyline_segments_cv2( """ line_segments_arr_int: NDArrayInt = np.round(line_segments_arr).astype(int) for i in range(len(line_segments_arr_int) - 1): - if (not valid_pts_bool[i]) or (not valid_pts_bool[i + 1]): continue diff --git a/src/av2/torch/__init__.py b/src/av2/torch/__init__.py new file mode 100644 index 00000000..96826ea0 --- /dev/null +++ b/src/av2/torch/__init__.py @@ -0,0 +1,8 @@ +"""Argoverse 2 PyTorch API.""" + +from typing import Final + +LIDAR_COLUMNS: Final = ("x", "y", "z", "intensity") +QWXYZ_COLUMNS: Final = ("qw", "qx", "qy", "qz") +TRANSLATION_COLUMNS: Final = ("tx_m", "ty_m", "tz_m") +XYZLWH_QWXYZ_COLUMNS: Final = TRANSLATION_COLUMNS + ("length_m", "width_m", "height_m") + QWXYZ_COLUMNS diff --git a/src/av2/torch/data_loaders/__init__.py b/src/av2/torch/data_loaders/__init__.py new file mode 100644 index 00000000..dd1a2b8d --- /dev/null +++ b/src/av2/torch/data_loaders/__init__.py @@ -0,0 +1 @@ +"""PyTorch sensor data-loader sub-package.""" diff --git a/src/av2/torch/data_loaders/detection.py b/src/av2/torch/data_loaders/detection.py new file mode 100644 index 00000000..1a07191d --- /dev/null +++ b/src/av2/torch/data_loaders/detection.py @@ -0,0 +1,78 @@ +"""PyTorch data-loader for 3D object detection task.""" + +from __future__ import annotations + +import logging +from dataclasses import dataclass, field + +from torch.utils.data import Dataset + +import av2._r as rust +from av2.utils.typing import PathType + +from ..structures.sweep import Sweep + +logging.basicConfig(level=logging.INFO) +logger = logging.getLogger(__name__) + + +@dataclass +class DetectionDataLoader(Dataset[Sweep]): + """PyTorch data-loader for the sensor dataset. + + The sensor dataset should exist somewhere such as `~/data/datasets/{dataset_name}/{dataset_type}/{split_name}`, + where + dataset_name = "av2", + dataset_type = "sensor, + split_name = "train". + + This data-loader backend is implemented in Rust for speed. Each iteration will yield a new sweep. + + Args: + root_dir: Path to the dataset directory. + dataset_name: Dataset name (e.g., "av2"). + split_name: Name of the dataset split (e.g., "train"). + num_accumulated_sweeps: Number of temporally accumulated sweeps (accounting for ego-vehicle motion). + memory_mapped: Boolean flag indicating whether to memory map the dataframes. + """ + + root_dir: PathType + dataset_name: str + split_name: str + num_accumulated_sweeps: int = 1 + memory_mapped: bool = False + + _backend: rust.DataLoader = field(init=False) + _current_idx: int = 0 + + def __post_init__(self) -> None: + """Initialize Rust backend.""" + self._backend = rust.DataLoader( + str(self.root_dir), + self.dataset_name, + "sensor", + self.split_name, + self.num_accumulated_sweeps, + self.memory_mapped, + ) + + def __getitem__(self, index: int) -> Sweep: + """Get a sweep from the sensor dataset.""" + sweep = self._backend.get(index) + return Sweep.from_rust(sweep) + + def __len__(self) -> int: + """Length of the sensor dataset (number of sweeps).""" + return self._backend.__len__() + + def __iter__(self) -> DetectionDataLoader: + """Iterate method for the data-loader.""" + return self + + def __next__(self) -> Sweep: + """Return the next sweep.""" + if self._current_idx >= self.__len__(): + raise StopIteration + datum = self.__getitem__(self._current_idx) + self._current_idx += 1 + return datum diff --git a/src/av2/torch/data_loaders/scene_flow.py b/src/av2/torch/data_loaders/scene_flow.py new file mode 100644 index 00000000..54827206 --- /dev/null +++ b/src/av2/torch/data_loaders/scene_flow.py @@ -0,0 +1,93 @@ +"""PyTorch data-loader for the scene flow task.""" + +from __future__ import annotations + +import logging +from dataclasses import dataclass, field +from functools import cached_property +from typing import Optional, Tuple + +import pandas as pd +from torch.utils.data import Dataset + +import av2._r as rust +from av2.utils.typing import PathType + +from ..structures.sweep import Sweep + +logging.basicConfig(level=logging.INFO) +logger = logging.getLogger(__name__) + + +@dataclass +class SceneFlowDataloader(Dataset[Tuple[Sweep, Optional[Sweep]]]): + """PyTorch data-loader for the sensor dataset. + + Args: + root_dir: Path to the dataset directory. + dataset_name: Dataset name (e.g., "av2"). + split_name: Name of the dataset split (e.g., "train"). + num_accumulated_sweeps: Number of temporally accumulated sweeps (accounting for ego-vehicle motion). + memory_mapped: Boolean flag indicating whether to memory map the dataframes. + """ + + root_dir: PathType + dataset_name: str + split_name: str + num_accumulated_sweeps: int = 1 + memory_mapped: bool = False + + _backend: rust.DataLoader = field(init=False) + _current_idx: int = 0 + + def __post_init__(self) -> None: + """Initialize Rust backend.""" + self._backend = rust.DataLoader( + str(self.root_dir), + self.dataset_name, + "sensor", + self.split_name, + self.num_accumulated_sweeps, + self.memory_mapped, + ) + + @cached_property + def file_index(self) -> pd.DataFrame: + """File index dataframe composed of (log_id, timestamp_ns).""" + return self._backend.file_index.to_pandas() + + def __getitem__(self, index: int) -> Tuple[Sweep, Optional[Sweep]]: + """Get a pair of sweeps for scene flow computation. + + Args: + index: Index in [0, num_sweeps - 1]. + + Returns: + Current sweep and the next sweep (if it exists). + """ + sweep = self._backend.get(index) + next_sweep = None + + next_index = index + 1 + if next_index < len(self): + candidate_log_id: str = self.file_index["log_id"][next_index] + current_log_id = sweep.sweep_uuid[0] + if candidate_log_id == current_log_id: + next_sweep = Sweep.from_rust(self._backend.get(next_index)) + return Sweep.from_rust(sweep), next_sweep + + def __len__(self) -> int: + """Length of the data-loader.""" + return self._backend.__len__() + + def __iter__(self) -> SceneFlowDataloader: + """Iterate method for the data-loader.""" + return self + + def __next__(self) -> Tuple[Sweep, Optional[Sweep]]: + """Return a tuple of sweeps for scene flow.""" + if self._current_idx >= self.__len__(): + raise StopIteration + datum = self.__getitem__(self._current_idx) + self._current_idx += 1 + return datum diff --git a/src/av2/torch/structures/__init__.py b/src/av2/torch/structures/__init__.py new file mode 100644 index 00000000..91d4a29c --- /dev/null +++ b/src/av2/torch/structures/__init__.py @@ -0,0 +1 @@ +"""Argoverse 2 PyTorch structures.""" diff --git a/src/av2/torch/structures/cuboids.py b/src/av2/torch/structures/cuboids.py new file mode 100644 index 00000000..e9ca1b66 --- /dev/null +++ b/src/av2/torch/structures/cuboids.py @@ -0,0 +1,72 @@ +"""PyTorch Cuboids sub-module.""" + +from __future__ import annotations + +from dataclasses import dataclass +from enum import Enum +from functools import cached_property +from typing import List + +import pandas as pd +import torch +from kornia.geometry.conversions import euler_from_quaternion + +from .. import XYZLWH_QWXYZ_COLUMNS +from .utils import tensor_from_frame + + +class CuboidMode(str, Enum): + """Cuboid parameterization modes.""" + + XYZLWH_T = "XYZLWH_T" # 1-DOF orientation. + XYZLWH_QWXYZ = "XYZLWH_QWXYZ" # 3-DOF orientation. + + +@dataclass(frozen=True) +class Cuboids: + """Cuboid representation for objects in the scene. + + Args: + _frame: Dataframe containing the annotations and their attributes. + """ + + _frame: pd.DataFrame + + @cached_property + def category(self) -> List[str]: + """Return the object category names.""" + category_names: List[str] = self._frame["category"].to_list() + return category_names + + @cached_property + def track_uuid(self) -> List[str]: + """Return the unique track identifiers.""" + category_names: List[str] = self._frame["track_uuid"].to_list() + return category_names + + def as_tensor(self, cuboid_mode: CuboidMode = CuboidMode.XYZLWH_T) -> torch.Tensor: + """Return object cuboids as an (N,K) tensor. + + Notation: + N: Number of objects. + K: Length of the cuboid mode parameterization. + + Args: + cuboid_mode: Cuboid parameterization mode. Defaults to (N,7) tensor. + + Returns: + (N,K) torch.Tensor of cuboids with the specified cuboid_mode parameterization. + + Raises: + NotImplementedError: Raised if the cuboid mode is not supported. + """ + xyzlwh_qwxyz = tensor_from_frame(self._frame, list(XYZLWH_QWXYZ_COLUMNS)) + if cuboid_mode == CuboidMode.XYZLWH_T: + quat_wxyz = xyzlwh_qwxyz[:, 6:10] + w, x, y, z = quat_wxyz[:, 0], quat_wxyz[:, 1], quat_wxyz[:, 2], quat_wxyz[:, 3] + _, _, yaw = euler_from_quaternion(w, x, y, z) + return torch.concat([xyzlwh_qwxyz[:, :6], yaw[:, None]], dim=-1) + elif cuboid_mode == CuboidMode.XYZLWH_QWXYZ: + return xyzlwh_qwxyz + else: + raise NotImplementedError(f"{cuboid_mode} orientation mode is not implemented.") diff --git a/src/av2/torch/structures/lidar.py b/src/av2/torch/structures/lidar.py new file mode 100644 index 00000000..2ca63ecd --- /dev/null +++ b/src/av2/torch/structures/lidar.py @@ -0,0 +1,34 @@ +"""PyTorch Lidar sub-module.""" + +from __future__ import annotations + +from dataclasses import dataclass +from typing import Tuple + +import pandas as pd +import torch + +from av2.torch import LIDAR_COLUMNS +from av2.torch.structures.utils import tensor_from_frame + + +@dataclass(frozen=True) +class Lidar: + """Lidar sensor data structure. + + Args: + _frame: Dataframe containing lidar coordinates and features. + """ + + _frame: pd.DataFrame + + def as_tensor(self, columns: Tuple[str, ...] = LIDAR_COLUMNS) -> torch.Tensor: + """Return the lidar as a tensor with the specified columns. + + Args: + columns: List of ordered column names. + + Returns: + Tensor of lidar data. + """ + return tensor_from_frame(self._frame, list(columns)) diff --git a/src/av2/torch/structures/sweep.py b/src/av2/torch/structures/sweep.py new file mode 100644 index 00000000..1e09af2f --- /dev/null +++ b/src/av2/torch/structures/sweep.py @@ -0,0 +1,52 @@ +"""PyTorch sweep sub-module.""" + +from __future__ import annotations + +from dataclasses import dataclass +from typing import Optional, Tuple + +from kornia.geometry.liegroup import Se3 + +import av2._r as rust +from av2.torch.structures.lidar import Lidar + +from .cuboids import Cuboids +from .utils import SE3_from_frame + + +@dataclass(frozen=True) +class Sweep: + """Stores the annotations and lidar for one sweep. + + Notation: + N: Number of lidar points. + K: Number of lidar features. + + Args: + city_SE3_ego: Rigid transformation describing the city pose of the ego-vehicle. + lidar: Lidar sensor data. + sweep_uuid: Log id and nanosecond timestamp (unique identifier). + cuboids: Cuboids representing objects in the scene. + """ + + city_SE3_ego: Se3 + lidar: Lidar + sweep_uuid: Tuple[str, int] + cuboids: Optional[Cuboids] + + @classmethod + def from_rust(cls, sweep: rust.Sweep) -> Sweep: + """Build a sweep from the Rust backend. + + Args: + sweep: Sweep object from the Rust backend data-loader. + + Returns: + Sweep object. + """ + cuboids: Optional[Cuboids] = None + if sweep.cuboids is not None: + cuboids = Cuboids(_frame=sweep.cuboids.to_pandas()) + city_SE3_ego = SE3_from_frame(frame=sweep.city_pose.to_pandas()) + lidar = Lidar(sweep.lidar.to_pandas()) + return cls(city_SE3_ego=city_SE3_ego, lidar=lidar, sweep_uuid=sweep.sweep_uuid, cuboids=cuboids) diff --git a/src/av2/torch/structures/utils.py b/src/av2/torch/structures/utils.py new file mode 100644 index 00000000..dd589443 --- /dev/null +++ b/src/av2/torch/structures/utils.py @@ -0,0 +1,53 @@ +"""PyTorch structure utilities.""" + +from __future__ import annotations + +from typing import List + +import numpy as np +import pandas as pd +import torch +from kornia.geometry.liegroup import Se3, So3 +from kornia.geometry.quaternion import Quaternion + +from .. import QWXYZ_COLUMNS, TRANSLATION_COLUMNS + + +def tensor_from_frame(frame: pd.DataFrame, columns: List[str]) -> torch.Tensor: + """Build lidar `torch` tensor from `pandas` dataframe. + + Notation: + N: Number of rows. + K: Number of columns. + + Args: + frame: (N,K) Pandas DataFrame containing N rows with K columns. + columns: List of DataFrame columns. + + Returns: + (N,K) tensor containing the frame data. + """ + frame_npy = frame.loc[:, columns].to_numpy().astype(np.float32) + return torch.as_tensor(frame_npy) + + +def SE3_from_frame(frame: pd.DataFrame) -> Se3: + """Build SE(3) object from `pandas` DataFrame. + + Notation: + N: Number of rigid transformations. + + Args: + frame: (N,4) Pandas DataFrame containing quaternion coefficients. + + Returns: + SE(3) object representing a (N,4,4) tensor of homogeneous transformations. + """ + quaternion_npy = frame.loc[0, list(QWXYZ_COLUMNS)].to_numpy().astype(float) + quat_wxyz = Quaternion(torch.as_tensor(quaternion_npy, dtype=torch.float32)) + rotation = So3(quat_wxyz) + + translation_npy = frame.loc[0, list(TRANSLATION_COLUMNS)].to_numpy().astype(np.float32) + translation = torch.as_tensor(translation_npy, dtype=torch.float32) + dst_SE3_src = Se3(rotation[None], translation[None]) + return dst_SE3_src diff --git a/src/av2/utils/io.py b/src/av2/utils/io.py index 8f2ff356..4e1c3697 100644 --- a/src/av2/utils/io.py +++ b/src/av2/utils/io.py @@ -14,7 +14,7 @@ import av2.geometry.geometry as geometry_utils from av2.geometry.se3 import SE3 -from av2.utils.typing import NDArrayByte, NDArrayFloat +from av2.utils.typing import NDArrayByte, NDArrayFloat, PathType # Mapping from egovehicle time in nanoseconds to egovehicle pose. TimestampedCitySE3EgoPoses = Dict[int, SE3] @@ -23,7 +23,7 @@ SensorPosesMapping = Dict[str, SE3] -def read_feather(path: Union[Path, UPath], columns: Optional[Tuple[str, ...]] = None) -> pd.DataFrame: +def read_feather(path: PathType, columns: Optional[Tuple[str, ...]] = None) -> pd.DataFrame: """Read Apache Feather data from a .feather file. AV2 uses .feather to serialize much of its data. This function handles the deserialization @@ -37,9 +37,9 @@ def read_feather(path: Union[Path, UPath], columns: Optional[Tuple[str, ...]] = Returns: (N,len(columns)) Apache Feather data represented as a `pandas` DataFrame. """ - with path.open("rb") as f: - data: pd.DataFrame = feather.read_feather(f, columns=columns) - return data + with path.open("rb") as file_handle: + dataframe: pd.DataFrame = feather.read_feather(file_handle, columns=columns, memory_map=True) + return dataframe def read_lidar_sweep(fpath: Path, attrib_spec: str = "xyz") -> NDArrayFloat: diff --git a/src/av2/utils/typing.py b/src/av2/utils/typing.py index 096567f9..6177a60d 100644 --- a/src/av2/utils/typing.py +++ b/src/av2/utils/typing.py @@ -4,14 +4,20 @@ from __future__ import annotations +from pathlib import Path from typing import Any # noqa +from typing import Union import numpy as np import numpy.typing as npt +from upath import UPath NDArrayNumber = npt.NDArray["np.number[Any]"] NDArrayBool = npt.NDArray[np.bool_] NDArrayFloat = npt.NDArray[np.float64] +NDArrayFloat32 = npt.NDArray[np.float32] NDArrayByte = npt.NDArray[np.uint8] NDArrayInt = npt.NDArray[np.int64] NDArrayObject = npt.NDArray[np.object_] + +PathType = Union[Path, UPath] diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 00000000..46816ddf --- /dev/null +++ b/tests/__init__.py @@ -0,0 +1 @@ +"""Tests package.""" diff --git a/tests/geometry/test_geometry.py b/tests/geometry/test_geometry.py index 637a37fa..a12f93ac 100644 --- a/tests/geometry/test_geometry.py +++ b/tests/geometry/test_geometry.py @@ -494,7 +494,6 @@ def test_xyz_to_mat_vs_gtsam() -> None: """Compare our implementation (using Scipy) vs. the GTSAM derivation.""" num_iters = 10000 for _ in range(num_iters): - # in [-pi, pi] x = 2 * np.pi * (np.random.rand() - 0.5) z = 2 * np.pi * (np.random.rand() - 0.5) diff --git a/tests/rendering/test_rasterize.py b/tests/rendering/test_rasterize.py index fd206681..dda574b3 100644 --- a/tests/rendering/test_rasterize.py +++ b/tests/rendering/test_rasterize.py @@ -1,4 +1,4 @@ -"""Tests for the rasterize module.""" +"""Tests for the rasterize sub-module.""" from typing import Tuple diff --git a/tests/test_data/sensor_dataset_logs/av2/sensor/val/adcf7d18-0510-35b0-a2fa-b4cea13a6d76/annotations.feather b/tests/test_data/sensor_dataset_logs/av2/sensor/val/adcf7d18-0510-35b0-a2fa-b4cea13a6d76/annotations.feather new file mode 100644 index 00000000..4ed097ba Binary files /dev/null and b/tests/test_data/sensor_dataset_logs/av2/sensor/val/adcf7d18-0510-35b0-a2fa-b4cea13a6d76/annotations.feather differ diff --git a/tests/test_data/sensor_dataset_logs/av2/sensor/val/adcf7d18-0510-35b0-a2fa-b4cea13a6d76/city_SE3_egovehicle.feather b/tests/test_data/sensor_dataset_logs/av2/sensor/val/adcf7d18-0510-35b0-a2fa-b4cea13a6d76/city_SE3_egovehicle.feather new file mode 100644 index 00000000..77150261 Binary files /dev/null and b/tests/test_data/sensor_dataset_logs/av2/sensor/val/adcf7d18-0510-35b0-a2fa-b4cea13a6d76/city_SE3_egovehicle.feather differ diff --git a/tests/test_data/sensor_dataset_logs/av2/sensor/val/adcf7d18-0510-35b0-a2fa-b4cea13a6d76/map/adcf7d18-0510-35b0-a2fa-b4cea13a6d76___img_Sim2_city.json b/tests/test_data/sensor_dataset_logs/av2/sensor/val/adcf7d18-0510-35b0-a2fa-b4cea13a6d76/map/adcf7d18-0510-35b0-a2fa-b4cea13a6d76___img_Sim2_city.json new file mode 100644 index 00000000..a660a58f --- /dev/null +++ b/tests/test_data/sensor_dataset_logs/av2/sensor/val/adcf7d18-0510-35b0-a2fa-b4cea13a6d76/map/adcf7d18-0510-35b0-a2fa-b4cea13a6d76___img_Sim2_city.json @@ -0,0 +1 @@ +{"R": [1.0, 0.0, 0.0, 1.0], "t": [-1368.60009765625, -111.300048828125], "s": 3.3333333333333335} \ No newline at end of file diff --git a/tests/test_data/sensor_dataset_logs/av2/sensor/val/adcf7d18-0510-35b0-a2fa-b4cea13a6d76/map/adcf7d18-0510-35b0-a2fa-b4cea13a6d76_ground_height_surface____PIT.npy b/tests/test_data/sensor_dataset_logs/av2/sensor/val/adcf7d18-0510-35b0-a2fa-b4cea13a6d76/map/adcf7d18-0510-35b0-a2fa-b4cea13a6d76_ground_height_surface____PIT.npy new file mode 100644 index 00000000..619deacc Binary files /dev/null and b/tests/test_data/sensor_dataset_logs/av2/sensor/val/adcf7d18-0510-35b0-a2fa-b4cea13a6d76/map/adcf7d18-0510-35b0-a2fa-b4cea13a6d76_ground_height_surface____PIT.npy differ diff --git a/tests/test_data/sensor_dataset_logs/av2/sensor/val/adcf7d18-0510-35b0-a2fa-b4cea13a6d76/map/log_map_archive_adcf7d18-0510-35b0-a2fa-b4cea13a6d76____PIT_city_57819.json b/tests/test_data/sensor_dataset_logs/av2/sensor/val/adcf7d18-0510-35b0-a2fa-b4cea13a6d76/map/log_map_archive_adcf7d18-0510-35b0-a2fa-b4cea13a6d76____PIT_city_57819.json new file mode 100644 index 00000000..07f32e85 --- /dev/null +++ b/tests/test_data/sensor_dataset_logs/av2/sensor/val/adcf7d18-0510-35b0-a2fa-b4cea13a6d76/map/log_map_archive_adcf7d18-0510-35b0-a2fa-b4cea13a6d76____PIT_city_57819.json @@ -0,0 +1 @@ +{"pedestrian_crossings": {"2643214": {"edge1": [{"x": 1388.19, "y": 197.09, "z": 13.04}, {"x": 1395.07, "y": 176.68, "z": 13.32}], "edge2": [{"x": 1393.3, "y": 198.88, "z": 13.0}, {"x": 1400.15, "y": 180.6, "z": 13.25}], "id": 2643214}, "2643212": {"edge1": [{"x": 1393.36, "y": 174.82, "z": 13.32}, {"x": 1375.46, "y": 168.2, "z": 13.5}], "edge2": [{"x": 1399.76, "y": 181.51, "z": 13.14}, {"x": 1373.06, "y": 171.83, "z": 13.18}], "id": 2643212}, "2643193": {"edge1": [{"x": 1483.64, "y": 231.61, "z": 12.55}, {"x": 1490.02, "y": 212.91, "z": 12.83}], "edge2": [{"x": 1486.93, "y": 233.96, "z": 12.35}, {"x": 1494.92, "y": 211.42, "z": 12.75}], "id": 2643193}, "2643082": {"edge1": [{"x": 1453.19, "y": 315.41, "z": 11.36}, {"x": 1456.77, "y": 305.1, "z": 11.57}], "edge2": [{"x": 1455.18, "y": 319.95, "z": 11.24}, {"x": 1461.26, "y": 303.37, "z": 11.47}], "id": 2643082}, "2642619": {"edge1": [{"x": 1499.18, "y": 239.89, "z": 12.26}, {"x": 1508.42, "y": 215.34, "z": 12.73}], "edge2": [{"x": 1504.81, "y": 237.68, "z": 12.25}, {"x": 1511.51, "y": 219.52, "z": 12.73}], "id": 2642619}, "2642618": {"edge1": [{"x": 1499.87, "y": 239.59, "z": 12.28}, {"x": 1486.15, "y": 234.29, "z": 12.44}], "edge2": [{"x": 1502.44, "y": 236.29, "z": 12.19}, {"x": 1485.98, "y": 230.87, "z": 12.41}], "id": 2642618}, "2642760": {"edge1": [{"x": 1474.37, "y": 308.64, "z": 11.35}, {"x": 1461.02, "y": 303.63, "z": 11.45}], "edge2": [{"x": 1476.41, "y": 312.39, "z": 11.33}, {"x": 1457.83, "y": 305.78, "z": 11.47}], "id": 2642760}, "2642756": {"edge1": [{"x": 1466.23, "y": 330.45, "z": 11.04}, {"x": 1474.36, "y": 307.96, "z": 11.36}], "edge2": [{"x": 1471.78, "y": 325.76, "z": 11.18}, {"x": 1476.34, "y": 312.17, "z": 11.34}], "id": 2642756}, "2642718": {"edge1": [{"x": 1511.58, "y": 216.83, "z": 12.79}, {"x": 1493.0, "y": 210.81, "z": 12.86}], "edge2": [{"x": 1511.27, "y": 220.75, "z": 12.63}, {"x": 1490.57, "y": 213.64, "z": 12.72}], "id": 2642718}, "2641731": {"edge1": [{"x": 1598.97, "y": 231.62, "z": 13.16}, {"x": 1619.13, "y": 221.78, "z": 13.46}], "edge2": [{"x": 1600.38, "y": 236.09, "z": 12.87}, {"x": 1621.7, "y": 222.16, "z": 13.38}], "id": 2641731}, "2641729": {"edge1": [{"x": 1617.04, "y": 265.49, "z": 12.23}, {"x": 1599.01, "y": 230.17, "z": 13.15}], "edge2": [{"x": 1610.92, "y": 263.91, "z": 12.39}, {"x": 1598.16, "y": 237.15, "z": 13.07}], "id": 2641729}}, "lane_segments": {"42806288": {"id": 42806288, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1502.42, "y": 210.24, "z": 12.7}, {"x": 1495.61, "y": 239.02, "z": 12.19}, {"x": 1495.48, "y": 239.66, "z": 12.18}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1508.47, "y": 212.44, "z": 12.71}, {"x": 1498.46, "y": 239.86, "z": 12.18}], "right_lane_mark_type": "NONE", "successors": [42811961], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": null}, "42806291": {"id": 42806291, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1397.99, "y": 191.56, "z": 13.03}, {"x": 1366.83, "y": 180.53, "z": 13.18}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1396.68, "y": 194.8, "z": 12.93}, {"x": 1365.69, "y": 183.86, "z": 13.07}], "right_lane_mark_type": "SOLID_WHITE", "successors": [42808599], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42809419}, "42806293": {"id": 42806293, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1478.91, "y": 275.45, "z": 11.75}, {"x": 1480.35, "y": 271.36, "z": 11.81}, {"x": 1480.39, "y": 270.1, "z": 11.82}, {"x": 1480.07, "y": 268.71, "z": 11.83}, {"x": 1479.21, "y": 267.77, "z": 11.83}, {"x": 1478.07, "y": 267.16, "z": 11.83}, {"x": 1476.82, "y": 266.76, "z": 11.82}, {"x": 1473.35, "y": 265.59, "z": 11.89}, {"x": 1473.27, "y": 265.58, "z": 11.89}, {"x": 1471.19, "y": 264.87, "z": 11.98}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1472.54, "y": 273.34, "z": 11.78}, {"x": 1472.71, "y": 272.67, "z": 11.78}, {"x": 1472.62, "y": 272.19, "z": 11.8}, {"x": 1472.67, "y": 271.37, "z": 11.79}, {"x": 1471.99, "y": 270.96, "z": 11.82}, {"x": 1470.27, "y": 270.41, "z": 11.9}, {"x": 1469.26, "y": 270.09, "z": 11.95}], "right_lane_mark_type": "NONE", "successors": [42806482], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": null}, "42806338": {"id": 42806338, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1459.23, "y": 329.93, "z": 10.98}, {"x": 1469.41, "y": 302.25, "z": 11.44}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1456.07, "y": 328.82, "z": 10.93}, {"x": 1459.79, "y": 317.49, "z": 11.31}, {"x": 1462.92, "y": 300.07, "z": 11.41}], "right_lane_mark_type": "NONE", "successors": [42809705], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42808643}, "42806420": {"id": 42806420, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1509.06, "y": 231.1, "z": 12.57}, {"x": 1484.88, "y": 222.63, "z": 12.67}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1507.87, "y": 234.12, "z": 12.39}, {"x": 1483.78, "y": 225.64, "z": 12.53}], "right_lane_mark_type": "NONE", "successors": [42807335], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": null}, "42806422": {"id": 42806422, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1487.16, "y": 216.4, "z": 12.69}, {"x": 1490.13, "y": 217.44, "z": 12.67}, {"x": 1491.55, "y": 217.69, "z": 12.66}, {"x": 1492.77, "y": 217.8, "z": 12.66}, {"x": 1494.0, "y": 217.79, "z": 12.65}, {"x": 1495.25, "y": 217.53, "z": 12.64}, {"x": 1496.57, "y": 217.14, "z": 12.63}, {"x": 1497.74, "y": 216.74, "z": 12.62}, {"x": 1498.57, "y": 216.34, "z": 12.61}, {"x": 1499.42, "y": 215.82, "z": 12.6}, {"x": 1500.18, "y": 215.12, "z": 12.61}, {"x": 1500.71, "y": 214.3, "z": 12.62}, {"x": 1501.13, "y": 213.54, "z": 12.64}, {"x": 1501.83, "y": 211.78, "z": 12.67}, {"x": 1502.42, "y": 210.24, "z": 12.7}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1488.27, "y": 213.4, "z": 12.68}, {"x": 1491.2, "y": 214.29, "z": 12.66}, {"x": 1492.45, "y": 214.45, "z": 12.64}, {"x": 1493.45, "y": 214.4, "z": 12.64}, {"x": 1494.19, "y": 213.87, "z": 12.63}, {"x": 1494.75, "y": 213.21, "z": 12.65}, {"x": 1496.78, "y": 208.12, "z": 12.74}], "right_lane_mark_type": "NONE", "successors": [42811329], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": null}, "42806482": {"id": 42806482, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1471.19, "y": 264.87, "z": 11.98}, {"x": 1440.0, "y": 254.41, "z": 12.34}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1469.26, "y": 270.09, "z": 11.95}, {"x": 1440.0, "y": 259.66, "z": 12.34}], "right_lane_mark_type": "NONE", "successors": [42844999], "predecessors": [42806293], "right_neighbor_id": null, "left_neighbor_id": null}, "42806507": {"id": 42806507, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1457.25, "y": 212.64, "z": 12.82}, {"x": 1442.01, "y": 207.33, "z": 12.9}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1456.21, "y": 215.73, "z": 12.69}, {"x": 1441.06, "y": 210.32, "z": 12.77}], "right_lane_mark_type": "NONE", "successors": [42810779], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": null}, "42806529": {"id": 42806529, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1386.01, "y": 167.54, "z": 13.52}, {"x": 1390.34, "y": 178.65, "z": 13.17}, {"x": 1391.61, "y": 181.6, "z": 13.14}, {"x": 1392.63, "y": 183.46, "z": 13.11}, {"x": 1393.45, "y": 184.8, "z": 13.1}, {"x": 1394.27, "y": 185.97, "z": 13.09}, {"x": 1395.08, "y": 186.73, "z": 13.09}, {"x": 1396.73, "y": 187.69, "z": 13.08}, {"x": 1398.98, "y": 188.67, "z": 13.09}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1389.06, "y": 166.15, "z": 13.57}, {"x": 1394.05, "y": 177.94, "z": 13.18}, {"x": 1394.64, "y": 179.24, "z": 13.14}, {"x": 1395.22, "y": 180.56, "z": 13.12}, {"x": 1395.91, "y": 181.7, "z": 13.1}, {"x": 1396.71, "y": 182.93, "z": 13.09}, {"x": 1397.71, "y": 183.82, "z": 13.08}, {"x": 1398.89, "y": 184.58, "z": 13.07}, {"x": 1400.28, "y": 185.29, "z": 13.07}], "right_lane_mark_type": "NONE", "successors": [42810791], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": null}, "42806535": {"id": 42806535, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1382.75, "y": 169.07, "z": 13.47}, {"x": 1383.58, "y": 172.8, "z": 13.24}, {"x": 1383.39, "y": 174.08, "z": 13.19}, {"x": 1383.12, "y": 174.98, "z": 13.17}, {"x": 1382.71, "y": 175.73, "z": 13.17}, {"x": 1381.96, "y": 176.54, "z": 13.17}, {"x": 1380.54, "y": 177.55, "z": 13.17}, {"x": 1378.5, "y": 178.26, "z": 13.17}, {"x": 1376.49, "y": 178.52, "z": 13.17}, {"x": 1374.25, "y": 178.58, "z": 13.18}, {"x": 1372.39, "y": 178.47, "z": 13.19}, {"x": 1370.3, "y": 178.21, "z": 13.19}, {"x": 1367.83, "y": 177.56, "z": 13.22}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1386.01, "y": 167.54, "z": 13.52}, {"x": 1387.72, "y": 172.21, "z": 13.39}, {"x": 1387.77, "y": 172.92, "z": 13.36}, {"x": 1387.72, "y": 173.67, "z": 13.33}, {"x": 1387.53, "y": 174.89, "z": 13.28}, {"x": 1387.04, "y": 176.41, "z": 13.21}, {"x": 1385.99, "y": 178.16, "z": 13.18}, {"x": 1384.69, "y": 179.43, "z": 13.16}, {"x": 1383.33, "y": 180.55, "z": 13.15}, {"x": 1382.32, "y": 181.24, "z": 13.16}, {"x": 1381.07, "y": 181.67, "z": 13.17}, {"x": 1379.28, "y": 182.11, "z": 13.17}, {"x": 1377.21, "y": 182.38, "z": 13.17}, {"x": 1375.22, "y": 182.56, "z": 13.15}, {"x": 1374.33, "y": 182.53, "z": 13.15}, {"x": 1373.23, "y": 182.47, "z": 13.14}, {"x": 1371.27, "y": 182.02, "z": 13.14}, {"x": 1366.83, "y": 180.53, "z": 13.18}], "right_lane_mark_type": "NONE", "successors": [42808600], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": null}, "42806677": {"id": 42806677, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1502.42, "y": 210.24, "z": 12.7}, {"x": 1501.9, "y": 211.68, "z": 12.67}, {"x": 1501.59, "y": 212.57, "z": 12.66}, {"x": 1501.24, "y": 213.46, "z": 12.64}, {"x": 1500.73, "y": 214.44, "z": 12.62}, {"x": 1500.25, "y": 215.14, "z": 12.61}, {"x": 1499.58, "y": 215.85, "z": 12.6}, {"x": 1498.6, "y": 216.62, "z": 12.61}, {"x": 1497.66, "y": 217.35, "z": 12.62}, {"x": 1496.76, "y": 218.02, "z": 12.63}, {"x": 1495.94, "y": 218.54, "z": 12.65}, {"x": 1495.09, "y": 219.15, "z": 12.65}, {"x": 1494.22, "y": 219.79, "z": 12.66}, {"x": 1493.3, "y": 220.45, "z": 12.67}, {"x": 1492.38, "y": 221.14, "z": 12.68}, {"x": 1491.39, "y": 221.77, "z": 12.7}, {"x": 1490.33, "y": 222.34, "z": 12.7}, {"x": 1489.45, "y": 222.81, "z": 12.7}, {"x": 1488.54, "y": 223.06, "z": 12.68}, {"x": 1487.68, "y": 223.18, "z": 12.67}, {"x": 1486.67, "y": 223.1, "z": 12.66}, {"x": 1485.75, "y": 222.9, "z": 12.66}, {"x": 1484.88, "y": 222.63, "z": 12.67}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1508.47, "y": 212.44, "z": 12.71}, {"x": 1508.16, "y": 213.19, "z": 12.68}, {"x": 1507.74, "y": 213.87, "z": 12.65}, {"x": 1507.27, "y": 214.67, "z": 12.64}, {"x": 1506.42, "y": 215.78, "z": 12.61}, {"x": 1505.54, "y": 216.66, "z": 12.6}, {"x": 1504.72, "y": 217.31, "z": 12.59}, {"x": 1504.02, "y": 217.9, "z": 12.58}, {"x": 1503.17, "y": 218.63, "z": 12.58}, {"x": 1502.27, "y": 219.41, "z": 12.59}, {"x": 1501.27, "y": 220.11, "z": 12.59}, {"x": 1500.21, "y": 220.86, "z": 12.61}, {"x": 1499.09, "y": 221.67, "z": 12.62}, {"x": 1498.09, "y": 222.32, "z": 12.64}, {"x": 1497.21, "y": 222.87, "z": 12.66}, {"x": 1496.3, "y": 223.39, "z": 12.67}, {"x": 1495.21, "y": 224.06, "z": 12.69}, {"x": 1494.1, "y": 224.72, "z": 12.69}, {"x": 1493.07, "y": 225.17, "z": 12.68}, {"x": 1492.03, "y": 225.62, "z": 12.63}, {"x": 1491.06, "y": 225.99, "z": 12.61}, {"x": 1489.67, "y": 226.3, "z": 12.58}, {"x": 1488.42, "y": 226.49, "z": 12.56}, {"x": 1487.31, "y": 226.59, "z": 12.54}, {"x": 1486.29, "y": 226.45, "z": 12.52}, {"x": 1485.17, "y": 226.14, "z": 12.53}, {"x": 1483.78, "y": 225.64, "z": 12.53}], "right_lane_mark_type": "NONE", "successors": [42807335], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": null}, "42806682": {"id": 42806682, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1510.24, "y": 228.05, "z": 12.62}, {"x": 1508.54, "y": 227.37, "z": 12.62}, {"x": 1507.48, "y": 226.57, "z": 12.62}, {"x": 1506.54, "y": 225.81, "z": 12.62}, {"x": 1505.35, "y": 224.76, "z": 12.61}, {"x": 1504.3, "y": 223.67, "z": 12.61}, {"x": 1503.37, "y": 222.62, "z": 12.6}, {"x": 1502.28, "y": 221.08, "z": 12.6}, {"x": 1501.54, "y": 219.68, "z": 12.59}, {"x": 1501.08, "y": 218.33, "z": 12.59}, {"x": 1500.85, "y": 217.05, "z": 12.59}, {"x": 1500.9, "y": 215.72, "z": 12.59}, {"x": 1501.15, "y": 214.35, "z": 12.62}, {"x": 1501.44, "y": 213.31, "z": 12.64}, {"x": 1502.42, "y": 210.24, "z": 12.7}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1509.06, "y": 231.1, "z": 12.57}, {"x": 1507.7, "y": 230.52, "z": 12.57}, {"x": 1506.44, "y": 229.91, "z": 12.6}, {"x": 1505.32, "y": 229.13, "z": 12.63}, {"x": 1503.98, "y": 228.03, "z": 12.64}, {"x": 1502.86, "y": 226.82, "z": 12.65}, {"x": 1501.57, "y": 225.62, "z": 12.65}, {"x": 1500.25, "y": 224.09, "z": 12.64}, {"x": 1499.05, "y": 222.63, "z": 12.63}, {"x": 1497.81, "y": 220.98, "z": 12.63}, {"x": 1496.71, "y": 219.06, "z": 12.63}, {"x": 1496.05, "y": 217.6, "z": 12.64}, {"x": 1495.66, "y": 216.24, "z": 12.64}, {"x": 1495.51, "y": 214.95, "z": 12.63}, {"x": 1495.44, "y": 213.25, "z": 12.66}, {"x": 1495.54, "y": 211.86, "z": 12.68}, {"x": 1495.84, "y": 210.67, "z": 12.71}, {"x": 1496.78, "y": 208.12, "z": 12.74}], "right_lane_mark_type": "NONE", "successors": [42811329], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": null}, "42806684": {"id": 42806684, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1507.87, "y": 234.12, "z": 12.39}, {"x": 1505.72, "y": 233.33, "z": 12.37}, {"x": 1504.06, "y": 232.9, "z": 12.38}, {"x": 1502.53, "y": 232.64, "z": 12.4}, {"x": 1501.63, "y": 232.64, "z": 12.4}, {"x": 1500.68, "y": 232.79, "z": 12.38}, {"x": 1499.93, "y": 233.04, "z": 12.36}, {"x": 1499.23, "y": 233.44, "z": 12.32}, {"x": 1498.53, "y": 234.04, "z": 12.29}, {"x": 1497.68, "y": 234.99, "z": 12.26}, {"x": 1496.98, "y": 236.04, "z": 12.25}, {"x": 1496.33, "y": 237.34, "z": 12.22}, {"x": 1495.68, "y": 239.04, "z": 12.19}, {"x": 1495.48, "y": 239.66, "z": 12.18}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1506.47, "y": 237.27, "z": 12.24}, {"x": 1504.59, "y": 236.65, "z": 12.23}, {"x": 1503.28, "y": 236.29, "z": 12.21}, {"x": 1502.11, "y": 236.28, "z": 12.19}, {"x": 1501.25, "y": 236.58, "z": 12.17}, {"x": 1500.57, "y": 237.15, "z": 12.16}, {"x": 1500.06, "y": 237.65, "z": 12.18}, {"x": 1499.55, "y": 238.26, "z": 12.18}, {"x": 1498.95, "y": 239.03, "z": 12.18}, {"x": 1498.46, "y": 239.86, "z": 12.18}], "right_lane_mark_type": "NONE", "successors": [42811961], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": null}, "42806871": {"id": 42806871, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1479.55, "y": 321.04, "z": 11.23}, {"x": 1476.51, "y": 320.14, "z": 11.26}, {"x": 1475.61, "y": 319.99, "z": 11.26}, {"x": 1474.77, "y": 319.94, "z": 11.26}, {"x": 1473.97, "y": 319.94, "z": 11.26}, {"x": 1473.22, "y": 319.99, "z": 11.27}, {"x": 1471.42, "y": 320.29, "z": 11.26}, {"x": 1469.83, "y": 320.69, "z": 11.26}, {"x": 1469.03, "y": 320.99, "z": 11.25}, {"x": 1468.28, "y": 321.34, "z": 11.24}, {"x": 1467.68, "y": 321.64, "z": 11.23}, {"x": 1467.08, "y": 322.04, "z": 11.22}, {"x": 1466.28, "y": 322.64, "z": 11.2}, {"x": 1465.68, "y": 323.29, "z": 11.18}, {"x": 1465.08, "y": 324.24, "z": 11.15}, {"x": 1464.68, "y": 324.94, "z": 11.12}, {"x": 1462.26, "y": 330.92, "z": 10.96}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1478.34, "y": 324.43, "z": 11.23}, {"x": 1477.5, "y": 324.15, "z": 11.22}, {"x": 1476.99, "y": 324.1, "z": 11.23}, {"x": 1476.31, "y": 324.13, "z": 11.23}, {"x": 1475.52, "y": 324.31, "z": 11.24}, {"x": 1474.78, "y": 324.57, "z": 11.25}, {"x": 1474.25, "y": 324.77, "z": 11.25}, {"x": 1473.62, "y": 324.97, "z": 11.23}, {"x": 1472.4, "y": 325.42, "z": 11.18}, {"x": 1471.66, "y": 325.81, "z": 11.17}, {"x": 1469.87, "y": 326.59, "z": 11.09}, {"x": 1468.94, "y": 327.12, "z": 11.07}, {"x": 1467.87, "y": 328.01, "z": 11.06}, {"x": 1467.38, "y": 328.5, "z": 11.05}, {"x": 1466.89, "y": 329.14, "z": 11.03}, {"x": 1466.29, "y": 329.87, "z": 11.03}, {"x": 1465.68, "y": 330.87, "z": 11.03}, {"x": 1465.15, "y": 331.9, "z": 10.99}], "right_lane_mark_type": "NONE", "successors": [42817683], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": null}, "42806873": {"id": 42806873, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1480.7, "y": 318.11, "z": 11.27}, {"x": 1478.01, "y": 317.04, "z": 11.28}, {"x": 1473.92, "y": 315.59, "z": 11.3}, {"x": 1471.73, "y": 314.74, "z": 11.33}, {"x": 1471.08, "y": 314.39, "z": 11.34}, {"x": 1470.38, "y": 313.94, "z": 11.35}, {"x": 1469.73, "y": 313.39, "z": 11.35}, {"x": 1469.18, "y": 312.74, "z": 11.36}, {"x": 1468.62, "y": 311.84, "z": 11.37}, {"x": 1468.22, "y": 310.8, "z": 11.37}, {"x": 1467.98, "y": 309.65, "z": 11.37}, {"x": 1467.98, "y": 308.65, "z": 11.37}, {"x": 1467.98, "y": 307.75, "z": 11.38}, {"x": 1468.12, "y": 306.1, "z": 11.4}, {"x": 1468.25, "y": 305.21, "z": 11.41}, {"x": 1468.52, "y": 304.26, "z": 11.42}, {"x": 1469.41, "y": 302.25, "z": 11.44}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1479.55, "y": 321.04, "z": 11.23}, {"x": 1467.59, "y": 316.71, "z": 11.34}, {"x": 1466.45, "y": 316.25, "z": 11.34}, {"x": 1465.51, "y": 315.62, "z": 11.35}, {"x": 1464.65, "y": 314.84, "z": 11.37}, {"x": 1463.87, "y": 313.9, "z": 11.39}, {"x": 1463.16, "y": 312.8, "z": 11.4}, {"x": 1462.53, "y": 311.39, "z": 11.43}, {"x": 1462.06, "y": 309.9, "z": 11.43}, {"x": 1461.74, "y": 308.25, "z": 11.43}, {"x": 1461.66, "y": 306.45, "z": 11.41}, {"x": 1461.82, "y": 304.33, "z": 11.41}, {"x": 1462.92, "y": 300.07, "z": 11.41}], "right_lane_mark_type": "NONE", "successors": [42809705], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": null}, "42806877": {"id": 42806877, "is_intersection": true, "lane_type": "BUS", "left_lane_boundary": [{"x": 1398.98, "y": 188.67, "z": 13.09}, {"x": 1397.1, "y": 187.89, "z": 13.08}, {"x": 1393.18, "y": 186.37, "z": 13.09}, {"x": 1391.35, "y": 185.58, "z": 13.11}, {"x": 1390.13, "y": 184.8, "z": 13.12}, {"x": 1389.32, "y": 184.05, "z": 13.13}, {"x": 1388.57, "y": 183.17, "z": 13.14}, {"x": 1387.99, "y": 182.16, "z": 13.15}, {"x": 1386.87, "y": 179.77, "z": 13.16}, {"x": 1382.75, "y": 169.07, "z": 13.47}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1397.99, "y": 191.56, "z": 13.03}, {"x": 1390.32, "y": 188.7, "z": 13.07}, {"x": 1388.98, "y": 188.23, "z": 13.07}, {"x": 1387.55, "y": 187.53, "z": 13.08}, {"x": 1386.09, "y": 186.59, "z": 13.1}, {"x": 1385.11, "y": 185.57, "z": 13.13}, {"x": 1384.36, "y": 184.54, "z": 13.15}, {"x": 1383.44, "y": 182.92, "z": 13.16}, {"x": 1382.65, "y": 181.14, "z": 13.16}, {"x": 1381.89, "y": 179.11, "z": 13.16}, {"x": 1380.45, "y": 174.8, "z": 13.17}, {"x": 1377.14, "y": 169.57, "z": 13.35}], "right_lane_mark_type": "NONE", "successors": [42808601], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": null}, "42806889": {"id": 42806889, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1430.9, "y": 303.85, "z": 11.72}, {"x": 1425.12, "y": 301.8, "z": 11.74}], "left_lane_mark_type": "DASHED_WHITE", "right_lane_boundary": [{"x": 1429.9, "y": 306.83, "z": 11.67}, {"x": 1424.09, "y": 304.75, "z": 11.73}], "right_lane_mark_type": "NONE", "successors": [42808178], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42809667}, "42806903": {"id": 42806903, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1378.7, "y": 160.95, "z": 13.72}, {"x": 1382.75, "y": 169.07, "z": 13.47}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1382.0, "y": 159.55, "z": 13.74}, {"x": 1386.01, "y": 167.54, "z": 13.52}], "right_lane_mark_type": "DASHED_WHITE", "successors": [42806535], "predecessors": [], "right_neighbor_id": 42811887, "left_neighbor_id": 42808601}, "42806907": {"id": 42806907, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1463.29, "y": 207.87, "z": 12.81}, {"x": 1479.88, "y": 213.79, "z": 12.72}], "left_lane_mark_type": "DASHED_WHITE", "right_lane_boundary": [{"x": 1464.47, "y": 204.69, "z": 12.8}, {"x": 1480.99, "y": 210.73, "z": 12.69}], "right_lane_mark_type": "NONE", "successors": [42808620], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42811487}, "42806926": {"id": 42806926, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1482.45, "y": 265.91, "z": 11.89}, {"x": 1481.89, "y": 267.01, "z": 11.87}, {"x": 1481.46, "y": 267.57, "z": 11.85}, {"x": 1480.82, "y": 267.88, "z": 11.85}, {"x": 1479.72, "y": 267.77, "z": 11.84}, {"x": 1473.3, "y": 265.58, "z": 11.89}, {"x": 1473.27, "y": 265.58, "z": 11.89}, {"x": 1471.19, "y": 264.87, "z": 11.98}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1485.5, "y": 266.88, "z": 11.81}, {"x": 1484.86, "y": 268.88, "z": 11.78}, {"x": 1484.01, "y": 271.13, "z": 11.75}, {"x": 1483.36, "y": 272.08, "z": 11.74}, {"x": 1482.47, "y": 272.79, "z": 11.75}, {"x": 1481.58, "y": 273.2, "z": 11.76}, {"x": 1480.69, "y": 273.32, "z": 11.77}, {"x": 1479.63, "y": 273.09, "z": 11.79}, {"x": 1469.26, "y": 270.09, "z": 11.95}], "right_lane_mark_type": "NONE", "successors": [42806482], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": null}, "42806933": {"id": 42806933, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1502.42, "y": 210.24, "z": 12.7}, {"x": 1492.05, "y": 238.97, "z": 12.28}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1508.47, "y": 212.44, "z": 12.71}, {"x": 1495.48, "y": 239.66, "z": 12.18}], "right_lane_mark_type": "NONE", "successors": [42810834], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42807745}, "42807330": {"id": 42807330, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1469.41, "y": 302.25, "z": 11.44}, {"x": 1467.92, "y": 305.85, "z": 11.4}, {"x": 1467.23, "y": 307.2, "z": 11.39}, {"x": 1466.68, "y": 308.0, "z": 11.38}, {"x": 1465.93, "y": 308.75, "z": 11.39}, {"x": 1464.98, "y": 309.35, "z": 11.4}, {"x": 1464.13, "y": 309.75, "z": 11.41}, {"x": 1463.04, "y": 310.05, "z": 11.43}, {"x": 1461.39, "y": 310.2, "z": 11.44}, {"x": 1460.19, "y": 310.2, "z": 11.45}, {"x": 1458.99, "y": 310.05, "z": 11.46}, {"x": 1457.54, "y": 309.75, "z": 11.47}, {"x": 1456.04, "y": 309.35, "z": 11.49}, {"x": 1453.89, "y": 308.6, "z": 11.5}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1472.35, "y": 303.23, "z": 11.4}, {"x": 1471.69, "y": 305.02, "z": 11.37}, {"x": 1470.56, "y": 307.74, "z": 11.36}, {"x": 1469.8, "y": 309.69, "z": 11.35}, {"x": 1468.91, "y": 311.52, "z": 11.36}, {"x": 1468.37, "y": 312.35, "z": 11.37}, {"x": 1467.49, "y": 313.24, "z": 11.38}, {"x": 1466.66, "y": 313.65, "z": 11.38}, {"x": 1465.59, "y": 314.05, "z": 11.38}, {"x": 1464.18, "y": 314.29, "z": 11.38}, {"x": 1462.81, "y": 314.3, "z": 11.38}, {"x": 1461.39, "y": 314.12, "z": 11.4}, {"x": 1459.79, "y": 313.82, "z": 11.4}, {"x": 1458.38, "y": 313.5, "z": 11.41}, {"x": 1457.24, "y": 313.09, "z": 11.42}, {"x": 1455.75, "y": 312.64, "z": 11.42}, {"x": 1452.85, "y": 311.64, "z": 11.44}], "right_lane_mark_type": "NONE", "successors": [42809364], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": null}, "42807335": {"id": 42807335, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1484.88, "y": 222.63, "z": 12.67}, {"x": 1477.63, "y": 220.04, "z": 12.71}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1483.78, "y": 225.64, "z": 12.53}, {"x": 1476.59, "y": 223.05, "z": 12.57}], "right_lane_mark_type": "SOLID_WHITE", "successors": [42810769], "predecessors": [42806420, 42806677], "right_neighbor_id": null, "left_neighbor_id": 42811286}, "42807338": {"id": 42807338, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1600.38, "y": 246.57, "z": 12.62}, {"x": 1601.71, "y": 245.81, "z": 12.64}, {"x": 1603.63, "y": 244.18, "z": 12.7}, {"x": 1604.79, "y": 242.74, "z": 12.76}, {"x": 1605.44, "y": 241.47, "z": 12.8}, {"x": 1605.9, "y": 240.01, "z": 12.85}, {"x": 1606.04, "y": 238.45, "z": 12.89}, {"x": 1605.96, "y": 236.65, "z": 12.94}, {"x": 1605.53, "y": 234.92, "z": 12.98}, {"x": 1604.83, "y": 233.17, "z": 13.03}, {"x": 1601.14, "y": 226.04, "z": 13.24}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1598.89, "y": 243.49, "z": 12.65}, {"x": 1599.62, "y": 242.72, "z": 12.67}, {"x": 1600.38, "y": 241.61, "z": 12.71}, {"x": 1600.84, "y": 239.99, "z": 12.76}, {"x": 1601.07, "y": 238.49, "z": 12.79}, {"x": 1601.23, "y": 236.89, "z": 12.83}, {"x": 1601.26, "y": 235.11, "z": 12.9}, {"x": 1600.77, "y": 233.48, "z": 12.97}, {"x": 1599.95, "y": 231.63, "z": 13.04}, {"x": 1599.76, "y": 231.0, "z": 13.04}, {"x": 1598.24, "y": 227.94, "z": 13.2}, {"x": 1598.06, "y": 227.53, "z": 13.19}], "right_lane_mark_type": "NONE", "successors": [42819444], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": null}, "42807339": {"id": 42807339, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1603.38, "y": 253.1, "z": 12.61}, {"x": 1604.64, "y": 252.69, "z": 12.59}, {"x": 1605.98, "y": 252.28, "z": 12.57}, {"x": 1607.52, "y": 251.95, "z": 12.56}, {"x": 1608.87, "y": 251.82, "z": 12.55}, {"x": 1610.85, "y": 251.91, "z": 12.54}, {"x": 1613.0, "y": 252.26, "z": 12.51}, {"x": 1615.82, "y": 252.7, "z": 12.48}, {"x": 1618.33, "y": 253.45, "z": 12.46}, {"x": 1620.66, "y": 254.58, "z": 12.42}, {"x": 1622.83, "y": 256.27, "z": 12.36}, {"x": 1624.68, "y": 257.75, "z": 12.31}, {"x": 1626.49, "y": 259.46, "z": 12.24}, {"x": 1629.07, "y": 262.2, "z": 12.12}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1601.93, "y": 249.85, "z": 12.6}, {"x": 1603.87, "y": 249.16, "z": 12.62}, {"x": 1605.13, "y": 248.83, "z": 12.63}, {"x": 1607.23, "y": 248.46, "z": 12.64}, {"x": 1609.66, "y": 248.31, "z": 12.66}, {"x": 1612.27, "y": 248.42, "z": 12.65}, {"x": 1615.05, "y": 248.87, "z": 12.62}, {"x": 1617.83, "y": 249.66, "z": 12.58}, {"x": 1620.51, "y": 250.93, "z": 12.52}, {"x": 1622.77, "y": 252.35, "z": 12.46}, {"x": 1624.96, "y": 253.97, "z": 12.4}, {"x": 1631.2, "y": 260.05, "z": 12.11}], "right_lane_mark_type": "NONE", "successors": [42812503], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": null}, "42807471": {"id": 42807471, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1492.05, "y": 238.97, "z": 12.28}, {"x": 1492.76, "y": 236.7, "z": 12.31}, {"x": 1493.03, "y": 235.93, "z": 12.32}, {"x": 1493.41, "y": 235.22, "z": 12.34}, {"x": 1493.89, "y": 234.41, "z": 12.35}, {"x": 1494.62, "y": 233.64, "z": 12.36}, {"x": 1495.44, "y": 232.99, "z": 12.36}, {"x": 1496.51, "y": 232.21, "z": 12.38}, {"x": 1497.61, "y": 231.37, "z": 12.42}, {"x": 1499.04, "y": 230.49, "z": 12.48}, {"x": 1500.42, "y": 229.74, "z": 12.54}, {"x": 1501.73, "y": 229.06, "z": 12.6}, {"x": 1503.25, "y": 228.41, "z": 12.63}, {"x": 1504.51, "y": 228.0, "z": 12.64}, {"x": 1505.69, "y": 227.82, "z": 12.65}, {"x": 1506.95, "y": 227.6, "z": 12.64}, {"x": 1508.22, "y": 227.48, "z": 12.62}, {"x": 1509.31, "y": 227.73, "z": 12.62}, {"x": 1510.24, "y": 228.05, "z": 12.62}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1488.78, "y": 237.89, "z": 12.27}, {"x": 1489.53, "y": 235.58, "z": 12.31}, {"x": 1489.89, "y": 234.84, "z": 12.33}, {"x": 1490.29, "y": 233.98, "z": 12.36}, {"x": 1490.88, "y": 233.11, "z": 12.39}, {"x": 1491.39, "y": 232.3, "z": 12.4}, {"x": 1492.15, "y": 231.45, "z": 12.42}, {"x": 1492.81, "y": 230.66, "z": 12.44}, {"x": 1493.65, "y": 229.83, "z": 12.48}, {"x": 1494.73, "y": 228.99, "z": 12.52}, {"x": 1495.81, "y": 228.29, "z": 12.56}, {"x": 1497.27, "y": 227.46, "z": 12.61}, {"x": 1498.5, "y": 226.8, "z": 12.66}, {"x": 1499.83, "y": 226.14, "z": 12.66}, {"x": 1501.31, "y": 225.43, "z": 12.65}, {"x": 1502.71, "y": 224.85, "z": 12.63}, {"x": 1503.8, "y": 224.51, "z": 12.62}, {"x": 1504.74, "y": 224.4, "z": 12.61}, {"x": 1505.97, "y": 224.33, "z": 12.59}, {"x": 1507.22, "y": 224.31, "z": 12.59}, {"x": 1508.13, "y": 224.44, "z": 12.58}, {"x": 1509.02, "y": 224.54, "z": 12.58}, {"x": 1509.83, "y": 224.73, "z": 12.57}, {"x": 1511.26, "y": 225.25, "z": 12.58}], "right_lane_mark_type": "NONE", "successors": [42811495], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": null}, "42807473": {"id": 42807473, "is_intersection": false, "lane_type": "BUS", "left_lane_boundary": [{"x": 1440.0, "y": 199.54, "z": 12.94}, {"x": 1444.15, "y": 200.94, "z": 12.9}], "left_lane_mark_type": "SOLID_WHITE", "right_lane_boundary": [{"x": 1440.0, "y": 195.91, "z": 12.95}, {"x": 1445.2, "y": 197.77, "z": 12.92}], "right_lane_mark_type": "NONE", "successors": [42810413], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42809731}, "42807547": {"id": 42807547, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1456.07, "y": 328.82, "z": 10.93}, {"x": 1459.24, "y": 319.29, "z": 11.25}, {"x": 1459.54, "y": 318.14, "z": 11.29}, {"x": 1459.64, "y": 317.24, "z": 11.31}, {"x": 1459.49, "y": 316.14, "z": 11.34}, {"x": 1458.94, "y": 315.09, "z": 11.37}, {"x": 1458.39, "y": 314.44, "z": 11.39}, {"x": 1457.79, "y": 313.89, "z": 11.4}, {"x": 1456.99, "y": 313.34, "z": 11.42}, {"x": 1455.9, "y": 312.79, "z": 11.42}, {"x": 1452.85, "y": 311.64, "z": 11.44}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1452.8, "y": 327.68, "z": 10.92}, {"x": 1452.8, "y": 327.66, "z": 10.92}, {"x": 1455.3, "y": 320.67, "z": 11.17}, {"x": 1455.57, "y": 319.65, "z": 11.21}, {"x": 1455.63, "y": 318.74, "z": 11.23}, {"x": 1455.52, "y": 317.69, "z": 11.25}, {"x": 1455.15, "y": 316.93, "z": 11.27}, {"x": 1454.47, "y": 316.02, "z": 11.31}, {"x": 1453.68, "y": 315.39, "z": 11.34}, {"x": 1452.97, "y": 315.05, "z": 11.35}, {"x": 1452.45, "y": 314.84, "z": 11.39}, {"x": 1451.77, "y": 314.62, "z": 11.41}], "right_lane_mark_type": "NONE", "successors": [42811474], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": null}, "42807573": {"id": 42807573, "is_intersection": true, "lane_type": "BUS", "left_lane_boundary": [{"x": 1368.91, "y": 174.38, "z": 13.18}, {"x": 1374.42, "y": 176.27, "z": 13.17}, {"x": 1376.62, "y": 176.79, "z": 13.17}, {"x": 1377.81, "y": 176.88, "z": 13.16}, {"x": 1379.53, "y": 176.63, "z": 13.17}, {"x": 1380.76, "y": 176.2, "z": 13.17}, {"x": 1381.98, "y": 175.35, "z": 13.17}, {"x": 1383.02, "y": 173.77, "z": 13.19}, {"x": 1383.27, "y": 172.55, "z": 13.26}, {"x": 1383.3, "y": 171.39, "z": 13.35}, {"x": 1382.75, "y": 169.07, "z": 13.47}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1370.06, "y": 170.87, "z": 13.2}, {"x": 1371.55, "y": 171.4, "z": 13.26}, {"x": 1372.77, "y": 171.77, "z": 13.21}, {"x": 1373.66, "y": 171.96, "z": 13.18}, {"x": 1374.17, "y": 171.99, "z": 13.18}, {"x": 1374.59, "y": 171.89, "z": 13.18}, {"x": 1374.75, "y": 171.85, "z": 13.19}, {"x": 1375.29, "y": 171.63, "z": 13.2}, {"x": 1375.89, "y": 171.3, "z": 13.23}, {"x": 1376.17, "y": 171.01, "z": 13.25}, {"x": 1376.22, "y": 170.96, "z": 13.25}, {"x": 1376.6, "y": 170.49, "z": 13.29}, {"x": 1376.94, "y": 169.98, "z": 13.31}, {"x": 1377.14, "y": 169.57, "z": 13.35}], "right_lane_mark_type": "NONE", "successors": [42808601], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": null}, "42807643": {"id": 42807643, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1577.64, "y": 255.23, "z": 12.55}, {"x": 1578.92, "y": 255.44, "z": 12.54}, {"x": 1581.88, "y": 255.77, "z": 12.55}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1578.81, "y": 251.78, "z": 12.53}, {"x": 1581.18, "y": 252.24, "z": 12.53}, {"x": 1582.28, "y": 252.36, "z": 12.54}], "right_lane_mark_type": "SOLID_WHITE", "successors": [42915538], "predecessors": [], "right_neighbor_id": 42812483, "left_neighbor_id": null}, "42807644": {"id": 42807644, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1502.42, "y": 210.24, "z": 12.7}, {"x": 1501.93, "y": 212.16, "z": 12.66}, {"x": 1501.54, "y": 214.04, "z": 12.63}, {"x": 1501.38, "y": 215.29, "z": 12.61}, {"x": 1501.38, "y": 216.54, "z": 12.59}, {"x": 1501.67, "y": 218.02, "z": 12.58}, {"x": 1502.33, "y": 219.48, "z": 12.59}, {"x": 1503.35, "y": 220.78, "z": 12.59}, {"x": 1504.35, "y": 221.78, "z": 12.59}, {"x": 1505.74, "y": 222.71, "z": 12.58}, {"x": 1507.21, "y": 223.49, "z": 12.58}, {"x": 1509.0, "y": 224.34, "z": 12.57}, {"x": 1511.26, "y": 225.25, "z": 12.58}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1508.47, "y": 212.44, "z": 12.71}, {"x": 1507.81, "y": 214.18, "z": 12.65}, {"x": 1507.54, "y": 215.43, "z": 12.65}, {"x": 1507.48, "y": 216.51, "z": 12.62}, {"x": 1507.63, "y": 217.59, "z": 12.59}, {"x": 1507.9, "y": 218.5, "z": 12.57}, {"x": 1508.43, "y": 219.32, "z": 12.57}, {"x": 1508.99, "y": 220.0, "z": 12.57}, {"x": 1509.81, "y": 220.65, "z": 12.59}, {"x": 1510.55, "y": 221.05, "z": 12.57}, {"x": 1512.4, "y": 221.74, "z": 12.6}], "right_lane_mark_type": "NONE", "successors": [42811280], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": null}, "42807745": {"id": 42807745, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1492.05, "y": 238.97, "z": 12.28}, {"x": 1502.42, "y": 210.24, "z": 12.7}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1488.78, "y": 237.89, "z": 12.27}, {"x": 1490.76, "y": 232.36, "z": 12.4}, {"x": 1491.28, "y": 229.97, "z": 12.45}, {"x": 1494.12, "y": 214.68, "z": 12.64}, {"x": 1496.78, "y": 208.12, "z": 12.74}], "right_lane_mark_type": "NONE", "successors": [42811329], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42806933}, "42807779": {"id": 42807779, "is_intersection": true, "lane_type": "BUS", "left_lane_boundary": [{"x": 1629.14, "y": 234.39, "z": 13.12}, {"x": 1628.25, "y": 234.92, "z": 13.03}, {"x": 1625.06, "y": 236.75, "z": 12.91}, {"x": 1622.74, "y": 237.53, "z": 12.89}, {"x": 1620.48, "y": 237.99, "z": 12.89}, {"x": 1617.83, "y": 238.09, "z": 12.91}, {"x": 1615.73, "y": 237.93, "z": 12.93}, {"x": 1612.96, "y": 237.34, "z": 12.96}, {"x": 1610.99, "y": 236.13, "z": 13.0}, {"x": 1610.3, "y": 235.55, "z": 13.02}, {"x": 1609.65, "y": 234.68, "z": 13.05}, {"x": 1609.09, "y": 233.53, "z": 13.08}, {"x": 1604.2, "y": 224.73, "z": 13.36}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1631.46, "y": 237.92, "z": 12.93}, {"x": 1629.34, "y": 238.93, "z": 12.84}, {"x": 1627.28, "y": 239.79, "z": 12.8}, {"x": 1625.34, "y": 240.56, "z": 12.77}, {"x": 1623.2, "y": 241.31, "z": 12.77}, {"x": 1621.0, "y": 241.69, "z": 12.78}, {"x": 1619.58, "y": 241.78, "z": 12.79}, {"x": 1617.63, "y": 241.78, "z": 12.8}, {"x": 1614.94, "y": 241.55, "z": 12.83}, {"x": 1611.88, "y": 240.51, "z": 12.87}, {"x": 1610.13, "y": 239.67, "z": 12.9}, {"x": 1608.69, "y": 238.59, "z": 12.92}, {"x": 1607.46, "y": 237.11, "z": 12.96}, {"x": 1606.49, "y": 235.26, "z": 12.99}, {"x": 1601.14, "y": 226.04, "z": 13.24}], "right_lane_mark_type": "NONE", "successors": [42819224], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": null}, "42807784": {"id": 42807784, "is_intersection": true, "lane_type": "BUS", "left_lane_boundary": [{"x": 1600.38, "y": 246.57, "z": 12.62}, {"x": 1600.81, "y": 246.38, "z": 12.62}, {"x": 1601.79, "y": 245.84, "z": 12.64}, {"x": 1607.17, "y": 241.21, "z": 12.83}, {"x": 1623.78, "y": 228.03, "z": 13.25}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1598.89, "y": 243.49, "z": 12.65}, {"x": 1620.95, "y": 223.02, "z": 13.3}], "right_lane_mark_type": "NONE", "successors": [42806912], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42819897}, "42808012": {"id": 42808012, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1480.7, "y": 318.11, "z": 11.27}, {"x": 1453.89, "y": 308.6, "z": 11.5}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1479.55, "y": 321.04, "z": 11.23}, {"x": 1452.85, "y": 311.64, "z": 11.44}], "right_lane_mark_type": "NONE", "successors": [42809364], "predecessors": [], "right_neighbor_id": 42811457, "left_neighbor_id": null}, "42808033": {"id": 42808033, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1472.35, "y": 303.23, "z": 11.4}, {"x": 1462.26, "y": 330.92, "z": 10.96}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1475.18, "y": 304.11, "z": 11.35}, {"x": 1474.47, "y": 306.08, "z": 11.39}, {"x": 1474.21, "y": 306.74, "z": 11.36}, {"x": 1465.15, "y": 331.9, "z": 10.99}], "right_lane_mark_type": "NONE", "successors": [42817683], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42808643}, "42808440": {"id": 42808440, "is_intersection": false, "lane_type": "BIKE", "left_lane_boundary": [{"x": 1350.0, "y": 269.27, "z": 12.13}, {"x": 1422.05, "y": 294.85, "z": 11.76}], "left_lane_mark_type": "DASHED_YELLOW", "right_lane_boundary": [{"x": 1350.0, "y": 267.75, "z": 12.13}, {"x": 1422.38, "y": 293.33, "z": 11.8}, {"x": 1422.53, "y": 293.39, "z": 11.8}], "right_lane_mark_type": "NONE", "successors": [42811247], "predecessors": [42806887], "right_neighbor_id": null, "left_neighbor_id": 42811879}, "42808559": {"id": 42808559, "is_intersection": false, "lane_type": "BIKE", "left_lane_boundary": [{"x": 1440.0, "y": 301.22, "z": 11.7}, {"x": 1426.94, "y": 296.59, "z": 11.73}], "left_lane_mark_type": "DASHED_YELLOW", "right_lane_boundary": [{"x": 1440.0, "y": 302.96, "z": 11.71}, {"x": 1428.29, "y": 298.73, "z": 11.76}, {"x": 1426.42, "y": 298.06, "z": 11.76}], "right_lane_mark_type": "SOLID_WHITE", "successors": [42811311], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42811479}, "42808583": {"id": 42808583, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1442.94, "y": 204.48, "z": 12.92}, {"x": 1445.02, "y": 205.54, "z": 12.92}, {"x": 1455.39, "y": 211.78, "z": 12.83}, {"x": 1457.25, "y": 212.64, "z": 12.82}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1444.15, "y": 200.94, "z": 12.9}, {"x": 1445.76, "y": 201.57, "z": 12.89}, {"x": 1456.84, "y": 208.85, "z": 12.86}, {"x": 1458.33, "y": 209.64, "z": 12.86}], "right_lane_mark_type": "NONE", "successors": [42809311], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42809376}, "42808597": {"id": 42808597, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1367.83, "y": 177.56, "z": 13.22}, {"x": 1398.98, "y": 188.67, "z": 13.09}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1368.91, "y": 174.38, "z": 13.18}, {"x": 1400.28, "y": 185.29, "z": 13.07}], "right_lane_mark_type": "NONE", "successors": [42810791], "predecessors": [], "right_neighbor_id": 42809914, "left_neighbor_id": 42809419}, "42808601": {"id": 42808601, "is_intersection": false, "lane_type": "BUS", "left_lane_boundary": [{"x": 1382.75, "y": 169.07, "z": 13.47}, {"x": 1378.7, "y": 160.95, "z": 13.72}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1377.14, "y": 169.57, "z": 13.35}, {"x": 1377.4, "y": 168.36, "z": 13.42}, {"x": 1377.43, "y": 167.74, "z": 13.45}, {"x": 1377.4, "y": 166.99, "z": 13.48}, {"x": 1376.98, "y": 166.21, "z": 13.48}, {"x": 1375.01, "y": 162.53, "z": 13.61}], "right_lane_mark_type": "NONE", "successors": [42818876], "predecessors": [42807573, 42806877], "right_neighbor_id": null, "left_neighbor_id": 42806903}, "42808620": {"id": 42808620, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1479.88, "y": 213.79, "z": 12.72}, {"x": 1487.16, "y": 216.4, "z": 12.69}], "left_lane_mark_type": "DASHED_WHITE", "right_lane_boundary": [{"x": 1480.99, "y": 210.73, "z": 12.69}, {"x": 1488.27, "y": 213.4, "z": 12.68}], "right_lane_mark_type": "NONE", "successors": [42810795, 42806422], "predecessors": [42806907], "right_neighbor_id": null, "left_neighbor_id": 42811322}, "42808641": {"id": 42808641, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1482.11, "y": 276.35, "z": 11.67}, {"x": 1472.35, "y": 303.23, "z": 11.4}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1484.98, "y": 277.16, "z": 11.62}, {"x": 1475.18, "y": 304.11, "z": 11.35}], "right_lane_mark_type": "NONE", "successors": [42808033, 42817814], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42808644}, "42808642": {"id": 42808642, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1485.5, "y": 266.88, "z": 11.81}, {"x": 1482.11, "y": 276.35, "z": 11.67}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1488.39, "y": 267.72, "z": 11.76}, {"x": 1484.98, "y": 277.16, "z": 11.62}], "right_lane_mark_type": "NONE", "successors": [42808641], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42810767}, "42808643": {"id": 42808643, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1469.41, "y": 302.25, "z": 11.44}, {"x": 1459.23, "y": 329.93, "z": 10.98}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1472.35, "y": 303.23, "z": 11.4}, {"x": 1462.26, "y": 330.92, "z": 10.96}], "right_lane_mark_type": "NONE", "successors": [42817689], "predecessors": [], "right_neighbor_id": 42808033, "left_neighbor_id": 42806338}, "42808644": {"id": 42808644, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1478.91, "y": 275.45, "z": 11.75}, {"x": 1469.41, "y": 302.25, "z": 11.44}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1482.11, "y": 276.35, "z": 11.67}, {"x": 1472.35, "y": 303.23, "z": 11.4}], "right_lane_mark_type": "NONE", "successors": [42808643, 42807330, 42817783], "predecessors": [], "right_neighbor_id": 42808641, "left_neighbor_id": 42809705}, "42808745": {"id": 42808745, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1495.36, "y": 240.0, "z": 12.17}, {"x": 1492.93, "y": 246.98, "z": 12.07}, {"x": 1485.5, "y": 266.88, "z": 11.81}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1498.41, "y": 240.0, "z": 12.16}, {"x": 1489.2, "y": 265.5, "z": 11.76}, {"x": 1488.39, "y": 267.72, "z": 11.76}], "right_lane_mark_type": "NONE", "successors": [42808642], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42811679}, "42808752": {"id": 42808752, "is_intersection": false, "lane_type": "BIKE", "left_lane_boundary": [{"x": 1481.38, "y": 316.09, "z": 11.26}, {"x": 1513.3, "y": 327.25, "z": 11.41}], "left_lane_mark_type": "DASHED_YELLOW", "right_lane_boundary": [{"x": 1481.97, "y": 314.63, "z": 11.28}, {"x": 1489.76, "y": 317.43, "z": 11.32}, {"x": 1496.74, "y": 319.84, "z": 11.33}, {"x": 1513.89, "y": 325.98, "z": 11.45}], "right_lane_mark_type": "NONE", "successors": [42810629], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42808753}, "42808753": {"id": 42808753, "is_intersection": false, "lane_type": "BIKE", "left_lane_boundary": [{"x": 1513.3, "y": 327.25, "z": 11.41}, {"x": 1481.38, "y": 316.09, "z": 11.26}], "left_lane_mark_type": "DASHED_YELLOW", "right_lane_boundary": [{"x": 1512.7, "y": 328.5, "z": 11.42}, {"x": 1480.93, "y": 317.3, "z": 11.27}], "right_lane_mark_type": "SOLID_WHITE", "successors": [42810822, 42817778], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42808752}, "42808948": {"id": 42808948, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1440.0, "y": 303.62, "z": 11.71}, {"x": 1437.58, "y": 302.7, "z": 11.72}], "left_lane_mark_type": "SOLID_WHITE", "right_lane_boundary": [{"x": 1440.0, "y": 307.04, "z": 11.65}, {"x": 1436.5, "y": 305.78, "z": 11.69}], "right_lane_mark_type": "DASHED_WHITE", "successors": [42811456], "predecessors": [], "right_neighbor_id": 42810978, "left_neighbor_id": null}, "42808955": {"id": 42808955, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1421.42, "y": 296.98, "z": 11.79}, {"x": 1403.52, "y": 290.64, "z": 11.88}, {"x": 1378.04, "y": 281.63, "z": 11.99}], "left_lane_mark_type": "SOLID_WHITE", "right_lane_boundary": [{"x": 1420.34, "y": 300.11, "z": 11.74}, {"x": 1408.07, "y": 295.75, "z": 11.8}, {"x": 1396.93, "y": 291.76, "z": 11.84}, {"x": 1377.0, "y": 284.73, "z": 11.96}], "right_lane_mark_type": "DASHED_WHITE", "successors": [42809671], "predecessors": [], "right_neighbor_id": 42809645, "left_neighbor_id": null}, "42808987": {"id": 42808987, "is_intersection": false, "lane_type": "BIKE", "left_lane_boundary": [{"x": 1454.58, "y": 306.44, "z": 11.49}, {"x": 1440.0, "y": 301.22, "z": 11.7}], "left_lane_mark_type": "DASHED_YELLOW", "right_lane_boundary": [{"x": 1453.98, "y": 307.86, "z": 11.51}, {"x": 1440.0, "y": 302.96, "z": 11.71}], "right_lane_mark_type": "SOLID_WHITE", "successors": [42808559], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42810823}, "42809305": {"id": 42809305, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1442.94, "y": 204.48, "z": 12.92}, {"x": 1458.33, "y": 209.64, "z": 12.86}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1444.15, "y": 200.94, "z": 12.9}, {"x": 1459.46, "y": 206.46, "z": 12.82}], "right_lane_mark_type": "SOLID_WHITE", "successors": [42809307], "predecessors": [], "right_neighbor_id": 42810413, "left_neighbor_id": null}, "42809307": {"id": 42809307, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1458.33, "y": 209.64, "z": 12.86}, {"x": 1462.12, "y": 210.95, "z": 12.84}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1459.46, "y": 206.46, "z": 12.82}, {"x": 1463.29, "y": 207.87, "z": 12.81}], "right_lane_mark_type": "DASHED_WHITE", "successors": [42811487], "predecessors": [42809305], "right_neighbor_id": 42809309, "left_neighbor_id": 42809311}, "42809309": {"id": 42809309, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1459.46, "y": 206.46, "z": 12.82}, {"x": 1463.29, "y": 207.87, "z": 12.81}], "left_lane_mark_type": "DASHED_WHITE", "right_lane_boundary": [{"x": 1460.63, "y": 203.29, "z": 12.83}, {"x": 1464.47, "y": 204.69, "z": 12.8}], "right_lane_mark_type": "NONE", "successors": [42806907], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42809307}, "42809311": {"id": 42809311, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1457.25, "y": 212.64, "z": 12.82}, {"x": 1460.96, "y": 213.97, "z": 12.79}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1458.33, "y": 209.64, "z": 12.86}, {"x": 1462.12, "y": 210.95, "z": 12.84}], "right_lane_mark_type": "NONE", "successors": [42811445], "predecessors": [42808583], "right_neighbor_id": 42809307, "left_neighbor_id": 42809733}, "42809321": {"id": 42809321, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1525.14, "y": 230.26, "z": 12.58}, {"x": 1541.07, "y": 235.59, "z": 12.54}], "left_lane_mark_type": "DASHED_WHITE", "right_lane_boundary": [{"x": 1526.43, "y": 226.7, "z": 12.55}, {"x": 1542.17, "y": 232.27, "z": 12.51}], "right_lane_mark_type": "NONE", "successors": [42809329], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42811281}, "42809329": {"id": 42809329, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1541.07, "y": 235.59, "z": 12.54}, {"x": 1556.83, "y": 241.15, "z": 12.5}], "left_lane_mark_type": "DASHED_WHITE", "right_lane_boundary": [{"x": 1542.17, "y": 232.27, "z": 12.51}, {"x": 1558.05, "y": 237.87, "z": 12.47}], "right_lane_mark_type": "NONE", "successors": [42811491], "predecessors": [42809321], "right_neighbor_id": null, "left_neighbor_id": 42811505}, "42809364": {"id": 42809364, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1453.89, "y": 308.6, "z": 11.5}, {"x": 1440.0, "y": 303.62, "z": 11.71}], "left_lane_mark_type": "SOLID_WHITE", "right_lane_boundary": [{"x": 1452.85, "y": 311.64, "z": 11.44}, {"x": 1440.0, "y": 307.04, "z": 11.65}], "right_lane_mark_type": "DASHED_WHITE", "successors": [42808948], "predecessors": [42807330, 42808012], "right_neighbor_id": 42811474, "left_neighbor_id": null}, "42809376": {"id": 42809376, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1457.25, "y": 212.64, "z": 12.82}, {"x": 1455.39, "y": 211.78, "z": 12.83}, {"x": 1445.02, "y": 205.54, "z": 12.92}, {"x": 1442.94, "y": 204.48, "z": 12.92}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1456.21, "y": 215.73, "z": 12.69}, {"x": 1453.9, "y": 214.49, "z": 12.71}, {"x": 1443.79, "y": 208.27, "z": 12.87}, {"x": 1442.01, "y": 207.33, "z": 12.9}], "right_lane_mark_type": "NONE", "successors": [42811963], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42808583}, "42809412": {"id": 42809412, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1478.91, "y": 275.45, "z": 11.75}, {"x": 1482.45, "y": 265.91, "z": 11.89}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1472.54, "y": 273.34, "z": 11.78}, {"x": 1479.05, "y": 264.73, "z": 11.87}], "right_lane_mark_type": "NONE", "successors": [42809413], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42810767}, "42809413": {"id": 42809413, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1482.45, "y": 265.91, "z": 11.89}, {"x": 1491.68, "y": 240.0, "z": 12.26}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1479.05, "y": 264.73, "z": 11.87}, {"x": 1487.99, "y": 240.0, "z": 12.24}], "right_lane_mark_type": "SOLID_WHITE", "successors": [42810833], "predecessors": [42809412], "right_neighbor_id": null, "left_neighbor_id": 42811679}, "42809414": {"id": 42809414, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1625.21, "y": 265.4, "z": 12.03}, {"x": 1623.36, "y": 263.2, "z": 12.11}, {"x": 1621.47, "y": 260.9, "z": 12.2}, {"x": 1619.43, "y": 258.4, "z": 12.29}, {"x": 1617.72, "y": 255.96, "z": 12.37}, {"x": 1615.93, "y": 253.2, "z": 12.47}, {"x": 1613.9, "y": 249.82, "z": 12.59}, {"x": 1612.29, "y": 246.98, "z": 12.7}, {"x": 1610.72, "y": 244.15, "z": 12.78}, {"x": 1609.02, "y": 240.9, "z": 12.86}, {"x": 1607.13, "y": 237.41, "z": 12.94}, {"x": 1605.48, "y": 234.41, "z": 13.0}, {"x": 1601.14, "y": 226.04, "z": 13.24}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1622.41, "y": 267.96, "z": 12.02}, {"x": 1620.24, "y": 265.6, "z": 12.04}, {"x": 1616.84, "y": 261.5, "z": 12.19}, {"x": 1614.68, "y": 258.66, "z": 12.3}, {"x": 1612.82, "y": 255.95, "z": 12.38}, {"x": 1611.24, "y": 253.14, "z": 12.48}, {"x": 1609.64, "y": 250.13, "z": 12.6}, {"x": 1608.11, "y": 247.0, "z": 12.69}, {"x": 1606.42, "y": 243.77, "z": 12.76}, {"x": 1604.4, "y": 239.67, "z": 12.84}, {"x": 1602.31, "y": 235.66, "z": 12.89}, {"x": 1598.06, "y": 227.53, "z": 13.19}], "right_lane_mark_type": "NONE", "successors": [42819444], "predecessors": [42808587], "right_neighbor_id": null, "left_neighbor_id": 42809415}, "42809415": {"id": 42809415, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1627.89, "y": 262.92, "z": 12.13}, {"x": 1625.56, "y": 260.11, "z": 12.22}, {"x": 1622.62, "y": 256.24, "z": 12.36}, {"x": 1620.51, "y": 253.11, "z": 12.46}, {"x": 1618.22, "y": 249.75, "z": 12.57}, {"x": 1616.52, "y": 247.18, "z": 12.65}, {"x": 1614.74, "y": 244.34, "z": 12.76}, {"x": 1612.6, "y": 240.73, "z": 12.86}, {"x": 1609.22, "y": 234.19, "z": 13.06}, {"x": 1604.2, "y": 224.73, "z": 13.36}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1625.21, "y": 265.4, "z": 12.03}, {"x": 1623.36, "y": 263.2, "z": 12.11}, {"x": 1621.47, "y": 260.9, "z": 12.2}, {"x": 1619.43, "y": 258.4, "z": 12.29}, {"x": 1617.72, "y": 255.96, "z": 12.37}, {"x": 1615.93, "y": 253.2, "z": 12.47}, {"x": 1613.9, "y": 249.82, "z": 12.59}, {"x": 1612.29, "y": 246.98, "z": 12.7}, {"x": 1610.72, "y": 244.15, "z": 12.78}, {"x": 1609.02, "y": 240.9, "z": 12.86}, {"x": 1607.13, "y": 237.41, "z": 12.94}, {"x": 1605.48, "y": 234.41, "z": 13.0}, {"x": 1601.14, "y": 226.04, "z": 13.24}], "right_lane_mark_type": "NONE", "successors": [42819224], "predecessors": [], "right_neighbor_id": 42809414, "left_neighbor_id": null}, "42809419": {"id": 42809419, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1398.98, "y": 188.67, "z": 13.09}, {"x": 1367.83, "y": 177.56, "z": 13.22}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1397.99, "y": 191.56, "z": 13.03}, {"x": 1366.83, "y": 180.53, "z": 13.18}], "right_lane_mark_type": "NONE", "successors": [42808600], "predecessors": [], "right_neighbor_id": 42806291, "left_neighbor_id": 42808597}, "42809424": {"id": 42809424, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1486.03, "y": 219.35, "z": 12.73}, {"x": 1510.24, "y": 228.05, "z": 12.62}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1487.16, "y": 216.4, "z": 12.69}, {"x": 1511.26, "y": 225.25, "z": 12.58}], "right_lane_mark_type": "NONE", "successors": [42811495], "predecessors": [], "right_neighbor_id": 42810795, "left_neighbor_id": null}, "42809444": {"id": 42809444, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1426.19, "y": 298.68, "z": 11.77}, {"x": 1421.42, "y": 296.98, "z": 11.79}], "left_lane_mark_type": "DASHED_WHITE", "right_lane_boundary": [{"x": 1425.12, "y": 301.8, "z": 11.74}, {"x": 1420.34, "y": 300.11, "z": 11.74}], "right_lane_mark_type": "DASHED_WHITE", "successors": [42808955], "predecessors": [], "right_neighbor_id": 42808178, "left_neighbor_id": null}, "42809667": {"id": 42809667, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1431.97, "y": 300.7, "z": 11.76}, {"x": 1426.19, "y": 298.68, "z": 11.77}], "left_lane_mark_type": "SOLID_WHITE", "right_lane_boundary": [{"x": 1430.9, "y": 303.85, "z": 11.72}, {"x": 1425.12, "y": 301.8, "z": 11.74}], "right_lane_mark_type": "DASHED_WHITE", "successors": [42809444], "predecessors": [], "right_neighbor_id": 42806889, "left_neighbor_id": null}, "42809703": {"id": 42809703, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1512.32, "y": 329.13, "z": 11.42}, {"x": 1480.7, "y": 318.11, "z": 11.27}], "left_lane_mark_type": "SOLID_WHITE", "right_lane_boundary": [{"x": 1511.09, "y": 332.36, "z": 11.36}, {"x": 1479.55, "y": 321.04, "z": 11.23}], "right_lane_mark_type": "SOLID_WHITE", "successors": [42808012, 42806873], "predecessors": [], "right_neighbor_id": 42811698, "left_neighbor_id": null}, "42809705": {"id": 42809705, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1469.41, "y": 302.25, "z": 11.44}, {"x": 1478.91, "y": 275.45, "z": 11.75}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1462.92, "y": 300.07, "z": 11.41}, {"x": 1462.94, "y": 300.03, "z": 11.41}, {"x": 1472.16, "y": 274.43, "z": 11.76}, {"x": 1472.51, "y": 273.46, "z": 11.78}, {"x": 1472.54, "y": 273.34, "z": 11.78}], "right_lane_mark_type": "NONE", "successors": [42809412, 42806293], "predecessors": [42806873, 42806338], "right_neighbor_id": null, "left_neighbor_id": 42808644}, "42809731": {"id": 42809731, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1440.0, "y": 203.22, "z": 12.93}, {"x": 1441.07, "y": 203.62, "z": 12.93}, {"x": 1442.23, "y": 204.12, "z": 12.93}, {"x": 1442.94, "y": 204.48, "z": 12.92}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1440.0, "y": 199.54, "z": 12.94}, {"x": 1444.15, "y": 200.94, "z": 12.9}], "right_lane_mark_type": "SOLID_WHITE", "successors": [42808583, 42809305], "predecessors": [], "right_neighbor_id": 42807473, "left_neighbor_id": 42811963}, "42809733": {"id": 42809733, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1460.96, "y": 213.97, "z": 12.79}, {"x": 1457.25, "y": 212.64, "z": 12.82}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1459.82, "y": 217.03, "z": 12.67}, {"x": 1456.21, "y": 215.73, "z": 12.69}], "right_lane_mark_type": "NONE", "successors": [42809376, 42806507], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42809311}, "42809914": {"id": 42809914, "is_intersection": true, "lane_type": "BUS", "left_lane_boundary": [{"x": 1368.91, "y": 174.38, "z": 13.18}, {"x": 1400.28, "y": 185.29, "z": 13.07}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1370.06, "y": 170.87, "z": 13.2}, {"x": 1401.54, "y": 182.13, "z": 13.11}], "right_lane_mark_type": "NONE", "successors": [42811889], "predecessors": [42809342], "right_neighbor_id": null, "left_neighbor_id": 42808597}, "42809917": {"id": 42809917, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1419.59, "y": 195.96, "z": 13.02}, {"x": 1398.98, "y": 188.67, "z": 13.09}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1418.39, "y": 198.86, "z": 12.97}, {"x": 1397.99, "y": 191.56, "z": 13.03}], "right_lane_mark_type": "DASHED_WHITE", "successors": [42806877, 42809419], "predecessors": [], "right_neighbor_id": 42810127, "left_neighbor_id": 42810791}, "42809918": {"id": 42809918, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1440.0, "y": 203.22, "z": 12.93}, {"x": 1419.59, "y": 195.96, "z": 13.02}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1440.0, "y": 206.61, "z": 12.89}, {"x": 1418.39, "y": 198.86, "z": 12.97}], "right_lane_mark_type": "DASHED_WHITE", "successors": [42809917], "predecessors": [], "right_neighbor_id": 42811328, "left_neighbor_id": 42811883}, "42810127": {"id": 42810127, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1418.39, "y": 198.86, "z": 12.97}, {"x": 1397.99, "y": 191.56, "z": 13.03}], "left_lane_mark_type": "DASHED_WHITE", "right_lane_boundary": [{"x": 1417.09, "y": 201.83, "z": 12.86}, {"x": 1396.68, "y": 194.8, "z": 12.93}], "right_lane_mark_type": "SOLID_WHITE", "successors": [42806291], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42809917}, "42810144": {"id": 42810144, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1603.38, "y": 253.1, "z": 12.61}, {"x": 1604.61, "y": 252.6, "z": 12.59}, {"x": 1606.35, "y": 251.98, "z": 12.57}, {"x": 1607.97, "y": 251.47, "z": 12.57}, {"x": 1610.22, "y": 250.88, "z": 12.58}, {"x": 1612.62, "y": 250.56, "z": 12.58}, {"x": 1615.0, "y": 250.31, "z": 12.58}, {"x": 1616.37, "y": 250.35, "z": 12.56}, {"x": 1617.74, "y": 250.48, "z": 12.55}, {"x": 1619.12, "y": 250.83, "z": 12.53}, {"x": 1620.43, "y": 251.35, "z": 12.51}, {"x": 1621.84, "y": 252.02, "z": 12.48}, {"x": 1622.87, "y": 252.6, "z": 12.46}, {"x": 1624.74, "y": 253.79, "z": 12.4}, {"x": 1625.83, "y": 254.72, "z": 12.37}, {"x": 1631.2, "y": 260.05, "z": 12.11}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1601.93, "y": 249.85, "z": 12.6}, {"x": 1604.39, "y": 249.03, "z": 12.62}, {"x": 1605.56, "y": 248.63, "z": 12.63}, {"x": 1607.64, "y": 248.04, "z": 12.66}, {"x": 1609.78, "y": 247.58, "z": 12.68}, {"x": 1612.18, "y": 247.08, "z": 12.7}, {"x": 1614.46, "y": 246.85, "z": 12.69}, {"x": 1617.38, "y": 247.03, "z": 12.65}, {"x": 1620.53, "y": 247.61, "z": 12.6}, {"x": 1623.06, "y": 248.54, "z": 12.55}, {"x": 1625.08, "y": 249.41, "z": 12.51}, {"x": 1626.82, "y": 250.42, "z": 12.45}, {"x": 1628.59, "y": 251.97, "z": 12.37}, {"x": 1630.16, "y": 253.68, "z": 12.31}, {"x": 1632.27, "y": 255.85, "z": 12.2}, {"x": 1633.83, "y": 257.48, "z": 12.1}], "right_lane_mark_type": "NONE", "successors": [42808634], "predecessors": [], "right_neighbor_id": 42811656, "left_neighbor_id": null}, "42810209": {"id": 42810209, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1492.05, "y": 238.97, "z": 12.28}, {"x": 1492.42, "y": 237.93, "z": 12.29}, {"x": 1492.7, "y": 236.85, "z": 12.31}, {"x": 1493.0, "y": 235.63, "z": 12.32}, {"x": 1493.22, "y": 234.25, "z": 12.36}, {"x": 1493.22, "y": 233.2, "z": 12.38}, {"x": 1493.07, "y": 232.21, "z": 12.41}, {"x": 1492.93, "y": 231.19, "z": 12.43}, {"x": 1492.67, "y": 230.28, "z": 12.45}, {"x": 1492.33, "y": 229.33, "z": 12.48}, {"x": 1491.85, "y": 228.24, "z": 12.53}, {"x": 1491.34, "y": 227.31, "z": 12.56}, {"x": 1490.88, "y": 226.61, "z": 12.58}, {"x": 1490.13, "y": 225.67, "z": 12.61}, {"x": 1489.34, "y": 224.86, "z": 12.63}, {"x": 1488.53, "y": 224.24, "z": 12.64}, {"x": 1487.81, "y": 223.78, "z": 12.65}, {"x": 1487.08, "y": 223.38, "z": 12.66}, {"x": 1486.37, "y": 223.08, "z": 12.66}, {"x": 1484.88, "y": 222.63, "z": 12.67}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1488.78, "y": 237.89, "z": 12.27}, {"x": 1489.04, "y": 237.21, "z": 12.28}, {"x": 1489.25, "y": 236.23, "z": 12.3}, {"x": 1489.29, "y": 235.06, "z": 12.32}, {"x": 1489.28, "y": 233.89, "z": 12.35}, {"x": 1489.24, "y": 232.95, "z": 12.38}, {"x": 1489.14, "y": 232.09, "z": 12.39}, {"x": 1489.02, "y": 231.29, "z": 12.42}, {"x": 1488.84, "y": 230.53, "z": 12.43}, {"x": 1488.43, "y": 229.64, "z": 12.45}, {"x": 1488.14, "y": 229.0, "z": 12.46}, {"x": 1487.65, "y": 228.33, "z": 12.47}, {"x": 1487.05, "y": 227.62, "z": 12.49}, {"x": 1486.42, "y": 227.03, "z": 12.5}, {"x": 1485.71, "y": 226.43, "z": 12.52}, {"x": 1484.81, "y": 225.98, "z": 12.53}, {"x": 1483.78, "y": 225.64, "z": 12.53}], "right_lane_mark_type": "NONE", "successors": [42807335], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42811684}, "42810413": {"id": 42810413, "is_intersection": false, "lane_type": "BUS", "left_lane_boundary": [{"x": 1444.15, "y": 200.94, "z": 12.9}, {"x": 1459.46, "y": 206.46, "z": 12.82}], "left_lane_mark_type": "SOLID_WHITE", "right_lane_boundary": [{"x": 1445.2, "y": 197.77, "z": 12.92}, {"x": 1460.63, "y": 203.29, "z": 12.83}], "right_lane_mark_type": "NONE", "successors": [42809309], "predecessors": [42807473], "right_neighbor_id": null, "left_neighbor_id": 42809305}, "42810437": {"id": 42810437, "is_intersection": true, "lane_type": "BIKE", "left_lane_boundary": [{"x": 1454.58, "y": 306.44, "z": 11.49}, {"x": 1481.38, "y": 316.09, "z": 11.26}], "left_lane_mark_type": "DASHED_YELLOW", "right_lane_boundary": [{"x": 1455.03, "y": 305.07, "z": 11.51}, {"x": 1455.96, "y": 305.4, "z": 11.54}, {"x": 1456.13, "y": 305.47, "z": 11.53}, {"x": 1456.77, "y": 305.71, "z": 11.5}, {"x": 1456.88, "y": 305.73, "z": 11.49}, {"x": 1481.97, "y": 314.63, "z": 11.28}], "right_lane_mark_type": "NONE", "successors": [42808752], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42810822}, "42810749": {"id": 42810749, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1539.06, "y": 241.53, "z": 12.53}, {"x": 1536.84, "y": 240.41, "z": 12.55}, {"x": 1526.76, "y": 234.44, "z": 12.62}, {"x": 1524.05, "y": 233.18, "z": 12.62}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1537.75, "y": 244.5, "z": 12.41}, {"x": 1535.79, "y": 243.4, "z": 12.43}, {"x": 1525.46, "y": 236.98, "z": 12.55}, {"x": 1523.15, "y": 235.93, "z": 12.56}], "right_lane_mark_type": "NONE", "successors": [42811338], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42811282}, "42810750": {"id": 42810750, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1523.15, "y": 235.93, "z": 12.56}, {"x": 1509.06, "y": 231.1, "z": 12.57}], "left_lane_mark_type": "SOLID_WHITE", "right_lane_boundary": [{"x": 1522.01, "y": 239.05, "z": 12.41}, {"x": 1507.87, "y": 234.12, "z": 12.39}], "right_lane_mark_type": "SOLID_WHITE", "successors": [42806420], "predecessors": [], "right_neighbor_id": 42811290, "left_neighbor_id": 42811338}, "42810767": {"id": 42810767, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1482.45, "y": 265.91, "z": 11.89}, {"x": 1478.91, "y": 275.45, "z": 11.75}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1485.5, "y": 266.88, "z": 11.81}, {"x": 1482.11, "y": 276.35, "z": 11.67}], "right_lane_mark_type": "NONE", "successors": [42808644], "predecessors": [], "right_neighbor_id": 42808642, "left_neighbor_id": 42809412}, "42810769": {"id": 42810769, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1477.63, "y": 220.04, "z": 12.71}, {"x": 1460.96, "y": 213.97, "z": 12.79}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1476.59, "y": 223.05, "z": 12.57}, {"x": 1459.82, "y": 217.03, "z": 12.67}], "right_lane_mark_type": "NONE", "successors": [42809733], "predecessors": [42807335], "right_neighbor_id": null, "left_neighbor_id": 42811445}, "42810779": {"id": 42810779, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1442.01, "y": 207.33, "z": 12.9}, {"x": 1440.0, "y": 206.61, "z": 12.89}], "left_lane_mark_type": "DASHED_WHITE", "right_lane_boundary": [{"x": 1441.06, "y": 210.32, "z": 12.77}, {"x": 1440.0, "y": 210.01, "z": 12.76}], "right_lane_mark_type": "NONE", "successors": [42811328], "predecessors": [42806507], "right_neighbor_id": null, "left_neighbor_id": 42811963}, "42810791": {"id": 42810791, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1398.98, "y": 188.67, "z": 13.09}, {"x": 1419.59, "y": 195.96, "z": 13.02}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1400.28, "y": 185.29, "z": 13.07}, {"x": 1420.96, "y": 192.74, "z": 13.01}], "right_lane_mark_type": "SOLID_WHITE", "successors": [42811883], "predecessors": [42806529, 42808597], "right_neighbor_id": 42811889, "left_neighbor_id": 42809917}, "42810795": {"id": 42810795, "is_intersection": true, "lane_type": "BUS", "left_lane_boundary": [{"x": 1487.16, "y": 216.4, "z": 12.69}, {"x": 1511.26, "y": 225.25, "z": 12.58}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1488.27, "y": 213.4, "z": 12.68}, {"x": 1512.4, "y": 221.74, "z": 12.6}], "right_lane_mark_type": "NONE", "successors": [42811280], "predecessors": [42808620], "right_neighbor_id": null, "left_neighbor_id": 42809424}, "42810822": {"id": 42810822, "is_intersection": true, "lane_type": "BIKE", "left_lane_boundary": [{"x": 1481.38, "y": 316.09, "z": 11.26}, {"x": 1454.58, "y": 306.44, "z": 11.49}], "left_lane_mark_type": "DASHED_YELLOW", "right_lane_boundary": [{"x": 1480.93, "y": 317.3, "z": 11.27}, {"x": 1477.36, "y": 316.06, "z": 11.29}, {"x": 1477.34, "y": 316.06, "z": 11.29}, {"x": 1453.98, "y": 307.86, "z": 11.51}], "right_lane_mark_type": "SOLID_WHITE", "successors": [42808987], "predecessors": [42808753], "right_neighbor_id": null, "left_neighbor_id": 42810437}, "42810823": {"id": 42810823, "is_intersection": false, "lane_type": "BIKE", "left_lane_boundary": [{"x": 1440.0, "y": 301.22, "z": 11.7}, {"x": 1454.58, "y": 306.44, "z": 11.49}], "left_lane_mark_type": "DASHED_YELLOW", "right_lane_boundary": [{"x": 1440.0, "y": 299.62, "z": 11.73}, {"x": 1444.06, "y": 301.0, "z": 11.69}, {"x": 1451.8, "y": 303.79, "z": 11.57}, {"x": 1455.03, "y": 305.07, "z": 11.51}], "right_lane_mark_type": "NONE", "successors": [42817816, 42810437, 42817773], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42808987}, "42810830": {"id": 42810830, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1590.0, "y": 257.68, "z": 12.56}, {"x": 1588.36, "y": 257.68, "z": 12.57}, {"x": 1586.7, "y": 257.52, "z": 12.58}, {"x": 1583.88, "y": 257.07, "z": 12.53}, {"x": 1581.47, "y": 256.42, "z": 12.53}], "left_lane_mark_type": "SOLID_YELLOW", "right_lane_boundary": [{"x": 1590.0, "y": 261.18, "z": 12.54}, {"x": 1585.73, "y": 260.86, "z": 12.53}, {"x": 1584.96, "y": 260.71, "z": 12.53}, {"x": 1581.41, "y": 259.88, "z": 12.51}, {"x": 1580.4, "y": 259.57, "z": 12.52}], "right_lane_mark_type": "SOLID_WHITE", "successors": [42915647], "predecessors": [], "right_neighbor_id": 42811882, "left_neighbor_id": null}, "42810833": {"id": 42810833, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1491.68, "y": 240.0, "z": 12.26}, {"x": 1492.05, "y": 238.97, "z": 12.28}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1487.99, "y": 240.0, "z": 12.24}, {"x": 1488.78, "y": 237.89, "z": 12.27}], "right_lane_mark_type": "SOLID_WHITE", "successors": [42810209, 42807745, 42807471], "predecessors": [42809413], "right_neighbor_id": null, "left_neighbor_id": 42810834}, "42810834": {"id": 42810834, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1492.05, "y": 238.97, "z": 12.28}, {"x": 1491.68, "y": 240.0, "z": 12.26}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1495.48, "y": 239.66, "z": 12.18}, {"x": 1495.36, "y": 240.0, "z": 12.17}], "right_lane_mark_type": "NONE", "successors": [42811679], "predecessors": [42806933], "right_neighbor_id": 42811961, "left_neighbor_id": 42810833}, "42810978": {"id": 42810978, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1440.0, "y": 307.04, "z": 11.65}, {"x": 1436.5, "y": 305.78, "z": 11.69}], "left_lane_mark_type": "DASHED_WHITE", "right_lane_boundary": [{"x": 1440.0, "y": 310.43, "z": 11.6}, {"x": 1435.44, "y": 308.81, "z": 11.69}], "right_lane_mark_type": "NONE", "successors": [42811454], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42808948}, "42811247": {"id": 42811247, "is_intersection": false, "lane_type": "BIKE", "left_lane_boundary": [{"x": 1422.05, "y": 294.85, "z": 11.76}, {"x": 1426.94, "y": 296.59, "z": 11.73}], "left_lane_mark_type": "DASHED_YELLOW", "right_lane_boundary": [{"x": 1422.53, "y": 293.39, "z": 11.8}, {"x": 1427.46, "y": 295.14, "z": 11.77}], "right_lane_mark_type": "NONE", "successors": [42811479], "predecessors": [42808440], "right_neighbor_id": null, "left_neighbor_id": 42811311}, "42811275": {"id": 42811275, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1539.06, "y": 241.53, "z": 12.53}, {"x": 1523.15, "y": 235.93, "z": 12.56}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1537.75, "y": 244.5, "z": 12.41}, {"x": 1522.01, "y": 239.05, "z": 12.41}], "right_lane_mark_type": "DASHED_WHITE", "successors": [42810750], "predecessors": [], "right_neighbor_id": 42811446, "left_neighbor_id": null}, "42811280": {"id": 42811280, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1511.26, "y": 225.25, "z": 12.58}, {"x": 1525.14, "y": 230.26, "z": 12.58}], "left_lane_mark_type": "DASHED_WHITE", "right_lane_boundary": [{"x": 1512.4, "y": 221.74, "z": 12.6}, {"x": 1526.43, "y": 226.7, "z": 12.55}], "right_lane_mark_type": "NONE", "successors": [42809321], "predecessors": [42810795, 42807644], "right_neighbor_id": null, "left_neighbor_id": 42811495}, "42811281": {"id": 42811281, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1524.05, "y": 233.18, "z": 12.62}, {"x": 1540.03, "y": 238.45, "z": 12.57}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1525.14, "y": 230.26, "z": 12.58}, {"x": 1541.07, "y": 235.59, "z": 12.54}], "right_lane_mark_type": "DASHED_WHITE", "successors": [42811505], "predecessors": [], "right_neighbor_id": 42809321, "left_neighbor_id": null}, "42811282": {"id": 42811282, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1524.05, "y": 233.18, "z": 12.62}, {"x": 1526.76, "y": 234.44, "z": 12.62}, {"x": 1536.84, "y": 240.41, "z": 12.55}, {"x": 1539.06, "y": 241.53, "z": 12.53}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1525.14, "y": 230.26, "z": 12.58}, {"x": 1526.77, "y": 230.99, "z": 12.58}, {"x": 1538.59, "y": 237.77, "z": 12.57}, {"x": 1540.03, "y": 238.45, "z": 12.57}], "right_lane_mark_type": "NONE", "successors": [42811503], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42810749}, "42811283": {"id": 42811283, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1577.64, "y": 255.23, "z": 12.55}, {"x": 1554.63, "y": 247.07, "z": 12.51}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1576.57, "y": 258.32, "z": 12.49}, {"x": 1564.6, "y": 254.1, "z": 12.42}, {"x": 1553.63, "y": 250.12, "z": 12.41}], "right_lane_mark_type": "DASHED_WHITE", "successors": [42811319], "predecessors": [], "right_neighbor_id": 42811323, "left_neighbor_id": 42811288}, "42811286": {"id": 42811286, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1477.63, "y": 220.04, "z": 12.71}, {"x": 1484.88, "y": 222.63, "z": 12.67}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1478.77, "y": 216.84, "z": 12.77}, {"x": 1486.03, "y": 219.35, "z": 12.73}], "right_lane_mark_type": "SOLID_WHITE", "successors": [42811684], "predecessors": [], "right_neighbor_id": 42811322, "left_neighbor_id": 42807335}, "42811288": {"id": 42811288, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1554.63, "y": 247.07, "z": 12.51}, {"x": 1577.64, "y": 255.23, "z": 12.55}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1555.7, "y": 244.11, "z": 12.53}, {"x": 1573.25, "y": 250.34, "z": 12.53}, {"x": 1575.71, "y": 251.04, "z": 12.53}, {"x": 1578.37, "y": 251.64, "z": 12.53}, {"x": 1578.81, "y": 251.78, "z": 12.53}], "right_lane_mark_type": "SOLID_WHITE", "successors": [42807643], "predecessors": [], "right_neighbor_id": 42811335, "left_neighbor_id": 42811283}, "42811290": {"id": 42811290, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1522.01, "y": 239.05, "z": 12.41}, {"x": 1507.87, "y": 234.12, "z": 12.39}], "left_lane_mark_type": "SOLID_WHITE", "right_lane_boundary": [{"x": 1520.78, "y": 242.37, "z": 12.3}, {"x": 1507.21, "y": 237.51, "z": 12.27}, {"x": 1506.47, "y": 237.27, "z": 12.24}], "right_lane_mark_type": "NONE", "successors": [42806684], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42810750}, "42811311": {"id": 42811311, "is_intersection": false, "lane_type": "BIKE", "left_lane_boundary": [{"x": 1426.94, "y": 296.59, "z": 11.73}, {"x": 1422.05, "y": 294.85, "z": 11.76}], "left_lane_mark_type": "DASHED_YELLOW", "right_lane_boundary": [{"x": 1426.42, "y": 298.06, "z": 11.76}, {"x": 1421.53, "y": 296.32, "z": 11.78}], "right_lane_mark_type": "DASHED_WHITE", "successors": [42811879], "predecessors": [42808559], "right_neighbor_id": null, "left_neighbor_id": 42811247}, "42811319": {"id": 42811319, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1554.63, "y": 247.07, "z": 12.51}, {"x": 1545.02, "y": 243.65, "z": 12.52}, {"x": 1539.06, "y": 241.53, "z": 12.53}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1553.63, "y": 250.12, "z": 12.41}, {"x": 1544.36, "y": 246.94, "z": 12.4}, {"x": 1537.75, "y": 244.5, "z": 12.41}], "right_lane_mark_type": "DASHED_WHITE", "successors": [42810749, 42811275], "predecessors": [42811283], "right_neighbor_id": 42811488, "left_neighbor_id": 42811503}, "42811322": {"id": 42811322, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1478.77, "y": 216.84, "z": 12.77}, {"x": 1486.03, "y": 219.35, "z": 12.73}], "left_lane_mark_type": "SOLID_WHITE", "right_lane_boundary": [{"x": 1479.88, "y": 213.79, "z": 12.72}, {"x": 1487.16, "y": 216.4, "z": 12.69}], "right_lane_mark_type": "DASHED_WHITE", "successors": [42809424], "predecessors": [], "right_neighbor_id": 42808620, "left_neighbor_id": 42811286}, "42811323": {"id": 42811323, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1576.57, "y": 258.32, "z": 12.49}, {"x": 1564.6, "y": 254.1, "z": 12.42}, {"x": 1553.63, "y": 250.12, "z": 12.41}], "left_lane_mark_type": "DASHED_WHITE", "right_lane_boundary": [{"x": 1575.47, "y": 261.72, "z": 12.46}, {"x": 1572.46, "y": 260.64, "z": 12.45}, {"x": 1565.27, "y": 258.26, "z": 12.36}, {"x": 1552.19, "y": 253.56, "z": 12.33}], "right_lane_mark_type": "NONE", "successors": [42811488], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42811283}, "42811328": {"id": 42811328, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1440.0, "y": 206.61, "z": 12.89}, {"x": 1418.39, "y": 198.86, "z": 12.97}], "left_lane_mark_type": "DASHED_WHITE", "right_lane_boundary": [{"x": 1440.0, "y": 210.01, "z": 12.76}, {"x": 1417.09, "y": 201.83, "z": 12.86}], "right_lane_mark_type": "NONE", "successors": [42810127], "predecessors": [42810779], "right_neighbor_id": null, "left_neighbor_id": 42809918}, "42811329": {"id": 42811329, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1502.42, "y": 210.24, "z": 12.7}, {"x": 1502.67, "y": 208.89, "z": 12.73}, {"x": 1502.89, "y": 206.54, "z": 12.77}, {"x": 1503.05, "y": 204.2, "z": 12.82}, {"x": 1503.37, "y": 200.7, "z": 12.89}, {"x": 1503.53, "y": 197.95, "z": 12.95}, {"x": 1503.59, "y": 195.75, "z": 12.98}, {"x": 1503.55, "y": 193.55, "z": 13.0}, {"x": 1503.36, "y": 191.95, "z": 13.02}, {"x": 1502.82, "y": 190.55, "z": 13.04}, {"x": 1498.49, "y": 181.53, "z": 13.24}, {"x": 1493.25, "y": 171.06, "z": 13.51}, {"x": 1467.39, "y": 120.0, "z": 14.99}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1496.78, "y": 208.12, "z": 12.74}, {"x": 1497.08, "y": 207.09, "z": 12.76}, {"x": 1498.3, "y": 203.08, "z": 12.89}, {"x": 1498.57, "y": 202.08, "z": 12.89}, {"x": 1498.68, "y": 201.79, "z": 12.89}, {"x": 1498.98, "y": 200.66, "z": 12.9}, {"x": 1499.18, "y": 199.59, "z": 12.92}, {"x": 1499.17, "y": 199.37, "z": 12.93}, {"x": 1499.25, "y": 198.68, "z": 12.94}, {"x": 1499.16, "y": 197.38, "z": 12.96}, {"x": 1498.63, "y": 195.31, "z": 13.02}, {"x": 1497.16, "y": 192.5, "z": 13.08}, {"x": 1495.31, "y": 188.96, "z": 13.2}, {"x": 1460.72, "y": 120.0, "z": 15.09}], "right_lane_mark_type": "NONE", "successors": [42816397], "predecessors": [42807745, 42806682, 42806422], "right_neighbor_id": null, "left_neighbor_id": 42811989}, "42811335": {"id": 42811335, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1555.7, "y": 244.11, "z": 12.53}, {"x": 1573.25, "y": 250.34, "z": 12.53}, {"x": 1575.71, "y": 251.04, "z": 12.53}, {"x": 1578.37, "y": 251.64, "z": 12.53}, {"x": 1578.81, "y": 251.78, "z": 12.53}], "left_lane_mark_type": "SOLID_WHITE", "right_lane_boundary": [{"x": 1556.83, "y": 241.15, "z": 12.5}, {"x": 1575.59, "y": 247.65, "z": 12.48}, {"x": 1579.26, "y": 248.61, "z": 12.5}, {"x": 1579.93, "y": 248.81, "z": 12.5}], "right_lane_mark_type": "SOLID_WHITE", "successors": [42812483], "predecessors": [], "right_neighbor_id": 42811491, "left_neighbor_id": 42811288}, "42811336": {"id": 42811336, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1590.0, "y": 252.59, "z": 12.54}, {"x": 1593.35, "y": 252.2, "z": 12.57}, {"x": 1595.66, "y": 251.68, "z": 12.58}, {"x": 1598.52, "y": 250.95, "z": 12.59}, {"x": 1601.07, "y": 250.11, "z": 12.59}, {"x": 1601.93, "y": 249.85, "z": 12.6}], "left_lane_mark_type": "SOLID_WHITE", "right_lane_boundary": [{"x": 1590.0, "y": 249.27, "z": 12.54}, {"x": 1594.69, "y": 248.47, "z": 12.57}, {"x": 1597.52, "y": 247.75, "z": 12.59}, {"x": 1600.38, "y": 246.57, "z": 12.62}], "right_lane_mark_type": "SOLID_WHITE", "successors": [42811656, 42819897], "predecessors": [], "right_neighbor_id": 42811683, "left_neighbor_id": 42811541}, "42811338": {"id": 42811338, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1524.05, "y": 233.18, "z": 12.62}, {"x": 1517.89, "y": 230.77, "z": 12.63}, {"x": 1510.24, "y": 228.05, "z": 12.62}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1523.15, "y": 235.93, "z": 12.56}, {"x": 1509.06, "y": 231.1, "z": 12.57}], "right_lane_mark_type": "SOLID_WHITE", "successors": [42806682], "predecessors": [42810749], "right_neighbor_id": 42810750, "left_neighbor_id": 42811495}, "42811445": {"id": 42811445, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1460.96, "y": 213.97, "z": 12.79}, {"x": 1477.63, "y": 220.04, "z": 12.71}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1462.12, "y": 210.95, "z": 12.84}, {"x": 1464.03, "y": 211.6, "z": 12.83}, {"x": 1478.77, "y": 216.84, "z": 12.77}], "right_lane_mark_type": "SOLID_WHITE", "successors": [42811286], "predecessors": [42809311], "right_neighbor_id": 42811487, "left_neighbor_id": 42810769}, "42811446": {"id": 42811446, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1537.75, "y": 244.5, "z": 12.41}, {"x": 1522.01, "y": 239.05, "z": 12.41}], "left_lane_mark_type": "DASHED_WHITE", "right_lane_boundary": [{"x": 1536.42, "y": 247.96, "z": 12.29}, {"x": 1520.78, "y": 242.37, "z": 12.3}], "right_lane_mark_type": "NONE", "successors": [42811290], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42811275}, "42811454": {"id": 42811454, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1436.5, "y": 305.78, "z": 11.69}, {"x": 1430.9, "y": 303.85, "z": 11.72}], "left_lane_mark_type": "DASHED_WHITE", "right_lane_boundary": [{"x": 1435.44, "y": 308.81, "z": 11.69}, {"x": 1429.9, "y": 306.83, "z": 11.67}], "right_lane_mark_type": "NONE", "successors": [42806889], "predecessors": [42810978], "right_neighbor_id": null, "left_neighbor_id": 42811456}, "42811456": {"id": 42811456, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1437.58, "y": 302.7, "z": 11.72}, {"x": 1431.97, "y": 300.7, "z": 11.76}], "left_lane_mark_type": "SOLID_WHITE", "right_lane_boundary": [{"x": 1436.5, "y": 305.78, "z": 11.69}, {"x": 1430.9, "y": 303.85, "z": 11.72}], "right_lane_mark_type": "DASHED_WHITE", "successors": [42809667], "predecessors": [42808948], "right_neighbor_id": 42811454, "left_neighbor_id": null}, "42811457": {"id": 42811457, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1479.55, "y": 321.04, "z": 11.23}, {"x": 1452.85, "y": 311.64, "z": 11.44}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1478.34, "y": 324.43, "z": 11.23}, {"x": 1453.09, "y": 315.11, "z": 11.35}, {"x": 1452.97, "y": 315.05, "z": 11.35}, {"x": 1452.45, "y": 314.84, "z": 11.39}, {"x": 1451.77, "y": 314.62, "z": 11.41}], "right_lane_mark_type": "NONE", "successors": [42811474], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42808012}, "42811474": {"id": 42811474, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1452.85, "y": 311.64, "z": 11.44}, {"x": 1440.0, "y": 307.04, "z": 11.65}], "left_lane_mark_type": "DASHED_WHITE", "right_lane_boundary": [{"x": 1451.77, "y": 314.62, "z": 11.41}, {"x": 1440.0, "y": 310.43, "z": 11.6}], "right_lane_mark_type": "NONE", "successors": [42810978], "predecessors": [42811457, 42807547], "right_neighbor_id": null, "left_neighbor_id": 42809364}, "42811479": {"id": 42811479, "is_intersection": false, "lane_type": "BIKE", "left_lane_boundary": [{"x": 1426.94, "y": 296.59, "z": 11.73}, {"x": 1440.0, "y": 301.22, "z": 11.7}], "left_lane_mark_type": "DASHED_YELLOW", "right_lane_boundary": [{"x": 1427.46, "y": 295.14, "z": 11.77}, {"x": 1427.5, "y": 295.17, "z": 11.78}, {"x": 1440.0, "y": 299.62, "z": 11.73}], "right_lane_mark_type": "NONE", "successors": [42810823], "predecessors": [42811247], "right_neighbor_id": null, "left_neighbor_id": 42808559}, "42811487": {"id": 42811487, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1462.12, "y": 210.95, "z": 12.84}, {"x": 1464.03, "y": 211.6, "z": 12.83}, {"x": 1478.77, "y": 216.84, "z": 12.77}], "left_lane_mark_type": "SOLID_WHITE", "right_lane_boundary": [{"x": 1463.29, "y": 207.87, "z": 12.81}, {"x": 1479.88, "y": 213.79, "z": 12.72}], "right_lane_mark_type": "DASHED_WHITE", "successors": [42811322], "predecessors": [42809307], "right_neighbor_id": 42806907, "left_neighbor_id": 42811445}, "42811488": {"id": 42811488, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1553.63, "y": 250.12, "z": 12.41}, {"x": 1544.36, "y": 246.94, "z": 12.4}, {"x": 1537.75, "y": 244.5, "z": 12.41}], "left_lane_mark_type": "DASHED_WHITE", "right_lane_boundary": [{"x": 1552.19, "y": 253.56, "z": 12.33}, {"x": 1536.42, "y": 247.96, "z": 12.29}], "right_lane_mark_type": "NONE", "successors": [42811446], "predecessors": [42811323], "right_neighbor_id": null, "left_neighbor_id": 42811319}, "42811491": {"id": 42811491, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1556.83, "y": 241.15, "z": 12.5}, {"x": 1575.59, "y": 247.65, "z": 12.48}, {"x": 1579.26, "y": 248.61, "z": 12.5}, {"x": 1579.93, "y": 248.81, "z": 12.5}], "left_lane_mark_type": "SOLID_WHITE", "right_lane_boundary": [{"x": 1558.05, "y": 237.87, "z": 12.47}, {"x": 1576.94, "y": 244.59, "z": 12.47}, {"x": 1577.95, "y": 244.84, "z": 12.46}, {"x": 1579.26, "y": 245.24, "z": 12.47}, {"x": 1581.06, "y": 245.64, "z": 12.48}], "right_lane_mark_type": "NONE", "successors": [42812494], "predecessors": [42809329], "right_neighbor_id": null, "left_neighbor_id": 42811335}, "42811495": {"id": 42811495, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1510.24, "y": 228.05, "z": 12.62}, {"x": 1517.89, "y": 230.77, "z": 12.63}, {"x": 1524.05, "y": 233.18, "z": 12.62}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1511.26, "y": 225.25, "z": 12.58}, {"x": 1525.14, "y": 230.26, "z": 12.58}], "right_lane_mark_type": "DASHED_WHITE", "successors": [42811282, 42811281], "predecessors": [42809424, 42807471], "right_neighbor_id": 42811280, "left_neighbor_id": 42811338}, "42811503": {"id": 42811503, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1539.06, "y": 241.53, "z": 12.53}, {"x": 1545.02, "y": 243.65, "z": 12.52}, {"x": 1554.63, "y": 247.07, "z": 12.51}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1540.03, "y": 238.45, "z": 12.57}, {"x": 1555.7, "y": 244.11, "z": 12.53}], "right_lane_mark_type": "DASHED_WHITE", "successors": [42811288], "predecessors": [42811282], "right_neighbor_id": 42811505, "left_neighbor_id": 42811319}, "42811505": {"id": 42811505, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1540.03, "y": 238.45, "z": 12.57}, {"x": 1555.7, "y": 244.11, "z": 12.53}], "left_lane_mark_type": "DASHED_WHITE", "right_lane_boundary": [{"x": 1541.07, "y": 235.59, "z": 12.54}, {"x": 1556.83, "y": 241.15, "z": 12.5}], "right_lane_mark_type": "DASHED_WHITE", "successors": [42811335], "predecessors": [42811281], "right_neighbor_id": 42809329, "left_neighbor_id": 42811503}, "42811541": {"id": 42811541, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1590.0, "y": 255.85, "z": 12.58}, {"x": 1592.84, "y": 255.47, "z": 12.6}, {"x": 1596.0, "y": 255.06, "z": 12.57}, {"x": 1598.0, "y": 254.62, "z": 12.64}, {"x": 1599.59, "y": 254.25, "z": 12.61}, {"x": 1600.74, "y": 253.94, "z": 12.62}, {"x": 1601.88, "y": 253.6, "z": 12.64}, {"x": 1603.38, "y": 253.1, "z": 12.61}], "left_lane_mark_type": "SOLID_YELLOW", "right_lane_boundary": [{"x": 1590.0, "y": 252.59, "z": 12.54}, {"x": 1593.35, "y": 252.2, "z": 12.57}, {"x": 1595.66, "y": 251.68, "z": 12.58}, {"x": 1598.52, "y": 250.95, "z": 12.59}, {"x": 1601.07, "y": 250.11, "z": 12.59}, {"x": 1601.93, "y": 249.85, "z": 12.6}], "right_lane_mark_type": "SOLID_WHITE", "successors": [42810144, 42807339], "predecessors": [], "right_neighbor_id": 42811336, "left_neighbor_id": null}, "42811650": {"id": 42811650, "is_intersection": false, "lane_type": "BUS", "left_lane_boundary": [{"x": 1420.96, "y": 192.74, "z": 13.01}, {"x": 1440.0, "y": 199.54, "z": 12.94}], "left_lane_mark_type": "SOLID_WHITE", "right_lane_boundary": [{"x": 1422.21, "y": 189.55, "z": 13.03}, {"x": 1431.82, "y": 192.95, "z": 12.99}, {"x": 1437.09, "y": 194.77, "z": 12.96}, {"x": 1440.0, "y": 195.91, "z": 12.95}], "right_lane_mark_type": "NONE", "successors": [42807473], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42811883}, "42811656": {"id": 42811656, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1601.93, "y": 249.85, "z": 12.6}, {"x": 1604.39, "y": 249.03, "z": 12.62}, {"x": 1605.56, "y": 248.63, "z": 12.63}, {"x": 1607.64, "y": 248.04, "z": 12.66}, {"x": 1609.78, "y": 247.58, "z": 12.68}, {"x": 1612.18, "y": 247.08, "z": 12.7}, {"x": 1614.46, "y": 246.85, "z": 12.69}, {"x": 1617.38, "y": 247.03, "z": 12.65}, {"x": 1620.53, "y": 247.61, "z": 12.6}, {"x": 1623.06, "y": 248.54, "z": 12.55}, {"x": 1625.08, "y": 249.41, "z": 12.51}, {"x": 1626.82, "y": 250.42, "z": 12.45}, {"x": 1628.59, "y": 251.97, "z": 12.37}, {"x": 1630.16, "y": 253.68, "z": 12.31}, {"x": 1632.27, "y": 255.85, "z": 12.2}, {"x": 1633.83, "y": 257.48, "z": 12.1}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1600.38, "y": 246.57, "z": 12.62}, {"x": 1603.83, "y": 245.33, "z": 12.68}, {"x": 1607.57, "y": 244.51, "z": 12.75}, {"x": 1611.79, "y": 243.88, "z": 12.78}, {"x": 1614.84, "y": 243.71, "z": 12.77}, {"x": 1618.7, "y": 243.96, "z": 12.72}, {"x": 1622.21, "y": 244.6, "z": 12.67}, {"x": 1625.44, "y": 245.76, "z": 12.6}, {"x": 1628.13, "y": 247.25, "z": 12.51}, {"x": 1630.42, "y": 249.07, "z": 12.41}, {"x": 1632.29, "y": 250.84, "z": 12.31}, {"x": 1636.27, "y": 255.11, "z": 12.14}], "right_lane_mark_type": "NONE", "successors": [42812446], "predecessors": [42811336], "right_neighbor_id": null, "left_neighbor_id": 42810144}, "42811679": {"id": 42811679, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1491.68, "y": 240.0, "z": 12.26}, {"x": 1482.45, "y": 265.91, "z": 11.89}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1495.36, "y": 240.0, "z": 12.17}, {"x": 1492.93, "y": 246.98, "z": 12.07}, {"x": 1485.5, "y": 266.88, "z": 11.81}], "right_lane_mark_type": "NONE", "successors": [42806926, 42810767], "predecessors": [42810834], "right_neighbor_id": 42808745, "left_neighbor_id": 42809413}, "42811683": {"id": 42811683, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1590.0, "y": 249.27, "z": 12.54}, {"x": 1594.69, "y": 248.47, "z": 12.57}, {"x": 1597.52, "y": 247.75, "z": 12.59}, {"x": 1600.38, "y": 246.57, "z": 12.62}], "left_lane_mark_type": "SOLID_WHITE", "right_lane_boundary": [{"x": 1590.0, "y": 245.99, "z": 12.5}, {"x": 1592.09, "y": 245.87, "z": 12.55}, {"x": 1593.9, "y": 245.45, "z": 12.58}, {"x": 1598.89, "y": 243.49, "z": 12.65}], "right_lane_mark_type": "NONE", "successors": [42807784, 42807338], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42811336}, "42811684": {"id": 42811684, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1484.88, "y": 222.63, "z": 12.67}, {"x": 1486.37, "y": 223.08, "z": 12.66}, {"x": 1487.08, "y": 223.38, "z": 12.66}, {"x": 1487.81, "y": 223.78, "z": 12.65}, {"x": 1488.53, "y": 224.24, "z": 12.64}, {"x": 1489.34, "y": 224.86, "z": 12.63}, {"x": 1490.13, "y": 225.67, "z": 12.61}, {"x": 1490.88, "y": 226.61, "z": 12.58}, {"x": 1491.34, "y": 227.31, "z": 12.56}, {"x": 1491.85, "y": 228.24, "z": 12.53}, {"x": 1492.33, "y": 229.33, "z": 12.48}, {"x": 1492.67, "y": 230.28, "z": 12.45}, {"x": 1492.93, "y": 231.19, "z": 12.43}, {"x": 1493.07, "y": 232.21, "z": 12.41}, {"x": 1493.22, "y": 233.2, "z": 12.38}, {"x": 1493.22, "y": 234.25, "z": 12.36}, {"x": 1493.0, "y": 235.63, "z": 12.32}, {"x": 1492.7, "y": 236.85, "z": 12.31}, {"x": 1492.42, "y": 237.93, "z": 12.29}, {"x": 1492.05, "y": 238.97, "z": 12.28}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1486.03, "y": 219.35, "z": 12.73}, {"x": 1487.95, "y": 220.04, "z": 12.71}, {"x": 1488.87, "y": 220.53, "z": 12.7}, {"x": 1489.85, "y": 221.13, "z": 12.7}, {"x": 1490.8, "y": 221.83, "z": 12.7}, {"x": 1492.02, "y": 222.78, "z": 12.7}, {"x": 1492.88, "y": 223.68, "z": 12.7}, {"x": 1493.45, "y": 224.36, "z": 12.7}, {"x": 1494.05, "y": 225.11, "z": 12.69}, {"x": 1494.64, "y": 225.98, "z": 12.65}, {"x": 1495.16, "y": 226.98, "z": 12.61}, {"x": 1495.63, "y": 228.17, "z": 12.56}, {"x": 1495.88, "y": 229.17, "z": 12.53}, {"x": 1496.2, "y": 230.15, "z": 12.49}, {"x": 1496.52, "y": 231.2, "z": 12.43}, {"x": 1496.61, "y": 232.3, "z": 12.38}, {"x": 1496.53, "y": 233.64, "z": 12.32}, {"x": 1496.32, "y": 235.53, "z": 12.28}, {"x": 1496.01, "y": 237.12, "z": 12.24}, {"x": 1495.76, "y": 238.16, "z": 12.22}, {"x": 1495.55, "y": 239.12, "z": 12.2}, {"x": 1495.48, "y": 239.66, "z": 12.18}], "right_lane_mark_type": "NONE", "successors": [42810834], "predecessors": [42811286], "right_neighbor_id": null, "left_neighbor_id": 42810209}, "42811689": {"id": 42811689, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1604.15, "y": 255.02, "z": 12.55}, {"x": 1602.34, "y": 255.74, "z": 12.58}, {"x": 1598.78, "y": 256.56, "z": 12.6}, {"x": 1596.21, "y": 257.03, "z": 12.57}, {"x": 1593.06, "y": 257.51, "z": 12.59}, {"x": 1590.0, "y": 257.68, "z": 12.56}], "left_lane_mark_type": "SOLID_YELLOW", "right_lane_boundary": [{"x": 1605.35, "y": 258.22, "z": 12.45}, {"x": 1602.5, "y": 259.28, "z": 12.49}, {"x": 1600.01, "y": 260.07, "z": 12.52}, {"x": 1596.42, "y": 260.76, "z": 12.53}, {"x": 1594.13, "y": 260.96, "z": 12.54}, {"x": 1591.76, "y": 261.07, "z": 12.54}, {"x": 1590.0, "y": 261.18, "z": 12.54}], "right_lane_mark_type": "SOLID_WHITE", "successors": [42810830], "predecessors": [42807548], "right_neighbor_id": 42812480, "left_neighbor_id": null}, "42811698": {"id": 42811698, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1511.09, "y": 332.36, "z": 11.36}, {"x": 1479.55, "y": 321.04, "z": 11.23}], "left_lane_mark_type": "SOLID_WHITE", "right_lane_boundary": [{"x": 1509.96, "y": 335.6, "z": 11.41}, {"x": 1509.53, "y": 335.45, "z": 11.37}, {"x": 1496.98, "y": 331.0, "z": 11.21}, {"x": 1496.09, "y": 330.68, "z": 11.29}, {"x": 1496.03, "y": 330.62, "z": 11.28}, {"x": 1482.07, "y": 325.71, "z": 11.26}, {"x": 1478.34, "y": 324.43, "z": 11.23}], "right_lane_mark_type": "NONE", "successors": [42806871, 42811457], "predecessors": [42811307], "right_neighbor_id": null, "left_neighbor_id": 42809703}, "42811879": {"id": 42811879, "is_intersection": false, "lane_type": "BIKE", "left_lane_boundary": [{"x": 1422.05, "y": 294.85, "z": 11.76}, {"x": 1350.0, "y": 269.27, "z": 12.13}], "left_lane_mark_type": "DASHED_YELLOW", "right_lane_boundary": [{"x": 1421.53, "y": 296.32, "z": 11.78}, {"x": 1413.87, "y": 293.53, "z": 11.8}, {"x": 1413.86, "y": 293.52, "z": 11.8}, {"x": 1413.47, "y": 293.38, "z": 11.81}, {"x": 1413.37, "y": 293.35, "z": 11.81}, {"x": 1350.0, "y": 270.81, "z": 12.15}], "right_lane_mark_type": "SOLID_WHITE", "successors": [42809363], "predecessors": [42811311], "right_neighbor_id": null, "left_neighbor_id": 42808440}, "42811882": {"id": 42811882, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1590.0, "y": 261.18, "z": 12.54}, {"x": 1585.73, "y": 260.86, "z": 12.53}, {"x": 1584.96, "y": 260.71, "z": 12.53}, {"x": 1581.41, "y": 259.88, "z": 12.51}, {"x": 1580.4, "y": 259.57, "z": 12.52}], "left_lane_mark_type": "SOLID_WHITE", "right_lane_boundary": [{"x": 1590.0, "y": 264.73, "z": 12.52}, {"x": 1586.22, "y": 264.53, "z": 12.55}, {"x": 1581.71, "y": 263.7, "z": 12.52}, {"x": 1579.09, "y": 262.87, "z": 12.45}], "right_lane_mark_type": "NONE", "successors": [42915541], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42810830}, "42811883": {"id": 42811883, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1419.59, "y": 195.96, "z": 13.02}, {"x": 1440.0, "y": 203.22, "z": 12.93}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1420.96, "y": 192.74, "z": 13.01}, {"x": 1440.0, "y": 199.54, "z": 12.94}], "right_lane_mark_type": "SOLID_WHITE", "successors": [42809731], "predecessors": [42810791], "right_neighbor_id": 42811650, "left_neighbor_id": 42809918}, "42811887": {"id": 42811887, "is_intersection": false, "lane_type": "BUS", "left_lane_boundary": [{"x": 1382.0, "y": 159.55, "z": 13.74}, {"x": 1386.01, "y": 167.54, "z": 13.52}], "left_lane_mark_type": "DASHED_WHITE", "right_lane_boundary": [{"x": 1384.98, "y": 158.11, "z": 13.75}, {"x": 1389.06, "y": 166.15, "z": 13.57}], "right_lane_mark_type": "NONE", "successors": [42806529], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42806903}, "42811889": {"id": 42811889, "is_intersection": false, "lane_type": "BUS", "left_lane_boundary": [{"x": 1400.28, "y": 185.29, "z": 13.07}, {"x": 1420.96, "y": 192.74, "z": 13.01}], "left_lane_mark_type": "SOLID_WHITE", "right_lane_boundary": [{"x": 1401.54, "y": 182.13, "z": 13.11}, {"x": 1403.86, "y": 182.96, "z": 13.06}, {"x": 1406.41, "y": 183.91, "z": 13.07}, {"x": 1410.73, "y": 185.43, "z": 13.1}, {"x": 1414.9, "y": 186.92, "z": 13.02}, {"x": 1417.58, "y": 187.91, "z": 13.02}, {"x": 1422.21, "y": 189.55, "z": 13.03}], "right_lane_mark_type": "NONE", "successors": [42811650], "predecessors": [42809914], "right_neighbor_id": null, "left_neighbor_id": 42810791}, "42811961": {"id": 42811961, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1495.48, "y": 239.66, "z": 12.18}, {"x": 1495.36, "y": 240.0, "z": 12.17}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1498.46, "y": 239.86, "z": 12.18}, {"x": 1498.41, "y": 240.0, "z": 12.16}], "right_lane_mark_type": "NONE", "successors": [42808745], "predecessors": [42806288, 42806684], "right_neighbor_id": null, "left_neighbor_id": 42810834}, "42811963": {"id": 42811963, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1442.94, "y": 204.48, "z": 12.92}, {"x": 1442.23, "y": 204.12, "z": 12.93}, {"x": 1441.07, "y": 203.62, "z": 12.93}, {"x": 1440.0, "y": 203.22, "z": 12.93}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1442.01, "y": 207.33, "z": 12.9}, {"x": 1440.0, "y": 206.61, "z": 12.89}], "right_lane_mark_type": "DASHED_WHITE", "successors": [42809918], "predecessors": [42809376], "right_neighbor_id": 42810779, "left_neighbor_id": 42809731}, "42811989": {"id": 42811989, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1467.39, "y": 120.0, "z": 14.99}, {"x": 1493.25, "y": 171.06, "z": 13.51}, {"x": 1498.49, "y": 181.53, "z": 13.24}, {"x": 1502.82, "y": 190.55, "z": 13.04}, {"x": 1503.36, "y": 191.95, "z": 13.02}, {"x": 1503.55, "y": 193.55, "z": 13.0}, {"x": 1503.59, "y": 195.75, "z": 12.98}, {"x": 1503.53, "y": 197.95, "z": 12.95}, {"x": 1503.37, "y": 200.7, "z": 12.89}, {"x": 1503.05, "y": 204.2, "z": 12.82}, {"x": 1502.89, "y": 206.54, "z": 12.77}, {"x": 1502.67, "y": 208.89, "z": 12.73}, {"x": 1502.42, "y": 210.24, "z": 12.7}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1470.79, "y": 120.0, "z": 14.92}, {"x": 1471.2, "y": 120.82, "z": 14.86}, {"x": 1483.76, "y": 145.76, "z": 14.12}, {"x": 1497.47, "y": 173.06, "z": 13.44}, {"x": 1505.37, "y": 188.48, "z": 13.03}, {"x": 1507.38, "y": 192.34, "z": 12.98}, {"x": 1509.29, "y": 196.43, "z": 13.0}, {"x": 1509.93, "y": 198.27, "z": 13.0}, {"x": 1510.58, "y": 200.99, "z": 12.93}, {"x": 1510.58, "y": 201.01, "z": 12.93}, {"x": 1510.68, "y": 203.43, "z": 12.85}, {"x": 1510.34, "y": 205.87, "z": 12.81}, {"x": 1509.93, "y": 208.01, "z": 12.74}, {"x": 1509.27, "y": 210.41, "z": 12.72}, {"x": 1508.47, "y": 212.44, "z": 12.71}], "right_lane_mark_type": "NONE", "successors": [42806288, 42807644, 42806933, 42806677], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42811329}, "42812210": {"id": 42812210, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1604.2, "y": 224.73, "z": 13.36}, {"x": 1609.6, "y": 234.77, "z": 13.04}, {"x": 1612.96, "y": 240.91, "z": 12.86}, {"x": 1615.23, "y": 244.6, "z": 12.74}, {"x": 1617.38, "y": 248.02, "z": 12.63}, {"x": 1619.24, "y": 250.63, "z": 12.54}, {"x": 1622.21, "y": 254.58, "z": 12.41}, {"x": 1624.99, "y": 257.84, "z": 12.31}, {"x": 1629.07, "y": 262.2, "z": 12.12}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1607.54, "y": 223.3, "z": 13.42}, {"x": 1613.84, "y": 235.7, "z": 13.01}, {"x": 1616.08, "y": 239.71, "z": 12.87}, {"x": 1618.34, "y": 243.42, "z": 12.75}, {"x": 1621.1, "y": 247.43, "z": 12.6}, {"x": 1623.7, "y": 251.18, "z": 12.48}, {"x": 1625.99, "y": 254.27, "z": 12.37}, {"x": 1627.85, "y": 256.51, "z": 12.3}, {"x": 1631.2, "y": 260.05, "z": 12.11}], "right_lane_mark_type": "NONE", "successors": [42812503], "predecessors": [], "right_neighbor_id": 42812208, "left_neighbor_id": null}, "42812480": {"id": 42812480, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1605.35, "y": 258.22, "z": 12.45}, {"x": 1602.5, "y": 259.28, "z": 12.49}, {"x": 1600.01, "y": 260.07, "z": 12.52}, {"x": 1596.42, "y": 260.76, "z": 12.53}, {"x": 1594.13, "y": 260.96, "z": 12.54}, {"x": 1591.76, "y": 261.07, "z": 12.54}, {"x": 1590.0, "y": 261.18, "z": 12.54}], "left_lane_mark_type": "SOLID_WHITE", "right_lane_boundary": [{"x": 1607.02, "y": 262.27, "z": 12.38}, {"x": 1605.74, "y": 262.31, "z": 12.43}, {"x": 1604.25, "y": 262.46, "z": 12.46}, {"x": 1602.31, "y": 262.78, "z": 12.5}, {"x": 1600.88, "y": 263.08, "z": 12.49}, {"x": 1599.41, "y": 263.49, "z": 12.5}, {"x": 1598.03, "y": 263.93, "z": 12.51}, {"x": 1596.55, "y": 264.26, "z": 12.5}, {"x": 1595.08, "y": 264.43, "z": 12.53}, {"x": 1593.01, "y": 264.62, "z": 12.57}, {"x": 1591.67, "y": 264.68, "z": 12.55}, {"x": 1590.0, "y": 264.73, "z": 12.52}], "right_lane_mark_type": "NONE", "successors": [42811882], "predecessors": [42807549], "right_neighbor_id": null, "left_neighbor_id": 42811689}, "42812483": {"id": 42812483, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1578.81, "y": 251.78, "z": 12.53}, {"x": 1581.18, "y": 252.24, "z": 12.53}, {"x": 1582.28, "y": 252.36, "z": 12.54}], "left_lane_mark_type": "SOLID_WHITE", "right_lane_boundary": [{"x": 1579.93, "y": 248.81, "z": 12.5}, {"x": 1582.22, "y": 249.21, "z": 12.51}], "right_lane_mark_type": "SOLID_WHITE", "successors": [42915544], "predecessors": [42811335], "right_neighbor_id": 42812494, "left_neighbor_id": 42807643}, "42812494": {"id": 42812494, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1579.93, "y": 248.81, "z": 12.5}, {"x": 1582.22, "y": 249.21, "z": 12.51}], "left_lane_mark_type": "SOLID_WHITE", "right_lane_boundary": [{"x": 1581.06, "y": 245.64, "z": 12.48}, {"x": 1582.72, "y": 245.79, "z": 12.49}], "right_lane_mark_type": "NONE", "successors": [42915650], "predecessors": [42811491], "right_neighbor_id": null, "left_neighbor_id": 42812483}, "42816214": {"id": 42816214, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1463.31, "y": 112.03, "z": 15.21}, {"x": 1467.39, "y": 120.0, "z": 14.99}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1466.09, "y": 110.75, "z": 15.14}, {"x": 1470.79, "y": 120.0, "z": 14.92}], "right_lane_mark_type": "NONE", "successors": [42811989], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42816397}, "42816397": {"id": 42816397, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1467.39, "y": 120.0, "z": 14.99}, {"x": 1463.31, "y": 112.03, "z": 15.21}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1460.72, "y": 120.0, "z": 15.09}, {"x": 1458.26, "y": 114.47, "z": 15.23}], "right_lane_mark_type": "NONE", "successors": [42824242, 42816401, 42824232, 42816934], "predecessors": [42811329], "right_neighbor_id": null, "left_neighbor_id": 42816214}, "42816401": {"id": 42816401, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1463.31, "y": 112.03, "z": 15.21}, {"x": 1445.72, "y": 83.34, "z": 16.0}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1458.26, "y": 114.47, "z": 15.23}, {"x": 1452.6, "y": 103.83, "z": 15.55}, {"x": 1451.58, "y": 101.81, "z": 15.6}, {"x": 1451.29, "y": 101.27, "z": 15.61}, {"x": 1451.18, "y": 101.09, "z": 15.61}, {"x": 1443.3, "y": 85.71, "z": 15.93}, {"x": 1443.29, "y": 85.7, "z": 15.93}, {"x": 1442.77, "y": 84.68, "z": 15.95}], "right_lane_mark_type": "NONE", "successors": [42816566], "predecessors": [42816397], "right_neighbor_id": null, "left_neighbor_id": null}, "42816624": {"id": 42816624, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1464.35, "y": 94.67, "z": 15.94}, {"x": 1462.8, "y": 95.55, "z": 15.86}, {"x": 1461.83, "y": 96.16, "z": 15.83}, {"x": 1460.91, "y": 96.82, "z": 15.77}, {"x": 1460.12, "y": 97.67, "z": 15.73}, {"x": 1459.6, "y": 98.39, "z": 15.7}, {"x": 1459.27, "y": 99.04, "z": 15.68}, {"x": 1459.02, "y": 99.77, "z": 15.64}, {"x": 1458.89, "y": 100.57, "z": 15.61}, {"x": 1458.91, "y": 101.49, "z": 15.56}, {"x": 1459.0, "y": 102.26, "z": 15.54}, {"x": 1459.16, "y": 103.17, "z": 15.5}, {"x": 1459.4, "y": 103.86, "z": 15.46}, {"x": 1459.8, "y": 104.73, "z": 15.43}, {"x": 1463.31, "y": 112.03, "z": 15.21}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1465.66, "y": 97.2, "z": 15.84}, {"x": 1465.22, "y": 97.41, "z": 15.82}, {"x": 1463.68, "y": 98.24, "z": 15.74}, {"x": 1463.18, "y": 98.53, "z": 15.69}, {"x": 1462.83, "y": 98.81, "z": 15.65}, {"x": 1462.69, "y": 98.92, "z": 15.65}, {"x": 1462.3, "y": 99.28, "z": 15.58}, {"x": 1462.01, "y": 99.69, "z": 15.52}, {"x": 1461.85, "y": 100.02, "z": 15.5}, {"x": 1461.72, "y": 100.47, "z": 15.5}, {"x": 1461.68, "y": 100.86, "z": 15.49}, {"x": 1461.68, "y": 101.34, "z": 15.48}, {"x": 1461.7, "y": 101.83, "z": 15.48}, {"x": 1461.75, "y": 102.02, "z": 15.49}, {"x": 1461.83, "y": 102.3, "z": 15.46}, {"x": 1461.97, "y": 102.67, "z": 15.43}, {"x": 1462.3, "y": 103.42, "z": 15.41}, {"x": 1466.09, "y": 110.75, "z": 15.14}], "right_lane_mark_type": "NONE", "successors": [42816214], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": null}, "42816877": {"id": 42816877, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1442.84, "y": 97.59, "z": 15.68}, {"x": 1445.22, "y": 96.51, "z": 15.73}, {"x": 1445.95, "y": 96.23, "z": 15.76}, {"x": 1446.58, "y": 96.06, "z": 15.76}, {"x": 1447.79, "y": 95.89, "z": 15.77}, {"x": 1448.79, "y": 95.89, "z": 15.78}, {"x": 1449.81, "y": 95.98, "z": 15.78}, {"x": 1450.84, "y": 96.22, "z": 15.78}, {"x": 1451.85, "y": 96.5, "z": 15.79}, {"x": 1452.56, "y": 96.85, "z": 15.79}, {"x": 1453.17, "y": 97.21, "z": 15.78}, {"x": 1453.86, "y": 97.65, "z": 15.77}, {"x": 1454.59, "y": 98.19, "z": 15.76}, {"x": 1455.55, "y": 99.08, "z": 15.73}, {"x": 1456.35, "y": 99.93, "z": 15.7}, {"x": 1457.3, "y": 101.08, "z": 15.64}, {"x": 1458.12, "y": 102.19, "z": 15.57}, {"x": 1458.85, "y": 103.4, "z": 15.49}, {"x": 1459.55, "y": 104.49, "z": 15.44}, {"x": 1463.31, "y": 112.03, "z": 15.21}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1441.28, "y": 94.27, "z": 15.76}, {"x": 1443.7, "y": 93.09, "z": 15.81}, {"x": 1444.95, "y": 92.64, "z": 15.83}, {"x": 1446.12, "y": 92.41, "z": 15.85}, {"x": 1447.3, "y": 92.27, "z": 15.86}, {"x": 1448.59, "y": 92.25, "z": 15.88}, {"x": 1449.97, "y": 92.39, "z": 15.88}, {"x": 1451.24, "y": 92.65, "z": 15.89}, {"x": 1452.41, "y": 93.08, "z": 15.89}, {"x": 1453.56, "y": 93.69, "z": 15.88}, {"x": 1454.92, "y": 94.65, "z": 15.86}, {"x": 1456.31, "y": 95.81, "z": 15.85}, {"x": 1457.34, "y": 96.84, "z": 15.82}, {"x": 1458.36, "y": 98.01, "z": 15.76}, {"x": 1460.36, "y": 100.69, "z": 15.53}, {"x": 1466.09, "y": 110.75, "z": 15.14}], "right_lane_mark_type": "NONE", "successors": [42816214], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42816934}, "42816934": {"id": 42816934, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1463.31, "y": 112.03, "z": 15.21}, {"x": 1459.55, "y": 104.49, "z": 15.44}, {"x": 1458.85, "y": 103.4, "z": 15.49}, {"x": 1458.12, "y": 102.19, "z": 15.57}, {"x": 1457.3, "y": 101.08, "z": 15.64}, {"x": 1456.35, "y": 99.93, "z": 15.7}, {"x": 1455.55, "y": 99.08, "z": 15.73}, {"x": 1454.59, "y": 98.19, "z": 15.76}, {"x": 1453.86, "y": 97.65, "z": 15.77}, {"x": 1453.17, "y": 97.21, "z": 15.78}, {"x": 1452.56, "y": 96.85, "z": 15.79}, {"x": 1451.85, "y": 96.5, "z": 15.79}, {"x": 1450.84, "y": 96.22, "z": 15.78}, {"x": 1449.81, "y": 95.98, "z": 15.78}, {"x": 1448.79, "y": 95.89, "z": 15.78}, {"x": 1447.79, "y": 95.89, "z": 15.77}, {"x": 1446.58, "y": 96.06, "z": 15.76}, {"x": 1445.95, "y": 96.23, "z": 15.76}, {"x": 1445.22, "y": 96.51, "z": 15.73}, {"x": 1442.84, "y": 97.59, "z": 15.68}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1458.26, "y": 114.47, "z": 15.23}, {"x": 1453.78, "y": 105.96, "z": 15.47}, {"x": 1451.58, "y": 101.81, "z": 15.6}, {"x": 1451.29, "y": 101.27, "z": 15.61}, {"x": 1451.11, "y": 100.97, "z": 15.61}, {"x": 1450.92, "y": 100.72, "z": 15.61}, {"x": 1450.69, "y": 100.55, "z": 15.62}, {"x": 1450.34, "y": 100.33, "z": 15.62}, {"x": 1449.91, "y": 100.14, "z": 15.62}, {"x": 1449.52, "y": 99.96, "z": 15.62}, {"x": 1448.96, "y": 99.86, "z": 15.61}, {"x": 1448.55, "y": 99.86, "z": 15.62}, {"x": 1448.05, "y": 99.87, "z": 15.62}, {"x": 1447.4, "y": 99.99, "z": 15.62}, {"x": 1446.82, "y": 100.12, "z": 15.62}, {"x": 1446.02, "y": 100.29, "z": 15.61}, {"x": 1445.38, "y": 100.48, "z": 15.62}, {"x": 1444.69, "y": 100.66, "z": 15.61}], "right_lane_mark_type": "NONE", "successors": [42816620], "predecessors": [42816397], "right_neighbor_id": null, "left_neighbor_id": 42816877}, "42817773": {"id": 42817773, "is_intersection": true, "lane_type": "BIKE", "left_lane_boundary": [{"x": 1454.58, "y": 306.44, "z": 11.49}, {"x": 1455.36, "y": 306.65, "z": 11.49}, {"x": 1456.2, "y": 306.84, "z": 11.48}, {"x": 1457.1, "y": 307.0, "z": 11.47}, {"x": 1458.04, "y": 307.12, "z": 11.45}, {"x": 1459.02, "y": 307.2, "z": 11.44}, {"x": 1460.02, "y": 307.24, "z": 11.43}, {"x": 1461.03, "y": 307.23, "z": 11.42}, {"x": 1462.04, "y": 307.16, "z": 11.41}, {"x": 1463.04, "y": 307.03, "z": 11.41}, {"x": 1464.01, "y": 306.83, "z": 11.41}, {"x": 1464.94, "y": 306.56, "z": 11.4}, {"x": 1465.82, "y": 306.22, "z": 11.4}, {"x": 1466.64, "y": 305.79, "z": 11.4}, {"x": 1467.39, "y": 305.28, "z": 11.41}, {"x": 1468.05, "y": 304.67, "z": 11.42}, {"x": 1468.62, "y": 303.97, "z": 11.43}, {"x": 1469.08, "y": 303.16, "z": 11.44}, {"x": 1469.41, "y": 302.25, "z": 11.44}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1455.03, "y": 305.07, "z": 11.51}, {"x": 1455.55, "y": 305.31, "z": 11.52}, {"x": 1456.14, "y": 305.53, "z": 11.52}, {"x": 1456.77, "y": 305.72, "z": 11.5}, {"x": 1457.44, "y": 305.84, "z": 11.47}, {"x": 1458.14, "y": 305.87, "z": 11.45}, {"x": 1458.84, "y": 305.8, "z": 11.43}, {"x": 1459.54, "y": 305.59, "z": 11.41}, {"x": 1460.23, "y": 305.22, "z": 11.4}, {"x": 1460.65, "y": 304.61, "z": 11.42}, {"x": 1460.94, "y": 304.29, "z": 11.42}, {"x": 1461.12, "y": 303.91, "z": 11.42}, {"x": 1461.65, "y": 302.77, "z": 11.47}, {"x": 1461.94, "y": 302.16, "z": 11.47}, {"x": 1462.35, "y": 301.29, "z": 11.49}, {"x": 1462.68, "y": 300.59, "z": 11.46}, {"x": 1462.92, "y": 300.07, "z": 11.41}], "right_lane_mark_type": "NONE", "successors": [42809705], "predecessors": [42810823], "right_neighbor_id": null, "left_neighbor_id": 42817783}, "42817778": {"id": 42817778, "is_intersection": true, "lane_type": "BIKE", "left_lane_boundary": [{"x": 1481.38, "y": 316.09, "z": 11.26}, {"x": 1480.81, "y": 315.84, "z": 11.26}, {"x": 1480.15, "y": 315.53, "z": 11.27}, {"x": 1479.43, "y": 315.18, "z": 11.27}, {"x": 1478.65, "y": 314.78, "z": 11.27}, {"x": 1477.84, "y": 314.33, "z": 11.27}, {"x": 1476.99, "y": 313.84, "z": 11.28}, {"x": 1476.12, "y": 313.31, "z": 11.29}, {"x": 1475.26, "y": 312.74, "z": 11.3}, {"x": 1474.39, "y": 312.14, "z": 11.3}, {"x": 1473.55, "y": 311.51, "z": 11.31}, {"x": 1472.74, "y": 310.84, "z": 11.32}, {"x": 1471.97, "y": 310.15, "z": 11.33}, {"x": 1471.26, "y": 309.44, "z": 11.34}, {"x": 1470.62, "y": 308.7, "z": 11.35}, {"x": 1470.05, "y": 307.94, "z": 11.36}, {"x": 1469.58, "y": 307.16, "z": 11.37}, {"x": 1469.22, "y": 306.37, "z": 11.38}, {"x": 1468.97, "y": 305.56, "z": 11.39}, {"x": 1468.86, "y": 304.74, "z": 11.41}, {"x": 1468.88, "y": 303.92, "z": 11.43}, {"x": 1469.07, "y": 303.08, "z": 11.44}, {"x": 1469.41, "y": 302.25, "z": 11.44}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1480.93, "y": 317.3, "z": 11.27}, {"x": 1477.36, "y": 316.06, "z": 11.29}, {"x": 1477.16, "y": 316.11, "z": 11.29}, {"x": 1476.65, "y": 315.93, "z": 11.29}, {"x": 1475.75, "y": 315.58, "z": 11.29}, {"x": 1474.85, "y": 315.21, "z": 11.29}, {"x": 1473.96, "y": 314.81, "z": 11.3}, {"x": 1473.07, "y": 314.39, "z": 11.31}, {"x": 1472.18, "y": 313.95, "z": 11.33}, {"x": 1471.32, "y": 313.48, "z": 11.34}, {"x": 1470.47, "y": 312.98, "z": 11.34}, {"x": 1469.64, "y": 312.46, "z": 11.35}, {"x": 1468.84, "y": 311.91, "z": 11.37}, {"x": 1468.07, "y": 311.34, "z": 11.37}, {"x": 1467.34, "y": 310.73, "z": 11.38}, {"x": 1466.65, "y": 310.1, "z": 11.39}, {"x": 1466.0, "y": 309.44, "z": 11.39}, {"x": 1465.39, "y": 308.74, "z": 11.39}, {"x": 1464.84, "y": 308.02, "z": 11.39}, {"x": 1464.35, "y": 307.27, "z": 11.4}, {"x": 1463.91, "y": 306.48, "z": 11.41}, {"x": 1463.54, "y": 305.67, "z": 11.41}, {"x": 1463.24, "y": 304.82, "z": 11.4}, {"x": 1463.02, "y": 303.94, "z": 11.4}, {"x": 1462.87, "y": 303.02, "z": 11.39}, {"x": 1462.8, "y": 302.08, "z": 11.4}, {"x": 1462.81, "y": 301.09, "z": 11.41}, {"x": 1462.92, "y": 300.07, "z": 11.41}], "right_lane_mark_type": "NONE", "successors": [42809705], "predecessors": [42808753], "right_neighbor_id": null, "left_neighbor_id": null}, "42817783": {"id": 42817783, "is_intersection": true, "lane_type": "BIKE", "left_lane_boundary": [{"x": 1469.41, "y": 302.25, "z": 11.44}, {"x": 1469.08, "y": 303.16, "z": 11.44}, {"x": 1468.62, "y": 303.97, "z": 11.43}, {"x": 1468.05, "y": 304.67, "z": 11.42}, {"x": 1467.39, "y": 305.28, "z": 11.41}, {"x": 1466.64, "y": 305.79, "z": 11.4}, {"x": 1465.82, "y": 306.22, "z": 11.4}, {"x": 1464.94, "y": 306.56, "z": 11.4}, {"x": 1464.01, "y": 306.83, "z": 11.41}, {"x": 1463.04, "y": 307.03, "z": 11.41}, {"x": 1462.04, "y": 307.16, "z": 11.41}, {"x": 1461.03, "y": 307.23, "z": 11.42}, {"x": 1460.02, "y": 307.24, "z": 11.43}, {"x": 1459.02, "y": 307.2, "z": 11.44}, {"x": 1458.04, "y": 307.12, "z": 11.45}, {"x": 1457.1, "y": 307.0, "z": 11.47}, {"x": 1456.2, "y": 306.84, "z": 11.48}, {"x": 1455.36, "y": 306.65, "z": 11.49}, {"x": 1454.58, "y": 306.44, "z": 11.49}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1472.35, "y": 303.23, "z": 11.4}, {"x": 1471.91, "y": 304.13, "z": 11.39}, {"x": 1471.4, "y": 304.95, "z": 11.38}, {"x": 1470.82, "y": 305.69, "z": 11.38}, {"x": 1470.17, "y": 306.35, "z": 11.37}, {"x": 1469.47, "y": 306.93, "z": 11.37}, {"x": 1468.7, "y": 307.44, "z": 11.38}, {"x": 1467.89, "y": 307.87, "z": 11.38}, {"x": 1467.04, "y": 308.24, "z": 11.38}, {"x": 1466.15, "y": 308.55, "z": 11.39}, {"x": 1465.23, "y": 308.79, "z": 11.4}, {"x": 1464.29, "y": 308.97, "z": 11.41}, {"x": 1463.33, "y": 309.1, "z": 11.42}, {"x": 1462.35, "y": 309.17, "z": 11.43}, {"x": 1461.37, "y": 309.19, "z": 11.44}, {"x": 1460.39, "y": 309.17, "z": 11.45}, {"x": 1459.41, "y": 309.09, "z": 11.46}, {"x": 1458.45, "y": 308.98, "z": 11.47}, {"x": 1457.5, "y": 308.82, "z": 11.48}, {"x": 1456.57, "y": 308.63, "z": 11.49}, {"x": 1455.67, "y": 308.4, "z": 11.49}, {"x": 1454.81, "y": 308.15, "z": 11.5}, {"x": 1453.98, "y": 307.86, "z": 11.51}], "right_lane_mark_type": "NONE", "successors": [42808987], "predecessors": [42808644], "right_neighbor_id": null, "left_neighbor_id": 42817773}, "42817801": {"id": 42817801, "is_intersection": true, "lane_type": "BIKE", "left_lane_boundary": [{"x": 1459.23, "y": 329.93, "z": 10.98}, {"x": 1459.54, "y": 329.0, "z": 11.01}, {"x": 1459.85, "y": 328.16, "z": 11.02}, {"x": 1460.25, "y": 327.33, "z": 11.04}, {"x": 1460.7, "y": 326.52, "z": 11.06}, {"x": 1461.19, "y": 325.72, "z": 11.09}, {"x": 1461.72, "y": 324.93, "z": 11.11}, {"x": 1462.28, "y": 324.16, "z": 11.14}, {"x": 1462.88, "y": 323.41, "z": 11.16}, {"x": 1463.51, "y": 322.67, "z": 11.18}, {"x": 1464.17, "y": 321.97, "z": 11.21}, {"x": 1464.87, "y": 321.28, "z": 11.23}, {"x": 1465.59, "y": 320.63, "z": 11.25}, {"x": 1466.33, "y": 320.0, "z": 11.26}, {"x": 1467.11, "y": 319.41, "z": 11.27}, {"x": 1467.9, "y": 318.85, "z": 11.29}, {"x": 1468.72, "y": 318.32, "z": 11.3}, {"x": 1469.55, "y": 317.84, "z": 11.31}, {"x": 1470.4, "y": 317.39, "z": 11.32}, {"x": 1471.27, "y": 316.99, "z": 11.32}, {"x": 1472.15, "y": 316.64, "z": 11.31}, {"x": 1473.05, "y": 316.33, "z": 11.31}, {"x": 1473.95, "y": 316.08, "z": 11.3}, {"x": 1474.87, "y": 315.87, "z": 11.29}, {"x": 1475.79, "y": 315.72, "z": 11.29}, {"x": 1476.72, "y": 315.63, "z": 11.29}, {"x": 1477.65, "y": 315.6, "z": 11.28}, {"x": 1478.58, "y": 315.62, "z": 11.27}, {"x": 1479.52, "y": 315.71, "z": 11.27}, {"x": 1480.45, "y": 315.87, "z": 11.26}, {"x": 1481.38, "y": 316.09, "z": 11.26}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1456.07, "y": 328.82, "z": 10.93}, {"x": 1456.42, "y": 328.0, "z": 10.95}, {"x": 1456.81, "y": 327.19, "z": 10.97}, {"x": 1457.23, "y": 326.38, "z": 11.0}, {"x": 1457.7, "y": 325.58, "z": 11.03}, {"x": 1458.2, "y": 324.79, "z": 11.06}, {"x": 1458.74, "y": 324.01, "z": 11.09}, {"x": 1459.31, "y": 323.25, "z": 11.12}, {"x": 1459.91, "y": 322.5, "z": 11.15}, {"x": 1460.54, "y": 321.77, "z": 11.18}, {"x": 1461.2, "y": 321.06, "z": 11.21}, {"x": 1461.89, "y": 320.37, "z": 11.24}, {"x": 1462.61, "y": 319.7, "z": 11.26}, {"x": 1463.35, "y": 319.06, "z": 11.28}, {"x": 1464.11, "y": 318.45, "z": 11.3}, {"x": 1464.9, "y": 317.86, "z": 11.31}, {"x": 1465.7, "y": 317.31, "z": 11.32}, {"x": 1466.53, "y": 316.79, "z": 11.33}, {"x": 1467.37, "y": 316.3, "z": 11.34}, {"x": 1468.23, "y": 315.85, "z": 11.35}, {"x": 1469.1, "y": 315.44, "z": 11.34}, {"x": 1469.98, "y": 315.06, "z": 11.34}, {"x": 1470.88, "y": 314.73, "z": 11.34}, {"x": 1471.78, "y": 314.44, "z": 11.33}, {"x": 1472.7, "y": 314.2, "z": 11.32}, {"x": 1473.62, "y": 314.0, "z": 11.31}, {"x": 1474.54, "y": 313.85, "z": 11.3}, {"x": 1475.47, "y": 313.75, "z": 11.29}, {"x": 1476.41, "y": 313.71, "z": 11.28}, {"x": 1477.34, "y": 313.71, "z": 11.28}, {"x": 1478.27, "y": 313.78, "z": 11.29}, {"x": 1479.2, "y": 313.9, "z": 11.27}, {"x": 1480.13, "y": 314.08, "z": 11.29}, {"x": 1481.05, "y": 314.33, "z": 11.32}, {"x": 1481.97, "y": 314.63, "z": 11.28}], "right_lane_mark_type": "NONE", "successors": [42808752], "predecessors": [42808548], "right_neighbor_id": null, "left_neighbor_id": null}, "42817814": {"id": 42817814, "is_intersection": true, "lane_type": "BIKE", "left_lane_boundary": [{"x": 1472.35, "y": 303.23, "z": 11.4}, {"x": 1471.88, "y": 304.26, "z": 11.38}, {"x": 1471.54, "y": 305.26, "z": 11.37}, {"x": 1471.34, "y": 306.23, "z": 11.36}, {"x": 1471.26, "y": 307.17, "z": 11.35}, {"x": 1471.3, "y": 308.07, "z": 11.35}, {"x": 1471.45, "y": 308.95, "z": 11.34}, {"x": 1471.7, "y": 309.78, "z": 11.33}, {"x": 1472.05, "y": 310.57, "z": 11.33}, {"x": 1472.49, "y": 311.32, "z": 11.33}, {"x": 1473.01, "y": 312.03, "z": 11.32}, {"x": 1473.61, "y": 312.68, "z": 11.31}, {"x": 1474.28, "y": 313.29, "z": 11.3}, {"x": 1475.07, "y": 313.77, "z": 11.3}, {"x": 1475.78, "y": 314.01, "z": 11.29}, {"x": 1476.6, "y": 314.3, "z": 11.28}, {"x": 1477.34, "y": 314.56, "z": 11.28}, {"x": 1478.27, "y": 315.0, "z": 11.27}, {"x": 1479.15, "y": 315.21, "z": 11.27}, {"x": 1480.34, "y": 315.67, "z": 11.26}, {"x": 1481.38, "y": 316.09, "z": 11.26}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1475.18, "y": 304.11, "z": 11.35}, {"x": 1474.73, "y": 305.15, "z": 11.37}, {"x": 1474.41, "y": 306.14, "z": 11.38}, {"x": 1474.21, "y": 307.06, "z": 11.35}, {"x": 1474.14, "y": 307.93, "z": 11.34}, {"x": 1474.21, "y": 308.85, "z": 11.33}, {"x": 1474.21, "y": 308.94, "z": 11.32}, {"x": 1474.35, "y": 309.87, "z": 11.32}, {"x": 1474.77, "y": 310.85, "z": 11.31}, {"x": 1475.59, "y": 311.82, "z": 11.32}, {"x": 1476.74, "y": 312.57, "z": 11.33}, {"x": 1477.64, "y": 312.98, "z": 11.33}, {"x": 1480.64, "y": 314.06, "z": 11.32}, {"x": 1481.97, "y": 314.63, "z": 11.28}], "right_lane_mark_type": "NONE", "successors": [42808752], "predecessors": [42808641], "right_neighbor_id": null, "left_neighbor_id": null}, "42817815": {"id": 42817815, "is_intersection": true, "lane_type": "BIKE", "left_lane_boundary": [{"x": 1456.07, "y": 328.82, "z": 10.93}, {"x": 1456.27, "y": 328.23, "z": 10.95}, {"x": 1456.5, "y": 327.55, "z": 10.96}, {"x": 1456.74, "y": 326.79, "z": 10.98}, {"x": 1457.0, "y": 325.96, "z": 11.0}, {"x": 1457.27, "y": 325.07, "z": 11.03}, {"x": 1457.54, "y": 324.13, "z": 11.06}, {"x": 1457.81, "y": 323.14, "z": 11.1}, {"x": 1458.07, "y": 322.11, "z": 11.12}, {"x": 1458.31, "y": 321.06, "z": 11.17}, {"x": 1458.54, "y": 319.98, "z": 11.22}, {"x": 1458.73, "y": 318.89, "z": 11.26}, {"x": 1458.9, "y": 317.79, "z": 11.29}, {"x": 1459.03, "y": 316.7, "z": 11.32}, {"x": 1459.11, "y": 315.62, "z": 11.36}, {"x": 1459.14, "y": 314.55, "z": 11.39}, {"x": 1459.12, "y": 313.52, "z": 11.41}, {"x": 1459.04, "y": 312.52, "z": 11.43}, {"x": 1458.89, "y": 311.56, "z": 11.45}, {"x": 1458.66, "y": 310.66, "z": 11.46}, {"x": 1458.36, "y": 309.81, "z": 11.47}, {"x": 1457.98, "y": 309.04, "z": 11.47}, {"x": 1457.5, "y": 308.34, "z": 11.47}, {"x": 1456.93, "y": 307.72, "z": 11.48}, {"x": 1456.26, "y": 307.19, "z": 11.48}, {"x": 1455.48, "y": 306.76, "z": 11.49}, {"x": 1454.58, "y": 306.44, "z": 11.49}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1452.8, "y": 327.68, "z": 10.92}, {"x": 1453.0, "y": 327.17, "z": 10.92}, {"x": 1453.24, "y": 326.55, "z": 10.96}, {"x": 1453.51, "y": 325.84, "z": 10.99}, {"x": 1453.82, "y": 325.05, "z": 10.99}, {"x": 1454.14, "y": 324.18, "z": 11.04}, {"x": 1454.47, "y": 323.25, "z": 11.08}, {"x": 1454.81, "y": 322.26, "z": 11.1}, {"x": 1455.14, "y": 321.24, "z": 11.14}, {"x": 1455.45, "y": 320.18, "z": 11.2}, {"x": 1455.75, "y": 319.1, "z": 11.21}, {"x": 1456.01, "y": 318.01, "z": 11.24}, {"x": 1456.24, "y": 316.92, "z": 11.28}, {"x": 1456.42, "y": 315.84, "z": 11.33}, {"x": 1456.55, "y": 314.78, "z": 11.36}, {"x": 1456.62, "y": 313.75, "z": 11.4}, {"x": 1456.62, "y": 312.76, "z": 11.42}, {"x": 1456.54, "y": 311.82, "z": 11.45}, {"x": 1456.37, "y": 310.95, "z": 11.46}, {"x": 1456.11, "y": 310.14, "z": 11.47}, {"x": 1455.75, "y": 309.42, "z": 11.48}, {"x": 1455.28, "y": 308.8, "z": 11.49}, {"x": 1454.7, "y": 308.27, "z": 11.5}, {"x": 1453.98, "y": 307.86, "z": 11.51}], "right_lane_mark_type": "NONE", "successors": [42808987], "predecessors": [42809680], "right_neighbor_id": null, "left_neighbor_id": null}, "42817816": {"id": 42817816, "is_intersection": true, "lane_type": "BIKE", "left_lane_boundary": [{"x": 1454.58, "y": 306.44, "z": 11.49}, {"x": 1455.45, "y": 306.91, "z": 11.49}, {"x": 1456.25, "y": 307.43, "z": 11.49}, {"x": 1456.98, "y": 308.0, "z": 11.48}, {"x": 1457.64, "y": 308.63, "z": 11.47}, {"x": 1458.24, "y": 309.3, "z": 11.47}, {"x": 1458.77, "y": 310.02, "z": 11.46}, {"x": 1459.25, "y": 310.79, "z": 11.46}, {"x": 1459.67, "y": 311.59, "z": 11.44}, {"x": 1460.03, "y": 312.42, "z": 11.43}, {"x": 1460.34, "y": 313.28, "z": 11.41}, {"x": 1460.59, "y": 314.17, "z": 11.4}, {"x": 1460.8, "y": 315.08, "z": 11.38}, {"x": 1460.96, "y": 316.01, "z": 11.35}, {"x": 1461.08, "y": 316.96, "z": 11.32}, {"x": 1461.15, "y": 317.92, "z": 11.3}, {"x": 1461.18, "y": 318.89, "z": 11.27}, {"x": 1461.17, "y": 319.86, "z": 11.24}, {"x": 1461.13, "y": 320.83, "z": 11.21}, {"x": 1461.05, "y": 321.8, "z": 11.19}, {"x": 1460.94, "y": 322.77, "z": 11.16}, {"x": 1460.8, "y": 323.72, "z": 11.13}, {"x": 1460.63, "y": 324.66, "z": 11.11}, {"x": 1460.44, "y": 325.59, "z": 11.08}, {"x": 1460.22, "y": 326.49, "z": 11.06}, {"x": 1459.99, "y": 327.37, "z": 11.04}, {"x": 1459.73, "y": 328.22, "z": 11.02}, {"x": 1459.47, "y": 329.18, "z": 11.0}, {"x": 1459.23, "y": 329.93, "z": 10.98}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1455.03, "y": 305.07, "z": 11.51}, {"x": 1455.98, "y": 305.44, "z": 11.54}, {"x": 1456.87, "y": 305.88, "z": 11.47}, {"x": 1457.7, "y": 306.37, "z": 11.45}, {"x": 1458.47, "y": 306.92, "z": 11.44}, {"x": 1459.18, "y": 307.53, "z": 11.44}, {"x": 1459.83, "y": 308.18, "z": 11.44}, {"x": 1460.43, "y": 308.88, "z": 11.44}, {"x": 1460.97, "y": 309.62, "z": 11.44}, {"x": 1461.46, "y": 310.4, "z": 11.44}, {"x": 1461.91, "y": 311.21, "z": 11.44}, {"x": 1462.3, "y": 312.06, "z": 11.42}, {"x": 1462.64, "y": 312.94, "z": 11.4}, {"x": 1462.94, "y": 313.85, "z": 11.39}, {"x": 1463.19, "y": 314.78, "z": 11.38}, {"x": 1463.4, "y": 315.73, "z": 11.36}, {"x": 1463.57, "y": 316.69, "z": 11.33}, {"x": 1463.7, "y": 317.67, "z": 11.31}, {"x": 1463.79, "y": 318.66, "z": 11.29}, {"x": 1463.85, "y": 319.65, "z": 11.27}, {"x": 1463.87, "y": 320.65, "z": 11.24}, {"x": 1463.86, "y": 321.65, "z": 11.22}, {"x": 1463.81, "y": 322.65, "z": 11.19}, {"x": 1463.74, "y": 323.64, "z": 11.16}, {"x": 1463.64, "y": 324.62, "z": 11.13}, {"x": 1463.51, "y": 325.58, "z": 11.1}, {"x": 1463.35, "y": 326.53, "z": 11.08}, {"x": 1463.18, "y": 327.46, "z": 11.05}, {"x": 1462.98, "y": 328.37, "z": 11.03}, {"x": 1462.76, "y": 329.25, "z": 11.0}, {"x": 1462.52, "y": 330.1, "z": 10.98}, {"x": 1462.26, "y": 330.92, "z": 10.96}], "right_lane_mark_type": "NONE", "successors": [42817689], "predecessors": [42810823], "right_neighbor_id": null, "left_neighbor_id": null}, "42817998": {"id": 42817998, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1584.5, "y": 177.61, "z": 14.92}, {"x": 1584.79, "y": 178.19, "z": 14.91}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1587.01, "y": 175.43, "z": 14.86}, {"x": 1587.25, "y": 175.92, "z": 14.84}], "right_lane_mark_type": "DASHED_WHITE", "successors": [42818516], "predecessors": [], "right_neighbor_id": 42818035, "left_neighbor_id": null}, "42817999": {"id": 42817999, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1555.95, "y": 120.0, "z": 16.99}, {"x": 1575.02, "y": 158.51, "z": 15.61}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1559.45, "y": 120.0, "z": 16.86}, {"x": 1577.95, "y": 157.04, "z": 15.51}], "right_lane_mark_type": "DASHED_WHITE", "successors": [42818481], "predecessors": [42816935], "right_neighbor_id": 42818513, "left_neighbor_id": 42818036}, "42818012": {"id": 42818012, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1578.57, "y": 180.58, "z": 14.84}, {"x": 1569.08, "y": 161.48, "z": 15.52}], "left_lane_mark_type": "DASHED_WHITE", "right_lane_boundary": [{"x": 1575.4, "y": 182.02, "z": 14.88}, {"x": 1565.96, "y": 163.03, "z": 15.47}], "right_lane_mark_type": "NONE", "successors": [42818549], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42818546}, "42818021": {"id": 42818021, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1577.95, "y": 157.04, "z": 15.51}, {"x": 1587.01, "y": 175.43, "z": 14.86}], "left_lane_mark_type": "DASHED_WHITE", "right_lane_boundary": [{"x": 1581.04, "y": 155.48, "z": 15.52}, {"x": 1588.28, "y": 170.66, "z": 14.95}, {"x": 1589.24, "y": 172.77, "z": 14.87}], "right_lane_mark_type": "NONE", "successors": [42818035], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42818481}, "42818022": {"id": 42818022, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1587.34, "y": 190.94, "z": 14.49}, {"x": 1581.99, "y": 179.85, "z": 14.91}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1584.48, "y": 192.36, "z": 14.41}, {"x": 1579.02, "y": 181.48, "z": 14.8}], "right_lane_mark_type": "DASHED_WHITE", "successors": [42818454], "predecessors": [], "right_neighbor_id": 42818040, "left_neighbor_id": null}, "42818025": {"id": 42818025, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1579.02, "y": 181.48, "z": 14.8}, {"x": 1578.57, "y": 180.58, "z": 14.84}], "left_lane_mark_type": "DASHED_WHITE", "right_lane_boundary": [{"x": 1575.97, "y": 183.16, "z": 14.75}, {"x": 1575.4, "y": 182.02, "z": 14.88}], "right_lane_mark_type": "NONE", "successors": [42818012], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42818454}, "42818026": {"id": 42818026, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1571.88, "y": 160.06, "z": 15.59}, {"x": 1552.04, "y": 120.0, "z": 17.07}], "left_lane_mark_type": "SOLID_WHITE", "right_lane_boundary": [{"x": 1569.08, "y": 161.48, "z": 15.52}, {"x": 1548.7, "y": 120.0, "z": 17.07}], "right_lane_mark_type": "DASHED_WHITE", "successors": [42816385], "predecessors": [], "right_neighbor_id": 42818549, "left_neighbor_id": 42818036}, "42818027": {"id": 42818027, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1590.0, "y": 203.32, "z": 14.06}, {"x": 1584.48, "y": 192.36, "z": 14.41}], "left_lane_mark_type": "DASHED_WHITE", "right_lane_boundary": [{"x": 1590.0, "y": 211.38, "z": 13.85}, {"x": 1581.32, "y": 193.93, "z": 14.44}], "right_lane_mark_type": "NONE", "successors": [42818040], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42818528}, "42818035": {"id": 42818035, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1587.01, "y": 175.43, "z": 14.86}, {"x": 1587.25, "y": 175.92, "z": 14.84}], "left_lane_mark_type": "DASHED_WHITE", "right_lane_boundary": [{"x": 1589.24, "y": 172.77, "z": 14.87}, {"x": 1589.47, "y": 173.87, "z": 14.81}], "right_lane_mark_type": "NONE", "successors": [42818485], "predecessors": [42818021], "right_neighbor_id": null, "left_neighbor_id": 42817998}, "42818036": {"id": 42818036, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1575.02, "y": 158.51, "z": 15.61}, {"x": 1555.95, "y": 120.0, "z": 16.99}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1571.88, "y": 160.06, "z": 15.59}, {"x": 1552.04, "y": 120.0, "z": 17.07}], "right_lane_mark_type": "SOLID_WHITE", "successors": [42815726], "predecessors": [], "right_neighbor_id": 42818026, "left_neighbor_id": 42817999}, "42818040": {"id": 42818040, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1584.48, "y": 192.36, "z": 14.41}, {"x": 1579.02, "y": 181.48, "z": 14.8}], "left_lane_mark_type": "DASHED_WHITE", "right_lane_boundary": [{"x": 1581.32, "y": 193.93, "z": 14.44}, {"x": 1575.97, "y": 183.16, "z": 14.75}], "right_lane_mark_type": "NONE", "successors": [42818025], "predecessors": [42818027], "right_neighbor_id": null, "left_neighbor_id": 42818022}, "42818454": {"id": 42818454, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1581.99, "y": 179.85, "z": 14.91}, {"x": 1581.6, "y": 179.06, "z": 14.93}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1579.02, "y": 181.48, "z": 14.8}, {"x": 1578.57, "y": 180.58, "z": 14.84}], "right_lane_mark_type": "DASHED_WHITE", "successors": [42818546], "predecessors": [42818022], "right_neighbor_id": 42818025, "left_neighbor_id": null}, "42818465": {"id": 42818465, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1584.5, "y": 177.61, "z": 14.92}, {"x": 1575.02, "y": 158.51, "z": 15.61}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1581.6, "y": 179.06, "z": 14.93}, {"x": 1571.88, "y": 160.06, "z": 15.59}], "right_lane_mark_type": "NONE", "successors": [42818036], "predecessors": [], "right_neighbor_id": 42818546, "left_neighbor_id": 42818481}, "42818481": {"id": 42818481, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1575.02, "y": 158.51, "z": 15.61}, {"x": 1584.5, "y": 177.61, "z": 14.92}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1577.95, "y": 157.04, "z": 15.51}, {"x": 1587.01, "y": 175.43, "z": 14.86}], "right_lane_mark_type": "DASHED_WHITE", "successors": [42817998], "predecessors": [42817999], "right_neighbor_id": 42818021, "left_neighbor_id": 42818465}, "42818485": {"id": 42818485, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1587.25, "y": 175.92, "z": 14.84}, {"x": 1590.0, "y": 181.11, "z": 14.65}], "left_lane_mark_type": "DASHED_WHITE", "right_lane_boundary": [{"x": 1589.47, "y": 173.87, "z": 14.81}, {"x": 1590.0, "y": 174.37, "z": 14.8}], "right_lane_mark_type": "NONE", "successors": [42819421], "predecessors": [42818035], "right_neighbor_id": null, "left_neighbor_id": 42818516}, "42818513": {"id": 42818513, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1559.45, "y": 120.0, "z": 16.86}, {"x": 1577.95, "y": 157.04, "z": 15.51}], "left_lane_mark_type": "DASHED_WHITE", "right_lane_boundary": [{"x": 1563.47, "y": 120.0, "z": 16.81}, {"x": 1580.19, "y": 153.78, "z": 15.57}, {"x": 1581.04, "y": 155.48, "z": 15.52}], "right_lane_mark_type": "NONE", "successors": [42818021], "predecessors": [42815727], "right_neighbor_id": null, "left_neighbor_id": 42817999}, "42818516": {"id": 42818516, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1584.79, "y": 178.19, "z": 14.91}, {"x": 1590.0, "y": 188.91, "z": 14.52}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1587.25, "y": 175.92, "z": 14.84}, {"x": 1590.0, "y": 181.11, "z": 14.65}], "right_lane_mark_type": "DASHED_WHITE", "successors": [42819408], "predecessors": [42817998], "right_neighbor_id": 42818485, "left_neighbor_id": null}, "42818528": {"id": 42818528, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1590.0, "y": 196.47, "z": 14.31}, {"x": 1587.34, "y": 190.94, "z": 14.49}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1590.0, "y": 203.32, "z": 14.06}, {"x": 1584.48, "y": 192.36, "z": 14.41}], "right_lane_mark_type": "DASHED_WHITE", "successors": [42818022], "predecessors": [], "right_neighbor_id": 42818027, "left_neighbor_id": null}, "42818546": {"id": 42818546, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1581.6, "y": 179.06, "z": 14.93}, {"x": 1571.88, "y": 160.06, "z": 15.59}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1578.57, "y": 180.58, "z": 14.84}, {"x": 1569.08, "y": 161.48, "z": 15.52}], "right_lane_mark_type": "DASHED_WHITE", "successors": [42818026], "predecessors": [42818454], "right_neighbor_id": 42818012, "left_neighbor_id": 42818465}, "42818549": {"id": 42818549, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1569.08, "y": 161.48, "z": 15.52}, {"x": 1548.7, "y": 120.0, "z": 17.07}], "left_lane_mark_type": "DASHED_WHITE", "right_lane_boundary": [{"x": 1565.96, "y": 163.03, "z": 15.47}, {"x": 1544.62, "y": 120.0, "z": 17.14}], "right_lane_mark_type": "NONE", "successors": [42816384], "predecessors": [42818012], "right_neighbor_id": null, "left_neighbor_id": 42818026}, "42818858": {"id": 42818858, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1593.93, "y": 204.21, "z": 14.02}, {"x": 1604.2, "y": 224.73, "z": 13.36}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1597.04, "y": 202.52, "z": 14.01}, {"x": 1607.54, "y": 223.3, "z": 13.42}], "right_lane_mark_type": "SOLID_WHITE", "successors": [42812210], "predecessors": [], "right_neighbor_id": 42819649, "left_neighbor_id": 42819224}, "42818861": {"id": 42818861, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1593.93, "y": 204.21, "z": 14.02}, {"x": 1590.0, "y": 196.47, "z": 14.31}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1591.14, "y": 205.77, "z": 13.97}, {"x": 1590.0, "y": 203.32, "z": 14.06}], "right_lane_mark_type": "DASHED_WHITE", "successors": [42818528], "predecessors": [], "right_neighbor_id": 42820396, "left_neighbor_id": null}, "42819006": {"id": 42819006, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1590.73, "y": 190.34, "z": 14.47}, {"x": 1597.04, "y": 202.52, "z": 14.01}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1593.84, "y": 188.76, "z": 14.37}, {"x": 1599.88, "y": 201.47, "z": 13.96}], "right_lane_mark_type": "DASHED_WHITE", "successors": [42819649], "predecessors": [], "right_neighbor_id": 42819650, "left_neighbor_id": null}, "42819070": {"id": 42819070, "is_intersection": false, "lane_type": "BUS", "left_lane_boundary": [{"x": 1377.14, "y": 150.0, "z": 14.0}, {"x": 1382.0, "y": 159.55, "z": 13.74}], "left_lane_mark_type": "DASHED_WHITE", "right_lane_boundary": [{"x": 1380.87, "y": 150.0, "z": 13.95}, {"x": 1383.11, "y": 154.42, "z": 13.82}, {"x": 1384.98, "y": 158.11, "z": 13.75}], "right_lane_mark_type": "NONE", "successors": [42811887], "predecessors": [42819028], "right_neighbor_id": null, "left_neighbor_id": 42819068}, "42819224": {"id": 42819224, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1604.2, "y": 224.73, "z": 13.36}, {"x": 1593.93, "y": 204.21, "z": 14.02}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1601.14, "y": 226.04, "z": 13.24}, {"x": 1591.14, "y": 205.77, "z": 13.97}], "right_lane_mark_type": "DASHED_WHITE", "successors": [42818861], "predecessors": [42807779, 42809415], "right_neighbor_id": 42819444, "left_neighbor_id": 42818858}, "42819408": {"id": 42819408, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1590.0, "y": 188.91, "z": 14.52}, {"x": 1590.73, "y": 190.34, "z": 14.47}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1590.0, "y": 181.11, "z": 14.65}, {"x": 1593.84, "y": 188.76, "z": 14.37}], "right_lane_mark_type": "DASHED_WHITE", "successors": [42819006, 42819427], "predecessors": [42818516], "right_neighbor_id": 42819421, "left_neighbor_id": null}, "42819421": {"id": 42819421, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1590.0, "y": 181.11, "z": 14.65}, {"x": 1593.84, "y": 188.76, "z": 14.37}], "left_lane_mark_type": "DASHED_WHITE", "right_lane_boundary": [{"x": 1590.0, "y": 174.37, "z": 14.8}, {"x": 1596.83, "y": 187.23, "z": 14.42}], "right_lane_mark_type": "NONE", "successors": [42819650], "predecessors": [42818485], "right_neighbor_id": null, "left_neighbor_id": 42819408}, "42819427": {"id": 42819427, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1590.73, "y": 190.34, "z": 14.47}, {"x": 1593.93, "y": 204.21, "z": 14.02}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1593.84, "y": 188.76, "z": 14.37}, {"x": 1597.04, "y": 202.52, "z": 14.01}], "right_lane_mark_type": "NONE", "successors": [42818858], "predecessors": [42819408], "right_neighbor_id": null, "left_neighbor_id": null}, "42819444": {"id": 42819444, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1601.14, "y": 226.04, "z": 13.24}, {"x": 1591.14, "y": 205.77, "z": 13.97}], "left_lane_mark_type": "DASHED_WHITE", "right_lane_boundary": [{"x": 1598.06, "y": 227.53, "z": 13.19}, {"x": 1592.07, "y": 215.57, "z": 13.72}], "right_lane_mark_type": "NONE", "successors": [42820396], "predecessors": [42807338, 42809414], "right_neighbor_id": null, "left_neighbor_id": 42819224}, "42819648": {"id": 42819648, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1599.88, "y": 201.47, "z": 13.96}, {"x": 1610.52, "y": 222.0, "z": 13.42}], "left_lane_mark_type": "DASHED_WHITE", "right_lane_boundary": [{"x": 1603.28, "y": 200.19, "z": 13.98}, {"x": 1611.21, "y": 216.17, "z": 13.57}, {"x": 1611.3, "y": 216.25, "z": 13.57}, {"x": 1613.52, "y": 220.89, "z": 13.38}], "right_lane_mark_type": "NONE", "successors": [42807783, 42808640], "predecessors": [], "right_neighbor_id": null, "left_neighbor_id": 42819649}, "42819649": {"id": 42819649, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1597.04, "y": 202.52, "z": 14.01}, {"x": 1607.54, "y": 223.3, "z": 13.42}], "left_lane_mark_type": "SOLID_WHITE", "right_lane_boundary": [{"x": 1599.88, "y": 201.47, "z": 13.96}, {"x": 1610.52, "y": 222.0, "z": 13.42}], "right_lane_mark_type": "DASHED_WHITE", "successors": [42812208], "predecessors": [42819006], "right_neighbor_id": 42819648, "left_neighbor_id": 42818858}, "42819650": {"id": 42819650, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1593.84, "y": 188.76, "z": 14.37}, {"x": 1599.88, "y": 201.47, "z": 13.96}], "left_lane_mark_type": "DASHED_WHITE", "right_lane_boundary": [{"x": 1596.83, "y": 187.23, "z": 14.42}, {"x": 1603.28, "y": 200.19, "z": 13.98}], "right_lane_mark_type": "NONE", "successors": [42819648], "predecessors": [42819421], "right_neighbor_id": null, "left_neighbor_id": 42819006}, "42819897": {"id": 42819897, "is_intersection": true, "lane_type": "BUS", "left_lane_boundary": [{"x": 1601.93, "y": 249.85, "z": 12.6}, {"x": 1626.46, "y": 232.77, "z": 13.16}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1600.38, "y": 246.57, "z": 12.62}, {"x": 1600.81, "y": 246.38, "z": 12.62}, {"x": 1601.79, "y": 245.84, "z": 12.64}, {"x": 1607.17, "y": 241.21, "z": 12.83}, {"x": 1623.78, "y": 228.03, "z": 13.25}], "right_lane_mark_type": "NONE", "successors": [42819691], "predecessors": [42811336], "right_neighbor_id": 42807784, "left_neighbor_id": null}, "42820396": {"id": 42820396, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1591.14, "y": 205.77, "z": 13.97}, {"x": 1590.0, "y": 203.32, "z": 14.06}], "left_lane_mark_type": "DASHED_WHITE", "right_lane_boundary": [{"x": 1592.07, "y": 215.57, "z": 13.72}, {"x": 1590.0, "y": 211.38, "z": 13.85}], "right_lane_mark_type": "NONE", "successors": [42818027], "predecessors": [42819444], "right_neighbor_id": null, "left_neighbor_id": 42818861}, "42824232": {"id": 42824232, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1463.31, "y": 112.03, "z": 15.21}, {"x": 1462.27, "y": 110.1, "z": 15.27}, {"x": 1461.34, "y": 108.3, "z": 15.31}, {"x": 1460.49, "y": 106.6, "z": 15.37}, {"x": 1459.74, "y": 105.03, "z": 15.42}, {"x": 1459.07, "y": 103.55, "z": 15.48}, {"x": 1458.48, "y": 102.19, "z": 15.55}, {"x": 1457.97, "y": 100.92, "z": 15.62}, {"x": 1457.54, "y": 99.75, "z": 15.68}, {"x": 1457.19, "y": 98.66, "z": 15.74}, {"x": 1456.9, "y": 97.66, "z": 15.79}, {"x": 1456.69, "y": 96.74, "z": 15.82}, {"x": 1456.54, "y": 95.89, "z": 15.85}, {"x": 1456.45, "y": 95.12, "z": 15.86}, {"x": 1456.43, "y": 94.41, "z": 15.88}, {"x": 1456.46, "y": 93.76, "z": 15.9}, {"x": 1456.54, "y": 93.17, "z": 15.92}, {"x": 1456.68, "y": 92.63, "z": 15.94}, {"x": 1456.86, "y": 92.13, "z": 15.96}, {"x": 1457.09, "y": 91.68, "z": 15.97}, {"x": 1457.37, "y": 91.27, "z": 15.98}, {"x": 1457.68, "y": 90.88, "z": 16.0}, {"x": 1458.03, "y": 90.53, "z": 16.02}, {"x": 1458.41, "y": 90.2, "z": 16.03}, {"x": 1458.82, "y": 89.89, "z": 16.05}, {"x": 1459.27, "y": 89.59, "z": 16.07}, {"x": 1459.73, "y": 89.3, "z": 16.09}, {"x": 1460.22, "y": 89.02, "z": 16.11}, {"x": 1460.73, "y": 88.74, "z": 16.13}, {"x": 1461.26, "y": 88.45, "z": 16.16}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1458.26, "y": 114.47, "z": 15.23}, {"x": 1457.56, "y": 113.21, "z": 15.29}, {"x": 1456.9, "y": 111.97, "z": 15.31}, {"x": 1456.27, "y": 110.76, "z": 15.34}, {"x": 1455.68, "y": 109.58, "z": 15.39}, {"x": 1455.12, "y": 108.42, "z": 15.41}, {"x": 1454.6, "y": 107.29, "z": 15.44}, {"x": 1454.12, "y": 106.18, "z": 15.46}, {"x": 1453.68, "y": 105.1, "z": 15.49}, {"x": 1453.28, "y": 104.05, "z": 15.53}, {"x": 1452.92, "y": 103.02, "z": 15.56}, {"x": 1452.6, "y": 102.02, "z": 15.6}, {"x": 1452.32, "y": 101.04, "z": 15.63}, {"x": 1452.08, "y": 100.09, "z": 15.66}, {"x": 1451.89, "y": 99.17, "z": 15.7}, {"x": 1451.73, "y": 98.27, "z": 15.72}, {"x": 1451.62, "y": 97.4, "z": 15.75}, {"x": 1451.56, "y": 96.55, "z": 15.78}, {"x": 1451.54, "y": 95.73, "z": 15.81}, {"x": 1451.57, "y": 94.93, "z": 15.84}, {"x": 1451.64, "y": 94.16, "z": 15.86}, {"x": 1451.76, "y": 93.41, "z": 15.88}, {"x": 1451.93, "y": 92.69, "z": 15.89}, {"x": 1452.15, "y": 91.99, "z": 15.91}, {"x": 1452.41, "y": 91.32, "z": 15.92}, {"x": 1452.73, "y": 90.67, "z": 15.93}, {"x": 1453.1, "y": 90.05, "z": 15.95}, {"x": 1453.51, "y": 89.45, "z": 15.96}, {"x": 1453.98, "y": 88.87, "z": 15.98}, {"x": 1454.5, "y": 88.32, "z": 16.0}, {"x": 1455.08, "y": 87.8, "z": 16.02}, {"x": 1455.71, "y": 87.3, "z": 16.05}, {"x": 1456.39, "y": 86.82, "z": 16.08}, {"x": 1457.13, "y": 86.37, "z": 16.11}, {"x": 1457.92, "y": 85.94, "z": 16.14}, {"x": 1458.77, "y": 85.54, "z": 16.17}, {"x": 1459.68, "y": 85.16, "z": 16.21}], "right_lane_mark_type": "NONE", "successors": [42816194], "predecessors": [42816397], "right_neighbor_id": null, "left_neighbor_id": null}, "42824242": {"id": 42824242, "is_intersection": true, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1463.31, "y": 112.03, "z": 15.21}, {"x": 1459.27, "y": 103.93, "z": 15.47}, {"x": 1453.23, "y": 85.61, "z": 15.99}, {"x": 1451.4, "y": 81.91, "z": 16.03}, {"x": 1451.29, "y": 81.75, "z": 16.04}, {"x": 1451.06, "y": 81.23, "z": 16.06}, {"x": 1450.88, "y": 80.87, "z": 16.07}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1458.26, "y": 114.47, "z": 15.23}, {"x": 1449.17, "y": 90.16, "z": 15.92}, {"x": 1447.98, "y": 87.6, "z": 15.93}, {"x": 1445.72, "y": 83.34, "z": 16.0}], "right_lane_mark_type": "NONE", "successors": [42816930], "predecessors": [42816397], "right_neighbor_id": null, "left_neighbor_id": null}, "42844999": {"id": 42844999, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1440.0, "y": 254.41, "z": 12.34}, {"x": 1335.34, "y": 216.37, "z": 11.87}], "left_lane_mark_type": "NONE", "right_lane_boundary": [{"x": 1440.0, "y": 259.66, "z": 12.34}, {"x": 1345.44, "y": 225.97, "z": 11.93}, {"x": 1341.17, "y": 223.11, "z": 11.94}, {"x": 1333.78, "y": 220.55, "z": 11.84}], "right_lane_mark_type": "NONE", "successors": [42845550, 42844132, 42845365], "predecessors": [42806482], "right_neighbor_id": null, "left_neighbor_id": null}, "42915538": {"id": 42915538, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1581.88, "y": 255.77, "z": 12.55}, {"x": 1582.93, "y": 255.89, "z": 12.56}, {"x": 1587.1, "y": 255.94, "z": 12.55}, {"x": 1590.0, "y": 255.85, "z": 12.58}], "left_lane_mark_type": "SOLID_YELLOW", "right_lane_boundary": [{"x": 1582.28, "y": 252.36, "z": 12.54}, {"x": 1583.6, "y": 252.49, "z": 12.52}, {"x": 1586.31, "y": 252.69, "z": 12.52}, {"x": 1590.0, "y": 252.59, "z": 12.54}], "right_lane_mark_type": "SOLID_WHITE", "successors": [42811541], "predecessors": [42807643], "right_neighbor_id": 42915544, "left_neighbor_id": null}, "42915541": {"id": 42915541, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1580.4, "y": 259.57, "z": 12.52}, {"x": 1578.6, "y": 259.01, "z": 12.49}, {"x": 1576.57, "y": 258.32, "z": 12.49}], "left_lane_mark_type": "SOLID_WHITE", "right_lane_boundary": [{"x": 1579.09, "y": 262.87, "z": 12.45}, {"x": 1575.47, "y": 261.72, "z": 12.46}], "right_lane_mark_type": "NONE", "successors": [42811323], "predecessors": [42811882], "right_neighbor_id": null, "left_neighbor_id": 42915647}, "42915544": {"id": 42915544, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1582.28, "y": 252.36, "z": 12.54}, {"x": 1583.6, "y": 252.49, "z": 12.52}, {"x": 1586.31, "y": 252.69, "z": 12.52}, {"x": 1590.0, "y": 252.59, "z": 12.54}], "left_lane_mark_type": "SOLID_WHITE", "right_lane_boundary": [{"x": 1582.22, "y": 249.21, "z": 12.51}, {"x": 1585.19, "y": 249.46, "z": 12.52}, {"x": 1587.7, "y": 249.4, "z": 12.52}, {"x": 1590.0, "y": 249.27, "z": 12.54}], "right_lane_mark_type": "SOLID_WHITE", "successors": [42811336], "predecessors": [42812483], "right_neighbor_id": 42915650, "left_neighbor_id": 42915538}, "42915647": {"id": 42915647, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1581.47, "y": 256.42, "z": 12.53}, {"x": 1577.64, "y": 255.23, "z": 12.55}], "left_lane_mark_type": "DOUBLE_SOLID_YELLOW", "right_lane_boundary": [{"x": 1580.4, "y": 259.57, "z": 12.52}, {"x": 1578.6, "y": 259.01, "z": 12.49}, {"x": 1576.57, "y": 258.32, "z": 12.49}], "right_lane_mark_type": "SOLID_WHITE", "successors": [42811283], "predecessors": [42810830], "right_neighbor_id": 42915541, "left_neighbor_id": null}, "42915650": {"id": 42915650, "is_intersection": false, "lane_type": "VEHICLE", "left_lane_boundary": [{"x": 1582.22, "y": 249.21, "z": 12.51}, {"x": 1585.19, "y": 249.46, "z": 12.52}, {"x": 1587.7, "y": 249.4, "z": 12.52}, {"x": 1590.0, "y": 249.27, "z": 12.54}], "left_lane_mark_type": "SOLID_WHITE", "right_lane_boundary": [{"x": 1582.72, "y": 245.79, "z": 12.49}, {"x": 1584.98, "y": 245.94, "z": 12.47}, {"x": 1586.49, "y": 246.04, "z": 12.48}, {"x": 1588.1, "y": 246.04, "z": 12.49}, {"x": 1590.0, "y": 245.99, "z": 12.5}], "right_lane_mark_type": "NONE", "successors": [42811683], "predecessors": [42812494], "right_neighbor_id": null, "left_neighbor_id": 42915544}}, "drivable_areas": {"1414553": {"area_boundary": [{"x": 1438.32, "y": 309.98, "z": 11.66}, {"x": 1435.32, "y": 308.93, "z": 11.72}, {"x": 1434.84, "y": 308.82, "z": 11.72}, {"x": 1434.46, "y": 309.0, "z": 11.72}, {"x": 1433.96, "y": 309.56, "z": 11.74}, {"x": 1433.66, "y": 310.11, "z": 11.76}, {"x": 1432.17, "y": 314.1, "z": 11.81}, {"x": 1429.07, "y": 312.96, "z": 11.86}, {"x": 1430.66, "y": 308.91, "z": 11.77}, {"x": 1430.71, "y": 308.26, "z": 11.74}, {"x": 1430.46, "y": 307.51, "z": 11.7}, {"x": 1430.06, "y": 307.06, "z": 11.67}, {"x": 1393.68, "y": 294.05, "z": 11.84}, {"x": 1383.47, "y": 290.42, "z": 11.92}, {"x": 1375.03, "y": 287.39, "z": 11.94}, {"x": 1374.47, "y": 287.39, "z": 11.98}, {"x": 1374.02, "y": 287.69, "z": 12.05}, {"x": 1366.23, "y": 309.92, "z": 11.78}, {"x": 1360.78, "y": 309.87, "z": 11.78}, {"x": 1369.55, "y": 286.46, "z": 12.04}, {"x": 1369.67, "y": 286.05, "z": 12.0}, {"x": 1369.63, "y": 285.63, "z": 11.97}, {"x": 1369.42, "y": 285.38, "z": 11.95}, {"x": 1350.0, "y": 278.42, "z": 12.11}, {"x": 1350.0, "y": 271.6, "z": 12.15}, {"x": 1413.62, "y": 294.08, "z": 11.81}, {"x": 1414.0, "y": 294.08, "z": 11.8}, {"x": 1414.12, "y": 293.72, "z": 11.8}, {"x": 1413.86, "y": 293.52, "z": 11.8}, {"x": 1350.0, "y": 270.81, "z": 12.15}, {"x": 1350.0, "y": 267.65, "z": 12.14}, {"x": 1422.66, "y": 293.43, "z": 11.79}, {"x": 1423.16, "y": 293.53, "z": 11.79}, {"x": 1423.76, "y": 293.38, "z": 11.8}, {"x": 1424.26, "y": 292.88, "z": 11.86}, {"x": 1425.26, "y": 290.03, "z": 12.07}, {"x": 1427.75, "y": 290.87, "z": 12.11}, {"x": 1426.85, "y": 293.57, "z": 11.91}, {"x": 1426.75, "y": 294.32, "z": 11.82}, {"x": 1427.0, "y": 294.87, "z": 11.73}, {"x": 1427.5, "y": 295.17, "z": 11.78}, {"x": 1440.0, "y": 299.62, "z": 11.73}, {"x": 1440.0, "y": 302.96, "z": 11.71}, {"x": 1428.29, "y": 298.73, "z": 11.76}, {"x": 1427.93, "y": 298.71, "z": 11.76}, {"x": 1427.83, "y": 298.97, "z": 11.76}, {"x": 1428.08, "y": 299.21, "z": 11.76}, {"x": 1440.0, "y": 303.5, "z": 11.71}, {"x": 1440.0, "y": 310.44, "z": 11.6}], "id": 1414553}, "1414512": {"area_boundary": [{"x": 1590.0, "y": 173.38, "z": 14.91}, {"x": 1580.19, "y": 153.78, "z": 15.57}, {"x": 1563.47, "y": 120.0, "z": 16.81}, {"x": 1544.61, "y": 120.0, "z": 17.14}, {"x": 1561.61, "y": 154.32, "z": 15.86}, {"x": 1567.7, "y": 166.73, "z": 15.39}, {"x": 1575.97, "y": 183.16, "z": 14.75}, {"x": 1581.99, "y": 179.85, "z": 14.91}, {"x": 1582.15, "y": 179.3, "z": 14.95}, {"x": 1582.66, "y": 178.94, "z": 15.0}, {"x": 1583.65, "y": 178.46, "z": 15.01}, {"x": 1584.12, "y": 178.36, "z": 15.0}, {"x": 1584.52, "y": 178.44, "z": 14.95}], "id": 1414512}, "1414238": {"area_boundary": [{"x": 1392.34, "y": 196.78, "z": 12.86}, {"x": 1384.48, "y": 193.95, "z": 12.94}, {"x": 1377.31, "y": 191.42, "z": 12.99}, {"x": 1369.56, "y": 188.71, "z": 13.02}, {"x": 1361.95, "y": 186.04, "z": 13.04}, {"x": 1349.77, "y": 181.64, "z": 13.18}, {"x": 1348.73, "y": 181.3, "z": 13.16}, {"x": 1348.1, "y": 181.18, "z": 13.15}, {"x": 1347.51, "y": 181.17, "z": 13.15}, {"x": 1346.82, "y": 181.28, "z": 13.14}, {"x": 1346.31, "y": 181.44, "z": 13.13}, {"x": 1345.78, "y": 181.81, "z": 13.11}, {"x": 1345.35, "y": 182.11, "z": 13.1}, {"x": 1344.94, "y": 182.48, "z": 13.12}, {"x": 1344.53, "y": 182.92, "z": 13.11}, {"x": 1344.08, "y": 183.81, "z": 13.12}, {"x": 1338.87, "y": 198.96, "z": 12.82}, {"x": 1333.33, "y": 214.07, "z": 11.99}, {"x": 1333.15, "y": 214.63, "z": 11.95}, {"x": 1333.18, "y": 215.09, "z": 11.92}, {"x": 1333.41, "y": 215.53, "z": 11.9}, {"x": 1333.81, "y": 215.81, "z": 11.88}, {"x": 1440.0, "y": 254.41, "z": 12.34}, {"x": 1440.0, "y": 259.66, "z": 12.34}, {"x": 1345.39, "y": 225.95, "z": 11.93}, {"x": 1341.34, "y": 223.28, "z": 11.94}, {"x": 1341.02, "y": 223.11, "z": 11.94}, {"x": 1332.37, "y": 220.05, "z": 11.85}, {"x": 1331.73, "y": 220.08, "z": 11.86}, {"x": 1331.17, "y": 220.29, "z": 11.87}, {"x": 1330.83, "y": 220.63, "z": 11.87}, {"x": 1330.58, "y": 221.11, "z": 11.87}, {"x": 1323.76, "y": 240.0, "z": 12.39}, {"x": 1319.9, "y": 240.0, "z": 12.33}, {"x": 1327.05, "y": 220.67, "z": 11.88}, {"x": 1327.21, "y": 220.08, "z": 11.87}, {"x": 1327.23, "y": 219.59, "z": 11.87}, {"x": 1326.97, "y": 219.14, "z": 11.87}, {"x": 1326.58, "y": 218.89, "z": 11.91}, {"x": 1324.86, "y": 218.32, "z": 11.95}, {"x": 1323.85, "y": 218.74, "z": 12.03}, {"x": 1303.83, "y": 211.69, "z": 12.58}, {"x": 1303.27, "y": 211.56, "z": 12.61}, {"x": 1302.86, "y": 211.58, "z": 12.64}, {"x": 1302.45, "y": 211.99, "z": 12.69}, {"x": 1300.17, "y": 218.52, "z": 12.86}, {"x": 1293.24, "y": 215.78, "z": 12.92}, {"x": 1295.6, "y": 209.52, "z": 12.83}, {"x": 1295.72, "y": 209.05, "z": 12.81}, {"x": 1295.68, "y": 208.39, "z": 12.81}, {"x": 1295.37, "y": 207.92, "z": 12.82}, {"x": 1294.37, "y": 207.42, "z": 12.83}, {"x": 1290.0, "y": 205.85, "z": 12.88}, {"x": 1290.0, "y": 199.75, "z": 12.94}, {"x": 1297.97, "y": 202.47, "z": 12.87}, {"x": 1298.48, "y": 202.4, "z": 12.88}, {"x": 1298.77, "y": 202.08, "z": 12.92}, {"x": 1299.75, "y": 199.93, "z": 12.89}, {"x": 1302.51, "y": 192.16, "z": 12.9}, {"x": 1311.95, "y": 195.77, "z": 12.74}, {"x": 1308.67, "y": 204.92, "z": 12.76}, {"x": 1308.8, "y": 205.51, "z": 12.69}, {"x": 1309.14, "y": 205.98, "z": 12.62}, {"x": 1328.34, "y": 212.97, "z": 11.98}, {"x": 1328.78, "y": 213.02, "z": 11.97}, {"x": 1329.18, "y": 212.9, "z": 11.97}, {"x": 1329.43, "y": 212.5, "z": 11.99}, {"x": 1334.97, "y": 197.73, "z": 12.72}, {"x": 1340.04, "y": 183.05, "z": 13.03}, {"x": 1340.45, "y": 181.63, "z": 13.1}, {"x": 1340.66, "y": 180.73, "z": 13.1}, {"x": 1340.64, "y": 180.13, "z": 13.13}, {"x": 1340.62, "y": 179.39, "z": 13.15}, {"x": 1340.42, "y": 178.9, "z": 13.18}, {"x": 1339.98, "y": 178.45, "z": 13.2}, {"x": 1339.26, "y": 177.95, "z": 13.24}, {"x": 1337.92, "y": 177.3, "z": 13.22}, {"x": 1328.17, "y": 173.94, "z": 13.39}, {"x": 1312.63, "y": 168.41, "z": 13.54}, {"x": 1290.0, "y": 160.66, "z": 13.73}, {"x": 1290.0, "y": 142.72, "z": 13.91}, {"x": 1311.18, "y": 150.0, "z": 13.81}, {"x": 1312.12, "y": 150.22, "z": 13.81}, {"x": 1312.88, "y": 150.29, "z": 13.8}, {"x": 1313.51, "y": 150.24, "z": 13.8}, {"x": 1314.22, "y": 150.15, "z": 13.8}, {"x": 1314.84, "y": 149.99, "z": 13.8}, {"x": 1315.69, "y": 149.72, "z": 13.83}, {"x": 1316.65, "y": 149.38, "z": 13.86}, {"x": 1317.45, "y": 149.08, "z": 13.85}, {"x": 1318.35, "y": 148.63, "z": 13.86}, {"x": 1321.01, "y": 147.39, "z": 13.92}, {"x": 1350.0, "y": 133.71, "z": 14.28}, {"x": 1350.0, "y": 145.18, "z": 13.96}, {"x": 1335.61, "y": 152.28, "z": 13.78}, {"x": 1334.91, "y": 152.98, "z": 13.81}, {"x": 1334.49, "y": 153.75, "z": 13.78}, {"x": 1334.21, "y": 154.46, "z": 13.75}, {"x": 1334.07, "y": 155.03, "z": 13.73}, {"x": 1334.04, "y": 155.62, "z": 13.69}, {"x": 1334.07, "y": 156.24, "z": 13.67}, {"x": 1334.15, "y": 156.79, "z": 13.66}, {"x": 1334.36, "y": 157.25, "z": 13.66}, {"x": 1334.68, "y": 157.75, "z": 13.65}, {"x": 1335.08, "y": 158.2, "z": 13.64}, {"x": 1335.63, "y": 158.54, "z": 13.65}, {"x": 1336.58, "y": 158.94, "z": 13.65}, {"x": 1341.06, "y": 160.53, "z": 13.61}, {"x": 1351.0, "y": 164.11, "z": 13.51}, {"x": 1371.55, "y": 171.4, "z": 13.26}, {"x": 1372.77, "y": 171.77, "z": 13.21}, {"x": 1373.66, "y": 171.96, "z": 13.18}, {"x": 1374.17, "y": 171.99, "z": 13.18}, {"x": 1374.75, "y": 171.85, "z": 13.19}, {"x": 1375.29, "y": 171.62, "z": 13.2}, {"x": 1375.89, "y": 171.3, "z": 13.23}, {"x": 1376.22, "y": 170.96, "z": 13.25}, {"x": 1376.6, "y": 170.49, "z": 13.29}, {"x": 1376.94, "y": 169.98, "z": 13.31}, {"x": 1377.19, "y": 169.46, "z": 13.35}, {"x": 1377.31, "y": 168.98, "z": 13.4}, {"x": 1377.4, "y": 168.36, "z": 13.42}, {"x": 1377.43, "y": 167.74, "z": 13.45}, {"x": 1377.4, "y": 166.99, "z": 13.48}, {"x": 1376.98, "y": 166.21, "z": 13.48}, {"x": 1375.01, "y": 162.54, "z": 13.61}, {"x": 1368.79, "y": 150.0, "z": 13.93}, {"x": 1380.87, "y": 150.0, "z": 13.95}, {"x": 1392.14, "y": 172.24, "z": 13.42}, {"x": 1393.63, "y": 175.46, "z": 13.31}, {"x": 1394.21, "y": 176.57, "z": 13.27}, {"x": 1394.64, "y": 177.37, "z": 13.24}, {"x": 1395.18, "y": 178.16, "z": 13.19}, {"x": 1395.66, "y": 178.81, "z": 13.16}, {"x": 1396.11, "y": 179.33, "z": 13.14}, {"x": 1396.73, "y": 179.82, "z": 13.13}, {"x": 1397.6, "y": 180.36, "z": 13.15}, {"x": 1398.49, "y": 180.83, "z": 13.15}, {"x": 1399.49, "y": 181.32, "z": 13.16}, {"x": 1406.41, "y": 183.91, "z": 13.07}, {"x": 1412.46, "y": 186.03, "z": 13.05}, {"x": 1417.58, "y": 187.91, "z": 13.02}, {"x": 1431.82, "y": 192.95, "z": 12.99}, {"x": 1440.0, "y": 195.77, "z": 12.95}, {"x": 1440.0, "y": 213.68, "z": 12.74}], "id": 1414238}, "1413643": {"area_boundary": [{"x": 1498.81, "y": 240.0, "z": 12.25}, {"x": 1498.87, "y": 239.86, "z": 12.25}, {"x": 1499.35, "y": 238.93, "z": 12.2}, {"x": 1499.85, "y": 238.13, "z": 12.19}, {"x": 1500.57, "y": 237.15, "z": 12.16}, {"x": 1501.25, "y": 236.58, "z": 12.17}, {"x": 1502.11, "y": 236.28, "z": 12.19}, {"x": 1503.28, "y": 236.29, "z": 12.21}, {"x": 1504.59, "y": 236.65, "z": 12.23}, {"x": 1507.21, "y": 237.51, "z": 12.27}, {"x": 1575.51, "y": 261.94, "z": 12.47}, {"x": 1578.27, "y": 262.85, "z": 12.46}, {"x": 1580.38, "y": 263.48, "z": 12.46}, {"x": 1583.23, "y": 264.11, "z": 12.53}, {"x": 1585.56, "y": 264.48, "z": 12.55}, {"x": 1588.15, "y": 264.78, "z": 12.53}, {"x": 1590.0, "y": 264.73, "z": 12.52}, {"x": 1590.0, "y": 257.54, "z": 12.58}, {"x": 1588.84, "y": 257.3, "z": 12.6}, {"x": 1587.9, "y": 257.26, "z": 12.62}, {"x": 1586.67, "y": 257.19, "z": 12.61}, {"x": 1585.11, "y": 257.02, "z": 12.56}, {"x": 1583.7, "y": 256.8, "z": 12.53}, {"x": 1583.01, "y": 256.65, "z": 12.52}, {"x": 1582.51, "y": 256.55, "z": 12.53}, {"x": 1582.35, "y": 256.18, "z": 12.54}, {"x": 1582.51, "y": 256.02, "z": 12.55}, {"x": 1583.04, "y": 255.98, "z": 12.56}, {"x": 1583.91, "y": 256.09, "z": 12.56}, {"x": 1584.84, "y": 256.18, "z": 12.55}, {"x": 1586.41, "y": 256.27, "z": 12.57}, {"x": 1588.22, "y": 256.24, "z": 12.57}, {"x": 1590.0, "y": 256.06, "z": 12.58}, {"x": 1590.0, "y": 245.82, "z": 12.51}, {"x": 1587.36, "y": 245.81, "z": 12.51}, {"x": 1584.72, "y": 245.71, "z": 12.5}, {"x": 1582.3, "y": 245.51, "z": 12.51}, {"x": 1579.85, "y": 245.11, "z": 12.48}, {"x": 1576.17, "y": 244.11, "z": 12.46}, {"x": 1573.64, "y": 243.15, "z": 12.47}, {"x": 1565.35, "y": 240.13, "z": 12.49}, {"x": 1558.3, "y": 237.65, "z": 12.51}, {"x": 1553.2, "y": 235.92, "z": 12.5}, {"x": 1541.62, "y": 231.8, "z": 12.52}, {"x": 1527.48, "y": 226.8, "z": 12.55}, {"x": 1519.5, "y": 223.94, "z": 12.59}, {"x": 1512.17, "y": 221.39, "z": 12.64}, {"x": 1510.84, "y": 220.83, "z": 12.59}, {"x": 1510.04, "y": 220.32, "z": 12.62}, {"x": 1509.11, "y": 219.27, "z": 12.59}, {"x": 1508.69, "y": 218.42, "z": 12.61}, {"x": 1508.34, "y": 217.48, "z": 12.63}, {"x": 1508.1, "y": 216.32, "z": 12.67}, {"x": 1508.2, "y": 214.97, "z": 12.69}, {"x": 1508.68, "y": 213.37, "z": 12.76}, {"x": 1509.93, "y": 209.72, "z": 12.81}, {"x": 1510.72, "y": 205.33, "z": 12.86}, {"x": 1510.84, "y": 203.49, "z": 12.86}, {"x": 1510.76, "y": 201.83, "z": 12.9}, {"x": 1510.54, "y": 200.8, "z": 12.92}, {"x": 1510.21, "y": 199.33, "z": 12.94}, {"x": 1509.74, "y": 197.55, "z": 13.01}, {"x": 1509.1, "y": 195.94, "z": 12.96}, {"x": 1508.46, "y": 194.49, "z": 13.0}, {"x": 1507.61, "y": 192.79, "z": 12.99}, {"x": 1505.37, "y": 188.48, "z": 13.03}, {"x": 1497.47, "y": 173.06, "z": 13.44}, {"x": 1483.76, "y": 145.76, "z": 14.12}, {"x": 1470.79, "y": 120.0, "z": 14.92}, {"x": 1460.69, "y": 120.0, "z": 15.1}, {"x": 1496.18, "y": 190.69, "z": 13.13}, {"x": 1498.52, "y": 195.13, "z": 13.03}, {"x": 1498.86, "y": 196.25, "z": 12.98}, {"x": 1499.02, "y": 197.29, "z": 12.97}, {"x": 1499.14, "y": 198.38, "z": 12.95}, {"x": 1499.18, "y": 199.59, "z": 12.92}, {"x": 1498.98, "y": 200.66, "z": 12.9}, {"x": 1498.68, "y": 201.79, "z": 12.89}, {"x": 1497.22, "y": 205.87, "z": 12.83}, {"x": 1494.89, "y": 211.71, "z": 12.72}, {"x": 1494.44, "y": 212.59, "z": 12.69}, {"x": 1494.05, "y": 213.16, "z": 12.66}, {"x": 1493.66, "y": 213.56, "z": 12.65}, {"x": 1492.88, "y": 213.9, "z": 12.64}, {"x": 1491.96, "y": 214.1, "z": 12.64}, {"x": 1491.21, "y": 214.1, "z": 12.67}, {"x": 1490.04, "y": 213.75, "z": 12.66}, {"x": 1461.88, "y": 203.58, "z": 12.83}, {"x": 1440.0, "y": 195.77, "z": 12.95}, {"x": 1440.0, "y": 213.68, "z": 12.74}, {"x": 1442.88, "y": 214.67, "z": 12.71}, {"x": 1457.91, "y": 220.15, "z": 12.58}, {"x": 1480.64, "y": 228.14, "z": 12.48}, {"x": 1484.64, "y": 229.59, "z": 12.46}, {"x": 1485.78, "y": 230.29, "z": 12.42}, {"x": 1486.56, "y": 231.06, "z": 12.4}, {"x": 1486.87, "y": 231.62, "z": 12.4}, {"x": 1487.01, "y": 232.36, "z": 12.39}, {"x": 1487.07, "y": 233.38, "z": 12.37}, {"x": 1486.35, "y": 235.74, "z": 12.31}, {"x": 1486.17, "y": 236.84, "z": 12.26}, {"x": 1486.58, "y": 237.22, "z": 12.25}, {"x": 1487.14, "y": 237.44, "z": 12.25}, {"x": 1487.52, "y": 237.89, "z": 12.25}, {"x": 1487.4, "y": 238.71, "z": 12.24}, {"x": 1486.95, "y": 240.0, "z": 12.23}], "id": 1413643}, "1413634": {"area_boundary": [{"x": 1590.0, "y": 211.38, "z": 13.85}, {"x": 1575.97, "y": 183.16, "z": 14.75}, {"x": 1581.99, "y": 179.85, "z": 14.91}, {"x": 1586.92, "y": 189.67, "z": 14.53}, {"x": 1587.17, "y": 190.02, "z": 14.53}, {"x": 1587.33, "y": 190.29, "z": 14.53}, {"x": 1587.63, "y": 190.46, "z": 14.54}, {"x": 1588.06, "y": 190.46, "z": 14.55}, {"x": 1588.49, "y": 190.3, "z": 14.55}, {"x": 1589.02, "y": 189.95, "z": 14.54}, {"x": 1589.64, "y": 189.33, "z": 14.52}, {"x": 1589.72, "y": 188.82, "z": 14.52}, {"x": 1589.12, "y": 187.33, "z": 14.54}, {"x": 1588.16, "y": 185.36, "z": 14.63}, {"x": 1586.34, "y": 181.79, "z": 14.74}, {"x": 1585.04, "y": 179.02, "z": 14.89}, {"x": 1584.52, "y": 178.44, "z": 14.95}, {"x": 1590.0, "y": 173.38, "z": 14.91}], "id": 1413634}, "1413633": {"area_boundary": [{"x": 1590.0, "y": 264.73, "z": 12.52}, {"x": 1591.67, "y": 264.68, "z": 12.55}, {"x": 1593.01, "y": 264.62, "z": 12.57}, {"x": 1595.08, "y": 264.43, "z": 12.53}, {"x": 1596.55, "y": 264.26, "z": 12.5}, {"x": 1598.03, "y": 263.93, "z": 12.51}, {"x": 1599.41, "y": 263.49, "z": 12.5}, {"x": 1600.88, "y": 263.08, "z": 12.49}, {"x": 1602.31, "y": 262.78, "z": 12.5}, {"x": 1604.25, "y": 262.46, "z": 12.46}, {"x": 1605.74, "y": 262.31, "z": 12.43}, {"x": 1607.13, "y": 262.28, "z": 12.4}, {"x": 1608.49, "y": 262.36, "z": 12.37}, {"x": 1610.86, "y": 262.7, "z": 12.35}, {"x": 1612.82, "y": 263.17, "z": 12.24}, {"x": 1615.34, "y": 263.94, "z": 12.16}, {"x": 1617.53, "y": 264.95, "z": 12.15}, {"x": 1619.91, "y": 266.12, "z": 12.04}, {"x": 1620.99, "y": 266.92, "z": 12.04}, {"x": 1622.44, "y": 268.07, "z": 12.01}, {"x": 1624.51, "y": 270.21, "z": 11.93}, {"x": 1626.17, "y": 272.15, "z": 11.86}, {"x": 1627.97, "y": 274.05, "z": 11.77}, {"x": 1629.32, "y": 275.71, "z": 11.75}, {"x": 1630.41, "y": 277.23, "z": 11.68}, {"x": 1631.18, "y": 278.74, "z": 11.6}, {"x": 1637.69, "y": 273.82, "z": 11.65}, {"x": 1629.84, "y": 265.18, "z": 12.0}, {"x": 1628.48, "y": 263.56, "z": 12.12}, {"x": 1627.89, "y": 262.77, "z": 12.13}, {"x": 1627.57, "y": 262.21, "z": 12.16}, {"x": 1627.64, "y": 261.79, "z": 12.18}, {"x": 1628.1, "y": 261.52, "z": 12.18}, {"x": 1628.43, "y": 261.7, "z": 12.16}, {"x": 1630.65, "y": 263.94, "z": 12.05}, {"x": 1632.1, "y": 265.48, "z": 12.01}, {"x": 1635.29, "y": 268.63, "z": 11.87}, {"x": 1637.77, "y": 271.06, "z": 11.69}, {"x": 1639.47, "y": 272.79, "z": 11.68}, {"x": 1647.84, "y": 266.32, "z": 11.48}, {"x": 1642.93, "y": 261.53, "z": 11.74}, {"x": 1638.03, "y": 256.67, "z": 12.04}, {"x": 1634.57, "y": 253.21, "z": 12.27}, {"x": 1633.62, "y": 251.96, "z": 12.33}, {"x": 1633.15, "y": 251.06, "z": 12.31}, {"x": 1632.72, "y": 249.91, "z": 12.34}, {"x": 1632.5, "y": 248.56, "z": 12.42}, {"x": 1632.35, "y": 247.15, "z": 12.55}, {"x": 1632.43, "y": 245.82, "z": 12.64}, {"x": 1632.69, "y": 244.7, "z": 12.72}, {"x": 1633.27, "y": 243.23, "z": 12.76}, {"x": 1633.85, "y": 242.18, "z": 12.86}, {"x": 1634.58, "y": 241.16, "z": 12.91}, {"x": 1636.16, "y": 239.59, "z": 13.04}, {"x": 1640.02, "y": 236.68, "z": 13.32}, {"x": 1635.0, "y": 230.45, "z": 13.56}, {"x": 1632.85, "y": 231.92, "z": 13.31}, {"x": 1630.54, "y": 233.48, "z": 13.17}, {"x": 1628.8, "y": 234.61, "z": 13.09}, {"x": 1627.84, "y": 235.15, "z": 13.03}, {"x": 1626.97, "y": 235.15, "z": 13.05}, {"x": 1626.4, "y": 234.83, "z": 13.04}, {"x": 1626.0, "y": 234.2, "z": 13.09}, {"x": 1625.99, "y": 233.58, "z": 13.1}, {"x": 1626.52, "y": 232.8, "z": 13.17}, {"x": 1630.82, "y": 230.01, "z": 13.39}, {"x": 1633.11, "y": 228.6, "z": 13.51}, {"x": 1629.11, "y": 220.1, "z": 13.55}, {"x": 1620.6, "y": 222.83, "z": 13.3}, {"x": 1619.55, "y": 222.98, "z": 13.29}, {"x": 1618.89, "y": 223.03, "z": 13.3}, {"x": 1618.18, "y": 222.84, "z": 13.31}, {"x": 1617.85, "y": 222.32, "z": 13.35}, {"x": 1617.88, "y": 221.8, "z": 13.39}, {"x": 1618.39, "y": 221.36, "z": 13.48}, {"x": 1619.36, "y": 220.67, "z": 13.52}, {"x": 1623.21, "y": 218.81, "z": 13.01}, {"x": 1620.66, "y": 213.17, "z": 13.32}, {"x": 1615.54, "y": 215.28, "z": 13.78}, {"x": 1612.16, "y": 216.55, "z": 13.62}, {"x": 1611.63, "y": 216.52, "z": 13.58}, {"x": 1611.21, "y": 216.17, "z": 13.57}, {"x": 1607.86, "y": 209.45, "z": 13.72}, {"x": 1590.0, "y": 173.38, "z": 14.91}, {"x": 1590.0, "y": 211.38, "z": 13.85}, {"x": 1599.76, "y": 231.0, "z": 13.04}, {"x": 1600.38, "y": 233.07, "z": 13.02}, {"x": 1600.52, "y": 235.09, "z": 12.92}, {"x": 1600.44, "y": 236.58, "z": 12.85}, {"x": 1600.06, "y": 238.2, "z": 12.82}, {"x": 1599.41, "y": 239.96, "z": 12.81}, {"x": 1598.53, "y": 241.38, "z": 12.74}, {"x": 1597.79, "y": 242.25, "z": 12.71}, {"x": 1596.68, "y": 243.36, "z": 12.67}, {"x": 1595.61, "y": 244.14, "z": 12.65}, {"x": 1594.58, "y": 244.74, "z": 12.63}, {"x": 1593.31, "y": 245.28, "z": 12.61}, {"x": 1592.05, "y": 245.61, "z": 12.57}, {"x": 1590.0, "y": 245.82, "z": 12.51}, {"x": 1590.0, "y": 256.06, "z": 12.58}, {"x": 1591.2, "y": 255.96, "z": 12.61}, {"x": 1592.42, "y": 255.82, "z": 12.63}, {"x": 1594.39, "y": 255.6, "z": 12.63}, {"x": 1595.86, "y": 255.34, "z": 12.6}, {"x": 1597.51, "y": 255.08, "z": 12.64}, {"x": 1598.8, "y": 254.82, "z": 12.67}, {"x": 1600.15, "y": 254.45, "z": 12.64}, {"x": 1601.46, "y": 254.08, "z": 12.66}, {"x": 1602.92, "y": 253.57, "z": 12.65}, {"x": 1603.71, "y": 253.29, "z": 12.63}, {"x": 1604.34, "y": 253.03, "z": 12.63}, {"x": 1604.68, "y": 252.99, "z": 12.58}, {"x": 1604.93, "y": 253.09, "z": 12.57}, {"x": 1604.99, "y": 253.33, "z": 12.57}, {"x": 1604.91, "y": 253.66, "z": 12.56}, {"x": 1604.63, "y": 253.93, "z": 12.58}, {"x": 1603.69, "y": 254.58, "z": 12.59}, {"x": 1601.83, "y": 255.61, "z": 12.61}, {"x": 1600.8, "y": 256.01, "z": 12.57}, {"x": 1599.55, "y": 256.29, "z": 12.6}, {"x": 1598.34, "y": 256.58, "z": 12.6}, {"x": 1595.41, "y": 257.0, "z": 12.58}, {"x": 1593.85, "y": 257.25, "z": 12.6}, {"x": 1591.66, "y": 257.44, "z": 12.6}, {"x": 1590.0, "y": 257.54, "z": 12.58}], "id": 1413633}, "1413629": {"area_boundary": [{"x": 1440.0, "y": 310.44, "z": 11.6}, {"x": 1449.7, "y": 313.94, "z": 11.44}, {"x": 1452.45, "y": 314.84, "z": 11.39}, {"x": 1452.97, "y": 315.05, "z": 11.35}, {"x": 1453.68, "y": 315.39, "z": 11.34}, {"x": 1454.47, "y": 316.02, "z": 11.31}, {"x": 1455.15, "y": 316.93, "z": 11.27}, {"x": 1455.52, "y": 317.69, "z": 11.25}, {"x": 1455.63, "y": 318.74, "z": 11.23}, {"x": 1455.57, "y": 319.65, "z": 11.21}, {"x": 1455.3, "y": 320.67, "z": 11.17}, {"x": 1449.99, "y": 335.53, "z": 10.65}, {"x": 1447.66, "y": 341.71, "z": 10.46}, {"x": 1447.02, "y": 343.4, "z": 10.4}, {"x": 1446.66, "y": 344.13, "z": 10.38}, {"x": 1446.37, "y": 344.49, "z": 10.37}, {"x": 1446.03, "y": 345.01, "z": 10.31}, {"x": 1445.47, "y": 345.73, "z": 10.31}, {"x": 1445.11, "y": 346.31, "z": 10.28}, {"x": 1444.78, "y": 346.73, "z": 10.27}, {"x": 1444.32, "y": 347.32, "z": 10.26}, {"x": 1443.92, "y": 347.78, "z": 10.21}, {"x": 1443.59, "y": 348.21, "z": 10.22}, {"x": 1443.18, "y": 348.65, "z": 10.2}, {"x": 1442.65, "y": 349.25, "z": 10.17}, {"x": 1441.98, "y": 349.92, "z": 10.12}, {"x": 1441.36, "y": 350.55, "z": 10.12}, {"x": 1440.88, "y": 350.98, "z": 10.06}, {"x": 1440.4, "y": 351.4, "z": 10.09}, {"x": 1446.47, "y": 354.93, "z": 9.99}, {"x": 1448.45, "y": 352.38, "z": 10.13}, {"x": 1449.4, "y": 351.25, "z": 10.22}, {"x": 1450.11, "y": 350.24, "z": 10.24}, {"x": 1450.97, "y": 349.11, "z": 10.34}, {"x": 1451.58, "y": 348.32, "z": 10.4}, {"x": 1452.31, "y": 347.39, "z": 10.41}, {"x": 1452.65, "y": 347.19, "z": 10.4}, {"x": 1452.98, "y": 347.24, "z": 10.41}, {"x": 1453.2, "y": 347.5, "z": 10.4}, {"x": 1453.16, "y": 348.31, "z": 10.37}, {"x": 1452.97, "y": 349.3, "z": 10.33}, {"x": 1452.84, "y": 350.25, "z": 10.3}, {"x": 1452.73, "y": 351.54, "z": 10.26}, {"x": 1452.66, "y": 352.75, "z": 10.21}, {"x": 1452.66, "y": 353.26, "z": 10.18}, {"x": 1452.67, "y": 353.88, "z": 10.16}, {"x": 1452.64, "y": 355.19, "z": 10.07}, {"x": 1452.54, "y": 356.65, "z": 10.01}, {"x": 1452.47, "y": 357.05, "z": 9.99}, {"x": 1459.32, "y": 358.04, "z": 9.78}, {"x": 1459.27, "y": 357.2, "z": 9.84}, {"x": 1459.25, "y": 356.19, "z": 9.91}, {"x": 1459.2, "y": 354.95, "z": 9.98}, {"x": 1459.21, "y": 353.5, "z": 10.08}, {"x": 1459.2, "y": 352.62, "z": 10.13}, {"x": 1459.14, "y": 351.33, "z": 10.19}, {"x": 1459.26, "y": 350.07, "z": 10.25}, {"x": 1459.61, "y": 348.03, "z": 10.43}, {"x": 1460.0, "y": 346.4, "z": 10.48}, {"x": 1460.62, "y": 344.46, "z": 10.59}, {"x": 1462.62, "y": 338.85, "z": 10.81}, {"x": 1465.12, "y": 331.95, "z": 10.98}, {"x": 1465.68, "y": 330.87, "z": 11.03}, {"x": 1466.29, "y": 329.87, "z": 11.03}, {"x": 1466.89, "y": 329.14, "z": 11.03}, {"x": 1467.38, "y": 328.5, "z": 11.05}, {"x": 1467.87, "y": 328.01, "z": 11.06}, {"x": 1468.3, "y": 327.65, "z": 11.07}, {"x": 1468.94, "y": 327.12, "z": 11.07}, {"x": 1469.87, "y": 326.59, "z": 11.09}, {"x": 1472.1, "y": 325.61, "z": 11.19}, {"x": 1474.78, "y": 324.57, "z": 11.25}, {"x": 1475.52, "y": 324.31, "z": 11.24}, {"x": 1476.31, "y": 324.13, "z": 11.23}, {"x": 1476.99, "y": 324.1, "z": 11.23}, {"x": 1477.5, "y": 324.15, "z": 11.22}, {"x": 1482.07, "y": 325.71, "z": 11.26}, {"x": 1496.03, "y": 330.62, "z": 11.28}, {"x": 1496.45, "y": 331.06, "z": 11.28}, {"x": 1496.79, "y": 331.58, "z": 11.3}, {"x": 1496.9, "y": 332.4, "z": 11.36}, {"x": 1496.88, "y": 333.27, "z": 11.4}, {"x": 1496.66, "y": 334.44, "z": 11.44}, {"x": 1496.39, "y": 335.59, "z": 11.48}, {"x": 1495.8, "y": 337.37, "z": 11.54}, {"x": 1500.85, "y": 339.01, "z": 11.65}, {"x": 1501.41, "y": 337.73, "z": 11.61}, {"x": 1501.71, "y": 337.21, "z": 11.58}, {"x": 1502.32, "y": 336.8, "z": 11.56}, {"x": 1502.91, "y": 336.6, "z": 11.54}, {"x": 1503.55, "y": 336.55, "z": 11.54}, {"x": 1504.15, "y": 336.35, "z": 11.53}, {"x": 1504.57, "y": 335.89, "z": 11.5}, {"x": 1505.16, "y": 335.27, "z": 11.46}, {"x": 1505.58, "y": 334.94, "z": 11.44}, {"x": 1506.18, "y": 334.69, "z": 11.38}, {"x": 1506.72, "y": 334.59, "z": 11.36}, {"x": 1509.53, "y": 335.45, "z": 11.37}, {"x": 1530.0, "y": 342.61, "z": 11.52}, {"x": 1530.0, "y": 335.57, "z": 11.55}, {"x": 1515.45, "y": 330.25, "z": 11.44}, {"x": 1477.16, "y": 316.74, "z": 11.29}, {"x": 1476.9, "y": 316.45, "z": 11.29}, {"x": 1477.0, "y": 316.16, "z": 11.29}, {"x": 1477.36, "y": 316.06, "z": 11.29}, {"x": 1515.45, "y": 329.48, "z": 11.44}, {"x": 1530.0, "y": 334.62, "z": 11.56}, {"x": 1530.0, "y": 331.75, "z": 11.57}, {"x": 1489.96, "y": 317.41, "z": 11.34}, {"x": 1477.64, "y": 312.98, "z": 11.33}, {"x": 1476.74, "y": 312.57, "z": 11.33}, {"x": 1475.59, "y": 311.82, "z": 11.32}, {"x": 1474.77, "y": 310.85, "z": 11.31}, {"x": 1474.35, "y": 309.87, "z": 11.32}, {"x": 1474.21, "y": 308.94, "z": 11.32}, {"x": 1474.23, "y": 308.11, "z": 11.35}, {"x": 1474.53, "y": 307.0, "z": 11.42}, {"x": 1474.9, "y": 306.04, "z": 11.46}, {"x": 1477.3, "y": 299.51, "z": 11.45}, {"x": 1479.32, "y": 293.96, "z": 11.46}, {"x": 1479.54, "y": 293.54, "z": 11.49}, {"x": 1479.96, "y": 293.4, "z": 11.54}, {"x": 1480.64, "y": 293.56, "z": 11.6}, {"x": 1488.03, "y": 295.89, "z": 11.87}, {"x": 1491.75, "y": 286.4, "z": 11.8}, {"x": 1483.96, "y": 283.75, "z": 11.65}, {"x": 1483.49, "y": 283.47, "z": 11.61}, {"x": 1483.33, "y": 283.19, "z": 11.59}, {"x": 1483.37, "y": 282.84, "z": 11.6}, {"x": 1483.51, "y": 282.51, "z": 11.62}, {"x": 1483.97, "y": 281.24, "z": 11.67}, {"x": 1487.46, "y": 271.69, "z": 11.75}, {"x": 1489.81, "y": 265.07, "z": 11.84}, {"x": 1490.1, "y": 264.21, "z": 11.78}, {"x": 1490.36, "y": 263.91, "z": 11.8}, {"x": 1490.73, "y": 263.72, "z": 11.81}, {"x": 1491.29, "y": 263.8, "z": 11.85}, {"x": 1500.0, "y": 266.55, "z": 11.93}, {"x": 1500.0, "y": 255.52, "z": 12.19}, {"x": 1494.54, "y": 253.92, "z": 12.0}, {"x": 1494.13, "y": 253.78, "z": 11.97}, {"x": 1494.06, "y": 253.5, "z": 11.96}, {"x": 1494.1, "y": 253.17, "z": 11.95}, {"x": 1498.81, "y": 240.0, "z": 12.25}, {"x": 1486.95, "y": 240.0, "z": 12.23}, {"x": 1485.39, "y": 244.44, "z": 12.16}, {"x": 1485.25, "y": 244.61, "z": 12.15}, {"x": 1484.96, "y": 244.75, "z": 12.14}, {"x": 1484.5, "y": 244.77, "z": 12.14}, {"x": 1484.01, "y": 244.72, "z": 12.13}, {"x": 1483.46, "y": 244.7, "z": 12.14}, {"x": 1483.06, "y": 244.86, "z": 12.13}, {"x": 1482.74, "y": 245.18, "z": 12.15}, {"x": 1475.65, "y": 264.88, "z": 11.87}, {"x": 1475.07, "y": 265.63, "z": 11.86}, {"x": 1474.2, "y": 265.75, "z": 11.87}, {"x": 1473.27, "y": 265.58, "z": 11.89}, {"x": 1440.0, "y": 254.41, "z": 12.34}, {"x": 1440.0, "y": 259.66, "z": 12.34}, {"x": 1471.86, "y": 271.07, "z": 11.83}, {"x": 1472.51, "y": 271.62, "z": 11.81}, {"x": 1472.71, "y": 272.67, "z": 11.78}, {"x": 1472.51, "y": 273.46, "z": 11.78}, {"x": 1462.94, "y": 300.03, "z": 11.41}, {"x": 1460.94, "y": 304.29, "z": 11.42}, {"x": 1460.52, "y": 304.75, "z": 11.42}, {"x": 1460.01, "y": 305.15, "z": 11.4}, {"x": 1459.39, "y": 305.41, "z": 11.42}, {"x": 1458.77, "y": 305.63, "z": 11.44}, {"x": 1458.07, "y": 305.77, "z": 11.45}, {"x": 1457.37, "y": 305.81, "z": 11.48}, {"x": 1456.77, "y": 305.71, "z": 11.5}, {"x": 1456.13, "y": 305.47, "z": 11.53}, {"x": 1455.28, "y": 305.13, "z": 11.52}, {"x": 1453.85, "y": 304.53, "z": 11.57}, {"x": 1444.06, "y": 301.0, "z": 11.69}, {"x": 1440.0, "y": 299.62, "z": 11.73}, {"x": 1440.0, "y": 302.96, "z": 11.71}, {"x": 1451.16, "y": 306.9, "z": 11.53}, {"x": 1451.44, "y": 307.17, "z": 11.52}, {"x": 1451.32, "y": 307.43, "z": 11.52}, {"x": 1450.96, "y": 307.4, "z": 11.53}, {"x": 1440.0, "y": 303.5, "z": 11.71}], "id": 1413629}, "1413627": {"area_boundary": [{"x": 1563.47, "y": 120.0, "z": 16.81}, {"x": 1539.29, "y": 71.05, "z": 18.62}, {"x": 1538.64, "y": 69.74, "z": 18.73}, {"x": 1537.99, "y": 68.55, "z": 18.71}, {"x": 1537.48, "y": 67.36, "z": 18.77}, {"x": 1537.28, "y": 66.64, "z": 18.78}, {"x": 1537.41, "y": 65.96, "z": 18.81}, {"x": 1537.55, "y": 65.32, "z": 18.85}, {"x": 1538.03, "y": 64.32, "z": 18.93}, {"x": 1538.44, "y": 63.74, "z": 18.98}, {"x": 1539.29, "y": 62.81, "z": 19.04}, {"x": 1554.79, "y": 54.37, "z": 20.07}, {"x": 1548.0, "y": 38.33, "z": 20.45}, {"x": 1538.4, "y": 43.35, "z": 19.8}, {"x": 1534.72, "y": 45.29, "z": 19.56}, {"x": 1533.52, "y": 45.78, "z": 19.55}, {"x": 1532.61, "y": 46.17, "z": 19.5}, {"x": 1532.03, "y": 46.3, "z": 19.5}, {"x": 1531.46, "y": 46.44, "z": 19.47}, {"x": 1530.79, "y": 46.55, "z": 19.43}, {"x": 1530.39, "y": 46.52, "z": 19.41}, {"x": 1530.0, "y": 46.5, "z": 19.39}, {"x": 1529.44, "y": 46.41, "z": 19.35}, {"x": 1528.91, "y": 46.32, "z": 19.32}, {"x": 1528.3, "y": 46.13, "z": 19.3}, {"x": 1527.85, "y": 45.91, "z": 19.29}, {"x": 1527.46, "y": 45.71, "z": 19.31}, {"x": 1527.07, "y": 45.49, "z": 19.33}, {"x": 1526.71, "y": 45.24, "z": 19.33}, {"x": 1526.34, "y": 44.9, "z": 19.32}, {"x": 1525.94, "y": 44.49, "z": 19.35}, {"x": 1525.45, "y": 44.0, "z": 19.33}, {"x": 1524.99, "y": 43.34, "z": 19.34}, {"x": 1524.02, "y": 41.32, "z": 19.37}, {"x": 1522.01, "y": 37.43, "z": 19.41}, {"x": 1517.93, "y": 28.67, "z": 19.59}, {"x": 1513.79, "y": 20.36, "z": 19.81}, {"x": 1506.1, "y": 4.73, "z": 20.13}, {"x": 1497.35, "y": -12.74, "z": 20.54}, {"x": 1491.36, "y": -10.12, "z": 20.53}, {"x": 1496.82, "y": 0.73, "z": 20.33}, {"x": 1496.88, "y": 1.17, "z": 20.32}, {"x": 1496.6, "y": 1.52, "z": 20.33}, {"x": 1496.25, "y": 1.91, "z": 20.33}, {"x": 1495.47, "y": 2.38, "z": 20.35}, {"x": 1494.89, "y": 2.67, "z": 20.35}, {"x": 1493.97, "y": 2.7, "z": 20.32}, {"x": 1493.3, "y": 2.28, "z": 20.32}, {"x": 1490.34, "y": -3.51, "z": 20.44}, {"x": 1487.69, "y": -8.53, "z": 20.53}, {"x": 1482.52, "y": -6.35, "z": 20.43}, {"x": 1499.52, "y": 28.31, "z": 19.77}, {"x": 1505.12, "y": 39.81, "z": 19.53}, {"x": 1509.43, "y": 48.42, "z": 19.23}, {"x": 1511.57, "y": 52.64, "z": 19.01}, {"x": 1511.76, "y": 53.37, "z": 18.96}, {"x": 1511.8, "y": 54.05, "z": 18.91}, {"x": 1511.77, "y": 54.71, "z": 18.89}, {"x": 1511.66, "y": 55.28, "z": 18.86}, {"x": 1511.46, "y": 55.78, "z": 18.84}, {"x": 1511.19, "y": 56.28, "z": 18.81}, {"x": 1510.9, "y": 56.63, "z": 18.79}, {"x": 1510.64, "y": 56.9, "z": 18.79}, {"x": 1510.34, "y": 57.15, "z": 18.78}, {"x": 1510.0, "y": 57.38, "z": 18.79}, {"x": 1509.51, "y": 57.62, "z": 18.74}, {"x": 1456.51, "y": 82.9, "z": 16.15}, {"x": 1454.57, "y": 83.71, "z": 16.06}, {"x": 1453.28, "y": 83.5, "z": 16.01}, {"x": 1452.73, "y": 83.26, "z": 16.0}, {"x": 1452.3, "y": 83.03, "z": 16.0}, {"x": 1451.83, "y": 82.51, "z": 16.02}, {"x": 1451.51, "y": 82.07, "z": 16.03}, {"x": 1451.29, "y": 81.75, "z": 16.04}, {"x": 1451.02, "y": 81.12, "z": 16.06}, {"x": 1425.1, "y": 30.0, "z": 17.41}, {"x": 1415.07, "y": 30.0, "z": 17.46}, {"x": 1434.92, "y": 69.4, "z": 16.48}, {"x": 1443.29, "y": 85.7, "z": 15.93}, {"x": 1443.6, "y": 86.66, "z": 15.9}, {"x": 1443.67, "y": 87.42, "z": 15.86}, {"x": 1443.57, "y": 88.15, "z": 15.82}, {"x": 1443.44, "y": 88.53, "z": 15.81}, {"x": 1443.16, "y": 89.01, "z": 15.79}, {"x": 1442.79, "y": 89.36, "z": 15.79}, {"x": 1441.82, "y": 89.99, "z": 15.77}, {"x": 1408.35, "y": 105.76, "z": 15.38}, {"x": 1407.8, "y": 106.01, "z": 15.35}, {"x": 1407.44, "y": 106.1, "z": 15.35}, {"x": 1407.07, "y": 106.08, "z": 15.35}, {"x": 1406.74, "y": 106.01, "z": 15.35}, {"x": 1406.37, "y": 105.86, "z": 15.31}, {"x": 1406.12, "y": 105.65, "z": 15.3}, {"x": 1405.83, "y": 105.25, "z": 15.31}, {"x": 1404.93, "y": 103.35, "z": 15.43}, {"x": 1403.72, "y": 101.0, "z": 15.49}, {"x": 1393.51, "y": 80.9, "z": 15.98}, {"x": 1390.24, "y": 82.77, "z": 15.71}, {"x": 1399.57, "y": 102.04, "z": 15.4}, {"x": 1400.08, "y": 103.05, "z": 15.42}, {"x": 1402.4, "y": 107.9, "z": 15.23}, {"x": 1402.39, "y": 108.26, "z": 15.22}, {"x": 1402.17, "y": 108.54, "z": 15.2}, {"x": 1401.71, "y": 108.94, "z": 15.18}, {"x": 1401.14, "y": 109.22, "z": 15.22}, {"x": 1399.6, "y": 109.91, "z": 15.16}, {"x": 1386.67, "y": 116.14, "z": 14.88}, {"x": 1372.47, "y": 123.03, "z": 14.6}, {"x": 1371.56, "y": 123.45, "z": 14.62}, {"x": 1370.92, "y": 123.61, "z": 14.63}, {"x": 1370.26, "y": 123.63, "z": 14.63}, {"x": 1369.72, "y": 123.58, "z": 14.64}, {"x": 1369.18, "y": 123.47, "z": 14.64}, {"x": 1368.55, "y": 123.25, "z": 14.65}, {"x": 1368.0, "y": 122.96, "z": 14.66}, {"x": 1367.38, "y": 122.44, "z": 14.67}, {"x": 1366.87, "y": 121.82, "z": 14.68}, {"x": 1366.42, "y": 121.08, "z": 14.69}, {"x": 1365.98, "y": 120.16, "z": 14.71}, {"x": 1365.51, "y": 119.26, "z": 14.74}, {"x": 1361.47, "y": 110.84, "z": 14.94}, {"x": 1350.0, "y": 87.72, "z": 15.36}, {"x": 1350.0, "y": 111.99, "z": 14.89}, {"x": 1356.45, "y": 124.92, "z": 14.57}, {"x": 1356.99, "y": 126.05, "z": 14.5}, {"x": 1357.22, "y": 126.82, "z": 14.5}, {"x": 1357.13, "y": 127.81, "z": 14.46}, {"x": 1357.03, "y": 128.58, "z": 14.44}, {"x": 1356.85, "y": 129.17, "z": 14.44}, {"x": 1356.55, "y": 129.71, "z": 14.44}, {"x": 1356.11, "y": 130.34, "z": 14.43}, {"x": 1355.55, "y": 130.98, "z": 14.42}, {"x": 1354.71, "y": 131.53, "z": 14.4}, {"x": 1350.0, "y": 133.71, "z": 14.28}, {"x": 1350.0, "y": 145.18, "z": 13.96}, {"x": 1359.81, "y": 140.76, "z": 14.21}, {"x": 1361.08, "y": 140.25, "z": 14.23}, {"x": 1362.06, "y": 139.98, "z": 14.23}, {"x": 1363.03, "y": 140.06, "z": 14.23}, {"x": 1363.82, "y": 140.35, "z": 14.23}, {"x": 1364.34, "y": 140.91, "z": 14.22}, {"x": 1365.3, "y": 142.88, "z": 14.19}, {"x": 1368.79, "y": 150.0, "z": 13.93}, {"x": 1380.87, "y": 150.0, "z": 13.95}, {"x": 1378.85, "y": 146.27, "z": 14.08}, {"x": 1374.85, "y": 137.97, "z": 14.3}, {"x": 1374.6, "y": 137.14, "z": 14.31}, {"x": 1374.4, "y": 136.22, "z": 14.31}, {"x": 1374.49, "y": 135.45, "z": 14.32}, {"x": 1374.77, "y": 134.69, "z": 14.34}, {"x": 1375.32, "y": 133.93, "z": 14.38}, {"x": 1376.19, "y": 133.1, "z": 14.44}, {"x": 1377.39, "y": 132.42, "z": 14.48}, {"x": 1391.34, "y": 125.83, "z": 14.8}, {"x": 1400.8, "y": 121.3, "z": 15.0}, {"x": 1412.93, "y": 115.5, "z": 15.25}, {"x": 1421.65, "y": 111.39, "z": 15.35}, {"x": 1427.74, "y": 108.48, "z": 15.44}, {"x": 1437.6, "y": 103.68, "z": 15.52}, {"x": 1443.4, "y": 101.12, "z": 15.57}, {"x": 1444.96, "y": 100.57, "z": 15.61}, {"x": 1446.02, "y": 100.29, "z": 15.61}, {"x": 1446.65, "y": 100.16, "z": 15.62}, {"x": 1447.33, "y": 100.1, "z": 15.62}, {"x": 1447.87, "y": 100.14, "z": 15.62}, {"x": 1448.4, "y": 100.16, "z": 15.62}, {"x": 1448.75, "y": 100.16, "z": 15.62}, {"x": 1449.27, "y": 100.35, "z": 15.62}, {"x": 1449.71, "y": 100.47, "z": 15.62}, {"x": 1450.16, "y": 100.65, "z": 15.61}, {"x": 1450.44, "y": 100.83, "z": 15.61}, {"x": 1450.77, "y": 101.09, "z": 15.61}, {"x": 1451.04, "y": 101.38, "z": 15.61}, {"x": 1451.32, "y": 101.73, "z": 15.6}, {"x": 1451.55, "y": 102.18, "z": 15.6}, {"x": 1460.69, "y": 120.0, "z": 15.1}, {"x": 1470.79, "y": 120.0, "z": 14.92}, {"x": 1463.17, "y": 104.98, "z": 15.31}, {"x": 1462.3, "y": 103.42, "z": 15.41}, {"x": 1461.97, "y": 102.67, "z": 15.43}, {"x": 1461.83, "y": 102.3, "z": 15.46}, {"x": 1461.7, "y": 101.83, "z": 15.48}, {"x": 1461.68, "y": 101.34, "z": 15.48}, {"x": 1461.68, "y": 100.86, "z": 15.49}, {"x": 1461.72, "y": 100.47, "z": 15.5}, {"x": 1461.85, "y": 100.02, "z": 15.5}, {"x": 1462.01, "y": 99.69, "z": 15.52}, {"x": 1462.3, "y": 99.28, "z": 15.58}, {"x": 1462.69, "y": 98.92, "z": 15.65}, {"x": 1463.18, "y": 98.53, "z": 15.69}, {"x": 1463.68, "y": 98.24, "z": 15.74}, {"x": 1465.22, "y": 97.41, "z": 15.82}, {"x": 1486.35, "y": 87.37, "z": 16.89}, {"x": 1505.05, "y": 78.47, "z": 18.04}, {"x": 1514.38, "y": 73.95, "z": 18.49}, {"x": 1515.31, "y": 73.45, "z": 18.52}, {"x": 1516.22, "y": 73.05, "z": 18.51}, {"x": 1517.0, "y": 72.73, "z": 18.61}, {"x": 1517.84, "y": 72.43, "z": 18.62}, {"x": 1518.43, "y": 72.33, "z": 18.62}, {"x": 1519.1, "y": 72.3, "z": 18.63}, {"x": 1519.75, "y": 72.47, "z": 18.64}, {"x": 1520.65, "y": 72.94, "z": 18.66}, {"x": 1521.35, "y": 73.5, "z": 18.68}, {"x": 1522.07, "y": 74.41, "z": 18.71}, {"x": 1531.69, "y": 93.82, "z": 18.13}, {"x": 1544.61, "y": 120.0, "z": 17.14}], "id": 1413627}}} \ No newline at end of file diff --git a/tests/test_data/sensor_dataset_logs/av2/sensor/val/adcf7d18-0510-35b0-a2fa-b4cea13a6d76/sensors/lidar/315973157959879000.feather b/tests/test_data/sensor_dataset_logs/av2/sensor/val/adcf7d18-0510-35b0-a2fa-b4cea13a6d76/sensors/lidar/315973157959879000.feather new file mode 100644 index 00000000..b716a892 Binary files /dev/null and b/tests/test_data/sensor_dataset_logs/av2/sensor/val/adcf7d18-0510-35b0-a2fa-b4cea13a6d76/sensors/lidar/315973157959879000.feather differ diff --git a/tests/torch/__init__.py b/tests/torch/__init__.py new file mode 100644 index 00000000..e3de7e3e --- /dev/null +++ b/tests/torch/__init__.py @@ -0,0 +1 @@ +"""Torch tests sub-package.""" diff --git a/tests/torch/data_loaders/__init__.py b/tests/torch/data_loaders/__init__.py new file mode 100644 index 00000000..dc883d64 --- /dev/null +++ b/tests/torch/data_loaders/__init__.py @@ -0,0 +1 @@ +"""PyTorch Data-loaders tests sub-package.""" diff --git a/tests/torch/data_loaders/test_detection_dataloader.py b/tests/torch/data_loaders/test_detection_dataloader.py new file mode 100644 index 00000000..8ca831d9 --- /dev/null +++ b/tests/torch/data_loaders/test_detection_dataloader.py @@ -0,0 +1,18 @@ +"""Unit tests for PyTorch Detection Dataset sub-module.""" + +from pathlib import Path +from typing import Final + +from av2.torch.data_loaders.detection import DetectionDataLoader + +TEST_DATA_DIR: Final = Path(__file__).parent.parent.parent.resolve() / "test_data" / "sensor_dataset_logs" + + +def test_build_data_loader() -> None: + """Test building the PyTorch Detection DataLoader.""" + root_dir = TEST_DATA_DIR + dataset_name = "av2" + split_name = "val" + data_loader = DetectionDataLoader(root_dir=root_dir, dataset_name=dataset_name, split_name=split_name) + for datum in data_loader: + assert datum is not None diff --git a/tests/torch/structures/__init__.py b/tests/torch/structures/__init__.py new file mode 100644 index 00000000..80a1e8ca --- /dev/null +++ b/tests/torch/structures/__init__.py @@ -0,0 +1 @@ +"""PyTorch structures tests.""" diff --git a/tests/torch/structures/test_cuboids.py b/tests/torch/structures/test_cuboids.py new file mode 100644 index 00000000..1d2dae05 --- /dev/null +++ b/tests/torch/structures/test_cuboids.py @@ -0,0 +1,40 @@ +"""Unit tests for PyTorch Cuboids sub-module.""" + +from pathlib import Path +from typing import Final, List + +import numpy as np +import pandas as pd +import torch +from kornia.geometry.conversions import euler_from_quaternion +from torch.testing._comparison import assert_close + +from av2.torch import XYZLWH_QWXYZ_COLUMNS +from av2.torch.structures.cuboids import CuboidMode, Cuboids + +TEST_DATA_DIR: Final = Path(__file__).parent.parent.parent.resolve() / "test_data" +SAMPLE_LOG_DIR: Final = TEST_DATA_DIR / "sensor_dataset_logs" / "adcf7d18-0510-35b0-a2fa-b4cea13a6d76" + + +def test_build_cuboids() -> None: + """Test building the Cuboids structure.""" + annotations_path = SAMPLE_LOG_DIR / "annotations.feather" + annotations_frame = pd.read_feather(annotations_path) + cuboids_npy = annotations_frame[list(XYZLWH_QWXYZ_COLUMNS)].to_numpy().astype(np.float32) + + cuboids = Cuboids(annotations_frame) + cuboids_xyzlwht = cuboids.as_tensor() + + cuboids_xyzlwh_qwxyz = torch.as_tensor(cuboids_npy) + assert_close(cuboids_xyzlwht[:, :6], cuboids_xyzlwh_qwxyz[:, :6]) + + w, x, y, z = cuboids_xyzlwh_qwxyz[:, 6:10].t() + _, _, yaw = euler_from_quaternion(w, x, y, z) + assert_close(cuboids_xyzlwht[:, 6], yaw) + assert_close(cuboids.as_tensor(cuboid_mode=CuboidMode.XYZLWH_QWXYZ), cuboids_xyzlwh_qwxyz) + + track_uuid_expected: List[str] = annotations_frame["track_uuid"].to_list() + assert cuboids.track_uuid == track_uuid_expected + + category_expected: List[str] = annotations_frame["category"].to_list() + assert cuboids.category == category_expected diff --git a/tests/torch/structures/test_lidar.py b/tests/torch/structures/test_lidar.py new file mode 100644 index 00000000..96be6e92 --- /dev/null +++ b/tests/torch/structures/test_lidar.py @@ -0,0 +1,35 @@ +"""Unit tests for PyTorch Lidar sub-module.""" + +from pathlib import Path +from typing import Final + +import numpy as np +import pandas as pd +import torch +from torch.testing._comparison import assert_close + +from av2.torch import LIDAR_COLUMNS +from av2.torch.structures.lidar import Lidar + +TEST_DATA_DIR: Final = Path(__file__).parent.parent.parent.resolve() / "test_data" +SAMPLE_LOG_DIR: Final = TEST_DATA_DIR / "sensor_dataset_logs" / "adcf7d18-0510-35b0-a2fa-b4cea13a6d76" + + +def test_build_lidar() -> None: + """Test building a Lidar structure.""" + lidar_paths = sorted((SAMPLE_LOG_DIR / "sensors" / "lidar").glob("*.feather")) + lidar_path = lidar_paths[0] + frame = pd.read_feather(lidar_path) + lidar_tensor = torch.as_tensor(frame[list(LIDAR_COLUMNS)].to_numpy().astype(np.float32)) + + lidar = Lidar(frame) + assert_close(lidar.as_tensor(), lidar_tensor) + assert_close( + lidar.as_tensor( + columns=( + "y", + "z", + ) + ), + lidar_tensor[:, 1:3], + ) diff --git a/tests/torch/structures/test_sweep.py b/tests/torch/structures/test_sweep.py new file mode 100644 index 00000000..e44fe304 --- /dev/null +++ b/tests/torch/structures/test_sweep.py @@ -0,0 +1,34 @@ +"""Unit tests for PyTorch Cuboids sub-module.""" + +from pathlib import Path +from typing import Final + +import pandas as pd + +from av2.torch.structures.cuboids import Cuboids +from av2.torch.structures.lidar import Lidar +from av2.torch.structures.sweep import Sweep +from av2.torch.structures.utils import SE3_from_frame + +TEST_DATA_DIR: Final = Path(__file__).parent.parent.parent.resolve() / "test_data" +SAMPLE_LOG_DIR: Final = TEST_DATA_DIR / "sensor_dataset_logs" / "adcf7d18-0510-35b0-a2fa-b4cea13a6d76" + + +def test_build_sweep() -> None: + """Test building the Sweep structure.""" + annotations_path = SAMPLE_LOG_DIR / "annotations.feather" + annotations_frame = pd.read_feather(annotations_path) + cuboids = Cuboids(annotations_frame) + + lidar_paths = sorted((SAMPLE_LOG_DIR / "sensors" / "lidar").glob("*.feather")) + lidar_path = lidar_paths[0] + lidar_frame = pd.read_feather(lidar_path) + lidar = Lidar(lidar_frame) + + city_pose_path = SAMPLE_LOG_DIR / "city_SE3_egovehicle.feather" + city_pose_frame = pd.read_feather(city_pose_path) + city_SE3_ego = SE3_from_frame(city_pose_frame) + + sweep_uuid = annotations_path.parent.stem, int(lidar_path.stem) + sweep = Sweep(city_SE3_ego=city_SE3_ego, lidar=lidar, sweep_uuid=sweep_uuid, cuboids=cuboids) + assert sweep is not None diff --git a/tests/torch/structures/test_utils.py b/tests/torch/structures/test_utils.py new file mode 100644 index 00000000..baaa6a2d --- /dev/null +++ b/tests/torch/structures/test_utils.py @@ -0,0 +1,53 @@ +"""Unit test for PyTorch structure utilities.""" + +import numpy as np +import pandas as pd +import torch +from kornia.geometry.liegroup import Se3, So3 +from kornia.geometry.quaternion import Quaternion +from torch.testing._comparison import assert_close + +from av2.torch import QWXYZ_COLUMNS, TRANSLATION_COLUMNS +from av2.torch.structures.utils import SE3_from_frame, tensor_from_frame + + +def _build_dummy_frame() -> pd.DataFrame: + """Build a dummy data-frame.""" + return pd.DataFrame( + { + "tx_m": [0.0], + "ty_m": [1.0], + "tz_m": [0.0], + "qw": [1.0], + "qx": [0.0], + "qy": [0.0], + "qz": [0.0], + }, + dtype=np.float32, + ) + + +def test_tensor_from_frame() -> None: + """Test converting a data-frame into a tensor.""" + frame = _build_dummy_frame() + tensor = tensor_from_frame(frame, columns=["qw", "qx", "qy", "qz"]) + + tensor_expected = torch.as_tensor( + [[frame.loc[0, "qw"], frame.loc[0, "qx"], frame.loc[0, "qy"], frame.loc[0, "qz"]]] + ) + assert_close(tensor, tensor_expected) + + +def test_SE3_from_frame() -> None: + """Test converting a data-frame into an SE(3) object.""" + frame = _build_dummy_frame() + + quat_wxyz_tensor = torch.as_tensor(frame[list(QWXYZ_COLUMNS)].to_numpy().astype(np.float32)) + translation = torch.as_tensor(frame[list(TRANSLATION_COLUMNS)].to_numpy().astype(np.float32)) + quat_wxyz = Quaternion(quat_wxyz_tensor) + rotation = So3(quat_wxyz) + city_SE3_ego_expected = Se3(rotation, translation) + city_SE3_ego = SE3_from_frame(frame) + + assert_close(city_SE3_ego.translation, city_SE3_ego_expected.translation) + assert_close(city_SE3_ego.rotation.matrix(), city_SE3_ego_expected.rotation.matrix()) diff --git a/tutorials/detection_data_loader.py b/tutorials/detection_data_loader.py new file mode 100644 index 00000000..8cbabee5 --- /dev/null +++ b/tutorials/detection_data_loader.py @@ -0,0 +1,71 @@ +"""Example of Rust-backed, PyTorch data-loader.""" + +import logging +from pathlib import Path +from typing import Final + +from kornia.geometry.linalg import transform_points +from tqdm import tqdm + +from av2.torch.data_loaders.detection import DetectionDataLoader + +logging.basicConfig(level=logging.INFO) +logger = logging.getLogger(__name__) + +HOME_DIR: Final = Path.home() + + +def main( + root_dir: Path = HOME_DIR / "data" / "datasets", + dataset_name: str = "av2", + split_name: str = "val", + num_accumulated_sweeps: int = 1, + max_iterations: int = 1000, +) -> None: + """Iterate over the detection data-loader. + + Dataset should live at ~/data/datasets/{dataset_name}/{split_name}. + + Args: + root_dir: Root directory to the datasets. + dataset_name: Name of the dataset (e.g., "av2"). + split_name: Name of the split (e.g., "val"). + num_accumulated_sweeps: Number of sweeps to accumulate. + max_iterations: Maximum number of iterations for the data-loader example. + """ + logger.info("Starting detection data-loader example ...") + data_loader = DetectionDataLoader(root_dir, dataset_name, split_name, num_accumulated_sweeps=num_accumulated_sweeps) + for i, sweep in enumerate(tqdm(data_loader)): + # 4x4 matrix representing the SE(3) transformation to city from ego-vehicle coordinates. + city_SE3_ego_mat4 = sweep.city_SE3_ego.matrix() + + # Lidar (x,y,z) in meters and intensity (i). + lidar_tensor = sweep.lidar.as_tensor() + + # Transform the points to city coordinates. + lidar_xyz_city = transform_points(city_SE3_ego_mat4, lidar_tensor[:, :3]) + + # Cuboids might not be available (e.g., using the "test" split). + if sweep.cuboids is not None: + # Annotations in (x,y,z,l,w,h,yaw) format. + cuboids = sweep.cuboids.as_tensor() + + # Annotations in (x,y,z,l,theta) format. + # 1-DOF rotation. + xyzlwh_t = sweep.cuboids.as_tensor() + + # Access cuboid category. + category = sweep.cuboids.category + + # Access track uuid. + track_uuid = sweep.cuboids.track_uuid + + if i >= max_iterations: + logger.info(f"Reached max iterations of {max_iterations}!") + break + + logger.info("Example complete!") + + +if __name__ == "__main__": + main() diff --git a/tutorials/generate_egoview_overlaid_vector_map.py b/tutorials/generate_egoview_overlaid_vector_map.py index b5aa678b..584bd2de 100644 --- a/tutorials/generate_egoview_overlaid_vector_map.py +++ b/tutorials/generate_egoview_overlaid_vector_map.py @@ -204,7 +204,6 @@ def render_egoview_with_occlusion_checks( img_canvas = egoview_renderer.render_lane_boundary_egoview(img_canvas, ls, "left", line_width_px) for pc in egoview_renderer.avm.get_scenario_ped_crossings(): - EPS = 1e-5 crosswalk_color = BLUE_BGR # render ped crossings (pc's) diff --git a/tutorials/map_tutorial.ipynb b/tutorials/map_tutorial.ipynb index f68e27b6..6367577a 100644 --- a/tutorials/map_tutorial.ipynb +++ b/tutorials/map_tutorial.ipynb @@ -109,7 +109,6 @@ " ax = fig.add_subplot()\n", "\n", " for _, ls in avm.vector_lane_segments.items():\n", - "\n", " # right_ln_bnd\n", " # left_ln_bnd\n", " vector_plotting_utils.draw_polygon_mpl(ax, ls.polygon_boundary, color=\"g\", linewidth=0.5)\n",