Giter Club home page Giter Club logo

a-b-street / abstreet Goto Github PK

View Code? Open in Web Editor NEW
7.3K 75.0 330.0 376.87 MB

Transportation planning and traffic simulation software for creating cities friendlier to walking, biking, and public transit

Home Page: https://a-b-street.github.io/docs/

License: Apache License 2.0

Rust 98.02% Shell 0.61% GLSL 0.15% Python 0.34% Go 0.12% HTML 0.34% Makefile 0.10% TypeScript 0.33% CSS 0.01%
traffic-simulation game openstreetmap simulation seattle

abstreet's Introduction

A/B Street

DOI

Ever been stuck in traffic on a bus, wondering why is there legal street parking instead of a dedicated bus lane? A/B Street is a project to plan, simulate, and communicate visions for making cities friendlier to people walking, biking, and taking public transit. We create software to simulate traffic, edit streets and intersections, plan bike networks, create low-traffic neighborhoods, and educate the public about 15-minute neighborhoods through games. The project works anywhere in the world, thanks to OpenStreetMap.

As of January 2024, development of the tools above has slowed down, because newer tools are being developed in other repositories. Please also check out:

  • Severance Snape to explore how far walking routes detour to cross big roads
  • od2net to calculate the most important roads to prioritize for cycling

Videos

Documentation

Project mission

We amplify the efforts of individuals and advocacy groups who campaign to transition cities away from private motor vehicles. We believe in transparent and reproducible analysis, so all of our work is open source and based on public data. We believe everybody should have a voice in shaping their city, so our software aims to be easy to use.

Why not leave city planning to professionals? People are local experts on the small slice of the city they interact with daily -- the one left turn lane that always backs up or a certain set of poorly timed walk signals. Laura Adler writes:

"Only with simple, accessible simulation programs can citizens become active generators of their own urban visions, not just passive recipients of options laid out by government officials."

Existing urban planning software is either proprietary or hard to use. A/B Street strives to be highly accessible, by being a fun, engaging game. See here for more guiding principles.

Credits

Core team:

See full credits

Contact [email protected] or follow @CarlinoDustin for updates.

abstreet's People

Contributors

andrewphilipsmith avatar anonimanonim2245 avatar brucebrown avatar dabreegster avatar dcarlino avatar easbar avatar gedkott avatar iliasn avatar jamesneb avatar javednissar avatar lorenzschmid avatar luzpaz avatar matkoniecz avatar matthieu-foucault avatar mdejean avatar michaelkirk avatar moo avatar mshenfield avatar nickschimek avatar nosuchthingasrandom avatar omalaspinas avatar phimuemue avatar robinlovelace avatar rtwfroody avatar stuartlynn avatar tnederlof avatar tordans avatar transurgeon avatar vks avatar wxinix avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

abstreet's Issues

Starter project: switch between stop signs and traffic signals

Players can edit existing stop signs and traffic signals, but they can't yet put a signal on an intersection currently controlled by a stop sign. To do this, you need to make a new type of edit in https://github.com/dabreegster/abstreet/blob/master/map_model/src/edits.rs, being able to revert it to the previous intersection type. Then you can add a new control for this in https://github.com/dabreegster/abstreet/blob/master/game/src/edit/mod.rs. Not sure what the UX should look like; if you get to this before Yuwen redesigns edit mode, I'd say just make a new right-click contextual_action on intersections.

seed_data.zip is missing signal_single.json

I'm running a dev build and the Traffic Lights tutorial crashes because it's missing data/system/synthetic_maps/signal_single.json. That's after running ./data/grab_seed_data.sh which removes the file and overwrites it from a ZIP file that doesn't include the synthetic maps it seems.

Refactor event update loop to accomodate multiple event types

In #57, @dabreegster noted that the current event loop only handles a single type of event and if we want auto-panning to work sensibly, we will need the event loop to accommodate multiple event types in order to allow for a "panning" event as well as other UI-specific events that are separate from the simulation itself.

Floating point exception (Linux binary compatibility)

pre-build Linux binaries
v0.1.18
7ca08df

$ ./play_abstreet.sh
./play_abstreet.sh: line 4:  4080 Floating point exception(core dumped) RUST_BACKTRACE=1 ./game --rng_seed=42

Ubuntu 18.04.3 LTS
5.0.0-37-generic
i7-7700HQ

Building from source works fine.

Thread panic when starting sandbox

Getting a crash when starting random scenario in sandbox mode.

  • Launch game
  • Click Play
  • Click Sandbox
  • Type s
  • Choose "random scenario with some agents"
  • Kaboom! ๐Ÿ’ฅ

macOS: 10.14.6-x86_64
abstreet: ed2f703

$ RUST_BACKTRACE=1 cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.64s
     Running `/Users/alex/src/github.com/dabreegster/abstreet/target/debug/game`
HiDPI factor is purportedly 2
load map...
upload textures (14)... 0.4140s
14 textures grouped into 3 arrays (with the same dimensions)
Loading map ../data/system/maps/montlake.bin
Read ../data/system/maps/montlake.bin (4)... 0.4663s
create sim...
create sim took 0.0271s
Map and Sim cost ~0 MB
draw_map...
make DrawRoads (415)... 0.1948s
generate thick roads...
generate thick roads took 0.0238s
prepare DrawLanes (2,181)... 0.2146s
finalize DrawLanes (2,181)... 0.1464s
make DrawIntersections (317)... 0.1605s
generate unzoomed intersections...
generate unzoomed intersections took 0.0098s
make DrawBuildings (3,018)... 0.0558s
upload all buildings...
upload all buildings took 0.0130s
make DrawBusStop (16)... 0.0012s
make DrawAreas (55)... 0.0002s
upload all areas...
upload all areas took 0.0003s
create quadtree...
create quadtree took 0.4566s
static DrawMap consumes 9 MB on the GPU
draw_map... plus 0.0500s
draw_map took 1.3268s
DrawMap cost ~0 MB
load map... plus 0.0522s
load map took 2.2864s

- load map took 2.2864s
  - upload textures (14)... 0.4140s
  - Read ../data/system/maps/montlake.bin (4)... 0.4663s
  - create sim took 0.0271s
  - draw_map took 1.3268s
    - make DrawRoads (415)... 0.1948s
    - generate thick roads took 0.0238s
    - prepare DrawLanes (2,181)... 0.2146s
    - finalize DrawLanes (2,181)... 0.1464s
    - make DrawIntersections (317)... 0.1605s
    - generate unzoomed intersections took 0.0098s
    - make DrawBuildings (3,018)... 0.0558s
    - upload all buildings took 0.0130s
    - make DrawBusStop (16)... 0.0012s
    - make DrawAreas (55)... 0.0002s
    - upload all areas took 0.0003s
    - create quadtree took 0.4566s
    - ... plus 0.0500s
  - ... plus 0.0522s

5 notes:
14 textures grouped into 3 arrays (with the same dimensions)
Loading map ../data/system/maps/montlake.bin
Map and Sim cost ~0 MB
static DrawMap consumes 9 MB on the GPU
DrawMap cost ~0 MB

1 warnings:
Couldn't make geometry for TurnID(LaneID(531), LaneID(192), IntersectionID(52)). look for Pt2D(336.4989, 876.3308) to Pt2D(355.7037, 866.4475) in [Pt2D { inner_x: 336.3221, inner_y: 891.3298 }, Pt2D { inner_x: 336.4989, inner_y: 876.3308 }, Pt2D { inner_x: 345.5252, inner_y: 876.4371 }, Pt2D { inner_x: 355.3143, inner_y: 866.8297 }, Pt2D { inner_x: 366.594, inner_y: 876.7766 }, Pt2D { inner_x: 366.3413, inner_y: 891.7741 }, Pt2D { inner_x: 353.0851, inner_y: 891.5507 }, Pt2D { inner_x: 349.9952, inner_y: 897.5429 }, Pt2D { inner_x: 336.3221, inner_y: 891.3298 }]

- load map took 2.2864s
instantiate scenario...
instantiate scenario took 0.0000s

- instantiate scenario took 0.0000s

- instantiate scenario took 0.0000s
reset simulation...
reset simulation took 0.0301s

- reset simulation took 0.0301s

- reset simulation took 0.0301s
instantiate scenario...
Instantiating small_run...
load full neighborhood info...
load_all_objects from ../data/input/neighborhoods/montlake...
load_all_objects from ../data/input/neighborhoods/montlake took 0.0001s

- load_all_objects from ../data/input/neighborhoods/montlake took 0.0001s

- load_all_objects from ../data/input/neighborhoods/montlake took 0.0001s
load full neighborhood info took 0.0693s
seed parked cars for buildings (3,018)... 0.0530s
Seeded 1471 of 5102 parking spots with cars, leaving 1547 buildings without cars
thread 'main' panicked at 'SidewalkEndpoint(LaneID(989), true) not in NodeMap', map_model/src/pathfind/node_map.rs:36:13
stack backtrace:
   0: std::io::Read::read_exact
   1: core::fmt::ArgumentV1::show_usize
   2: std::io::Write::write_fmt
   3: std::panicking::default_hook::{{closure}}
   4: std::panicking::default_hook
   5: <std::panicking::begin_panic::PanicPayload<A> as core::panic::BoxMeUp>::get
   6: std::panicking::continue_panic_fmt
   7: crossbeam_epoch::internal::Global::try_advance
   8: map_model::pathfind::node_map::NodeMap<T>::get
             at map_model/src/pathfind/node_map.rs:36
   9: map_model::pathfind::walking::SidewalkPathfinder::should_use_transit
             at map_model/src/pathfind/walking.rs:171
  10: map_model::pathfind::Pathfinder::should_use_transit
             at map_model/src/pathfind/mod.rs:450
  11: map_model::map::Map::should_use_transit
             at map_model/src/map.rs:603
  12: sim::make::scenario::SpawnOverTime::spawn_agent
  13: <map_model::turn::TurnPriority as core::cmp::PartialEq>::eq
  14: game::sandbox::gameplay::GameplayRunner::initialize::{{closure}}
             at game/src/sandbox/gameplay/mod.rs:161
  15: ezgui::event_ctx::EventCtx::loading_screen
             at /Users/alex/src/github.com/dabreegster/abstreet/ezgui/src/event_ctx.rs:41
  16: game::sandbox::gameplay::GameplayRunner::initialize
             at game/src/sandbox/gameplay/mod.rs:157
  17: game::sandbox::SandboxMode::new
             at game/src/sandbox/mod.rs:76
  18: game::sandbox::gameplay::change_scenario
             at game/src/sandbox/gameplay/mod.rs:224
  19: core::ops::function::Fn::call
             at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/libcore/ops/function.rs:69
  20: <alloc::boxed::Box<F> as core::ops::function::Fn<A>>::call
             at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/liballoc/boxed.rs:936
  21: <game::game::WizardState as game::game::State>::event
             at game/src/game.rs:218
  22: <game::game::Game as ezgui::runner::GUI>::event
             at game/src/game.rs:44
  23: ezgui::runner::State<G>::event::{{closure}}
             at /Users/alex/src/github.com/dabreegster/abstreet/ezgui/src/runner.rs:84
  24: core::ops::function::FnOnce::call_once
             at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/libcore/ops/function.rs:227
  25: <std::panic::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
             at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/libstd/panic.rs:315
  26: std::panicking::try::do_call
             at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/libstd/panicking.rs:292
  27: panic_unwind::imp::find_eh_action::{{closure}}
  28: std::panicking::try
             at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/libstd/panicking.rs:271
  29: std::panic::catch_unwind
             at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/libstd/panic.rs:394
  30: ezgui::runner::State<G>::event
             at /Users/alex/src/github.com/dabreegster/abstreet/ezgui/src/runner.rs:83
  31: ezgui::runner::loop_forever
             at /Users/alex/src/github.com/dabreegster/abstreet/ezgui/src/runner.rs:359
  32: ezgui::runner::run
             at /Users/alex/src/github.com/dabreegster/abstreet/ezgui/src/runner.rs:302
  33: game::main
             at game/src/main.rs:51
  34: std::rt::lang_start::{{closure}}
             at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/libstd/rt.rs:64
  35: std::panicking::try::do_call
  36: panic_unwind::imp::find_eh_action::{{closure}}
  37: std::io::lazy::Lazy<T>::get
  38: std::rt::lang_start
             at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/libstd/rt.rs:64
  39: game::main
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
dropping Timer while doing progress SpawnOverTime each agent, due to panic?
********************************************************************************
UI broke! Primary sim:
********************************************************************************
At 00:00:00.0
Wrote ../data/player/camera_state/montlake.json

No way to add sidewalk

I can't transform a part of the road into a sidewalk...
Is there a way to make a part of the street into a sidewalk? Or if I made a sidewalk into a bike lane and want to revert back to a sidewalk after I hit finish.

Target car not visible in tutorial task 5

In task 5 (Escort) of the tutorial. The target car isn't visible for me.

When task 5 starts, I get a few messages like the following in stdout and the arrow points outside the visible area, so the task cannot be completed:

No room to spawn car for Trip #45 by Person 45. Not retrying!

and

Alert at 00:00:00.0 (Person(PersonID(45))): Person 45 had a trip aborted, and their vehicle Car #30 was warped to Offstreet(BuildingID(1956), 0)

If I change the target car to one that is not mentioned in those messages, i.e. id 8, I can complete the task.

I ran the game with cargo run from the /game directory (currently on commit 3f48b4b).

Starter project: show routes to/from a building

At a hackathon, Joey had the idea to click a building and be able to visualize all of the routes that trips take to or from that building over the course of the day. Or maybe if you inspect at 9am, only current and future trips are shown. There's something kind of like this now in the internal dev mode -- https://github.com/dabreegster/abstreet/blob/573edbd13e5aa4bedba0bd819d3d7b32dba11b59/game/src/mission/scenario.rs#L635 -- but it just draws arrows, doesn't compute paths. It'd be much nicer to show the paths, with some kind of heatmap / styling to show where paths overlap the most.

It's a bit tricky to get the path for a trip to/from a building; ping me if you want to start this project and I'll explain some more details

Panicked due to stats

- reset simulation took 0.0048s
thread 'main' panicked at 'assertion failed: `(left != right)`
  left: `0`,
 right: `0`', geom/src/stats.rs:105:9

This happened right after I finished the tutorial. I clicked around in the stats at one point, since I wasn't sure how to finish the last challenge (it would have helped me to know that I'm waiting for all the trips to complete, obvious in retrospect, but an arrow to the top right of the screen would have been a clue). Let me know if you'd like the full trace and montlake.json

Crash: thread 'main' panicked at 'Queue has spillover on Traversable::Lane ... sim/src/mechanics/queue.rs:91:17

I'm getting a frequent crash at sim/src/mechanics/queue.rs#L91. It occurs after a few (game-time) hours of simulating huge_seattle with weekday_typical_traffic_from_psrc, if another crash doesn't happen first.

On Traversable::Lane(85385) at 07:56:35.6...
- CarID(38433 -- car) @ 84.9242m (length 4.8234m)
  Queued currently
- CarID(57086 -- car) @ 79.1008m (length 5.3613m)
  Queued currently
- CarID(4276 -- car) @ 72.7395m (length 6.1767m)
  Queued currently
- CarID(42418 -- car) @ 65.5628m (length 6.1847m)
  Queued currently
- CarID(140777 -- car) @ 44.0905m (length 4.8075m)
  Parking during 07:56:34.6 .. 07:56:49.6
- CarID(144640 -- car) @ 38.283m (length 5.1546m)
  Queued currently
- CarID(42154 -- car) @ 32.1284m (length 4.6616m)
  Queued currently
- CarID(134617 -- car) @ 15.6336m (length 5.2654m)
  Queued currently
- CarID(38281 -- car) @ 9.3682m (length 6.246m)
  Queued currently
- CarID(36155 -- car) @ 2.1222m (length 5.1077m)
  Queued currently

thread 'main' panicked at 'Queue has spillover on Traversable::Lane(85385) at 07:56:35.6 -- can't draw CarID(44507 -- car), bound is -3.9855m. Laggy head is Some(CarID(78903, Car))', sim/src/mechanics/queue.rs:91:17

Attached a few logs of the last minute of console output with backtrace.

queue.rs-91-1.txt
queue.rs-91-2.txt
queue.rs-91-3.txt

Starter project: follow multiple agents

At the hackathon, Sumit had the idea to spawn a few agents, be able to mark them for tracking, and have a tool that shows all of the tracked agents at once. For example, spawn a bike and a car in heavy traffic, and see who arrives to a destination first. Highlight the tracked agents (especially when zoomed out) and pick a zoom level that will show all agents, adjusting it as they get closer/farther from each other.

References:

Optimize scheduler

Profiling reveals https://github.com/dabreegster/abstreet/blob/master/sim/src/scheduler.rs as a hot spot, which makes sense. Anybody have ideas to speed it up? It's a priority queue with updateable priorities. There are lots of alternatives to std::collections::BinaryHeap, but I think I had trouble finding one that was deterministic (given the same inputs, simulations must run exactly the same).

I squeezed running a huge scenario from 71s to 63s using 7a0b9cd. I bet there's more possible.

Program crashes when trying to save more than 9 shortcuts

The program will crash when I try to save my 10th shortcut or when I try to access the shortcuts menu after that point

To replicate

  1. Add 9 shortcuts
  2. Add your 10th shortcut, the program will crash
  3. Start program again and try to access shortcuts, the program will crash

Minor UI Issues

image

  • Pause button needs to align vertically with the rest of the other buttons
  • Area in which pause button is contained needs to be made wider
  • Reset text and icon need to be brought down to align vertically with the rest of the buttons

image

  • Vertically align buttons

Hint about zoom level in tutorial task 1

In task 1 of the tutorial the player is asked to put out the fire at the montlake market. While the orange building is easy enough, it is not immediately clear that you have to zoom in enough in order to be able to interact with buildings (and other game objects). An additional hint explaining that would be helpful.

Can save shortcuts with a name composed only of spaces

A user can save a shortcut with a name composed only of spaces

Seems to navigate to shortcut fine but probably good practice to trim leading and trailing spaces and require a name that is not composed only of spaces

Starter project: see my commute

It'd be neat for people to create a new person, specify their schedule of trips, and have that one extra person be present in the main simulation. They can follow that agent and see if the problems of their commute are captured by the game.

If anyone picks this up, let's discuss the general UX of it first.

How to run this?

$ cd game
$ cargo run --bin game
HiDPI factor is purportedly 1.5
load map...
upload textures (2)... 0.1244s
2 textures grouped into 2 arrays (with the same dimensions)
Loading map ../data/system/maps/montlake.bin
thread 'main' panicked at 'Couldn't read_binary(../data/system/maps/montlake.bin): No such file or directory (os error 2)', <::std::macros::panic macros>:5:6

[Bug] import.sh crashes with "dupe adjacent pts" message

Running ./import.sh gets this:

Read ../data/shapes/blockface.bin (31)... 1.0183s
thread 'main' panicked at 'PL with total length 64.5492m and 9 pts has ~dupe adjacent pts: [Pt2D { inner_x: 12007.5373, inner_y: 10602.4716 }, Pt2D { inner_x: 12015.482, inner_y: 10598.8613 }, Pt2D { inner_x: 12026.4682, inner_y: 10598.3151 }, Pt2D { inner_x: 12035.0193, inner_y: 10599.51 }, Pt2D { inner_x: 12041.1216, inner_y: 10601.5844 }, Pt2D { inner_x: 12061.8626, inner_y: 10612.4761 }, Pt2D { inner_x: 12064.8633, inner_y: 10613.5627 }, Pt2D { inner_x: 12067.9835, inner_y: 10613.5039 }, Pt2D { inner_x: 12067.9871, inner_y: 10613.5014 }]', geom/src/polyline.rs:29:13
stack backtrace:
   0: <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt
   1: core::fmt::write
   2: std::io::Write::write_fmt
   3: std::panicking::default_hook::{{closure}}
   4: std::panicking::default_hook
   5: std::panicking::rust_panic_with_hook
   6: std::panicking::continue_panic_fmt
   7: std::panicking::begin_panic_fmt
   8: geom::polyline::PolyLine::new
   9: convert_osm::convert
  10: convert_osm::main
  11: std::rt::lang_start::{{closure}}
  12: std::panicking::try::do_call
  13: __rust_maybe_catch_panic
  14: std::rt::lang_start_internal
  15: main
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
dropping Timer during apply parking hints, due to panic?

(my OS is Mac OSX High Sierra)

Starter project: Improve traffic signal heuristics

I can't find data about how Seattle traffic signals are actually timed right now. So for the moment, I'm automatically generating a policy for every intersection. There are a bunch of different policies for different types of intersections (for a 4-way, should there be 2 phases with no protected left turn or 4 phases with protected left turns?). Every phase is hardcoded to 30 seconds right now. A nice project contained to one layer of the code (just the map model) would be to improve these heuristics. For example, roads have a rank (primary > secondary > residential) from OpenStreetMap, so probably bigger roads should have longer durations.

Ex policy: https://github.com/dabreegster/abstreet/blob/573edbd13e5aa4bedba0bd819d3d7b32dba11b59/map_model/src/traffic_signals.rs#L247

[Bug] Install doesn't work on MacOS High Sierra

The following tools aren't installed on MacOS High Sierra:

  • wget
  • osmconvert
  • proj
  • cs2cs

These cause ./import.sh to fail.

I was able to install wget, proj, and cs2cs tools using Homebrew (brew install wget proj).

Zhong was able to install osmconvert with wget -O - http://m.m.i24.cc/osmconvert.c | cc -x c - -lz -O3 -o /usr/local/bin/osmconvert (from the Osmconvert wiki)

Thread panic when starting Traffic Signals / The Real Challenge

Getting this crash when launching the 3rd Traffic Signals challenge.

macOS: 10.14.6-x86_64

$ RUST_BACKTRACE=1 cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.48s
     Running `/Users/alex/src/github.com/dabreegster/abstreet/target/debug/game`
HiDPI factor is purportedly 2
load map...
upload textures (14)... 0.3988s
14 textures grouped into 3 arrays (with the same dimensions)
Loading map ../data/system/maps/montlake.bin
Read ../data/system/maps/montlake.bin (4)... 0.4818s
create sim...
create sim took 0.0294s
Map and Sim cost ~0 MB
draw_map...
make DrawRoads (415)... 0.2145s
generate thick roads...
generate thick roads took 0.0217s
prepare DrawLanes (2,181)... 0.2386s
finalize DrawLanes (2,181)... 0.1540s
make DrawIntersections (317)... 0.1769s
generate unzoomed intersections...
generate unzoomed intersections took 0.0116s
make DrawBuildings (3,018)... 0.0630s
upload all buildings...
upload all buildings took 0.0168s
make DrawBusStop (16)... 0.0018s
make DrawAreas (55)... 0.0002s
upload all areas...
upload all areas took 0.0004s
create quadtree...
create quadtree took 0.4307s
static DrawMap consumes 9 MB on the GPU
draw_map... plus 0.0455s
draw_map took 1.3758s
DrawMap cost ~0 MB
load map... plus 0.0564s
load map took 2.3422s

- load map took 2.3422s
  - upload textures (14)... 0.3988s
  - Read ../data/system/maps/montlake.bin (4)... 0.4818s
  - create sim took 0.0294s
  - draw_map took 1.3758s
    - make DrawRoads (415)... 0.2145s
    - generate thick roads took 0.0217s
    - prepare DrawLanes (2,181)... 0.2386s
    - finalize DrawLanes (2,181)... 0.1540s
    - make DrawIntersections (317)... 0.1769s
    - generate unzoomed intersections took 0.0116s
    - make DrawBuildings (3,018)... 0.0630s
    - upload all buildings took 0.0168s
    - make DrawBusStop (16)... 0.0018s
    - make DrawAreas (55)... 0.0002s
    - upload all areas took 0.0004s
    - create quadtree took 0.4307s
    - ... plus 0.0455s
  - ... plus 0.0564s

5 notes:
14 textures grouped into 3 arrays (with the same dimensions)
Loading map ../data/system/maps/montlake.bin
Map and Sim cost ~0 MB
static DrawMap consumes 9 MB on the GPU
DrawMap cost ~0 MB

1 warnings:
Couldn't make geometry for TurnID(LaneID(531), LaneID(192), IntersectionID(52)). look for Pt2D(336.4989, 876.3308) to Pt2D(355.7037, 866.4475) in [Pt2D { inner_x: 336.3221, inner_y: 891.3298 }, Pt2D { inner_x: 336.4989, inner_y: 876.3308 }, Pt2D { inner_x: 345.5252, inner_y: 876.4371 }, Pt2D { inner_x: 355.3143, inner_y: 866.8297 }, Pt2D { inner_x: 366.594, inner_y: 876.7766 }, Pt2D { inner_x: 366.3413, inner_y: 891.7741 }, Pt2D { inner_x: 353.0851, inner_y: 891.5507 }, Pt2D { inner_x: 349.9952, inner_y: 897.5429 }, Pt2D { inner_x: 336.3221, inner_y: 891.3298 }]

- load map took 2.3422s
instantiate scenario...
Read ../data/system/scenarios/montlake/weekday_typical_traffic_from_psrc.bin (1)... 0.1352s
Instantiating weekday_typical_traffic_from_psrc...
load full neighborhood info...
load_all_objects from ../data/input/neighborhoods/montlake...
load_all_objects from ../data/input/neighborhoods/montlake took 0.0000s

- load_all_objects from ../data/input/neighborhoods/montlake took 0.0000s

- load_all_objects from ../data/input/neighborhoods/montlake took 0.0000s
load full neighborhood info took 0.0676s
seed individual parked cars (1,875)... 0.1517s
SpawnTrip (26,975)... 0.0230s
thread '<unnamed>' panicked at 'SidewalkEndpoint(LaneID(1186), false) not in NodeMap', map_model/src/pathfind/node_map.rs:36:13
stack backtrace:
thread '<unnamed>' panicked at 'SidewalkEndpoint(LaneID(467), false) not in NodeMap', map_model/src/pathfind/node_map.rs:36:13
thread '<unnamed>' panicked at 'SidewalkEndpoint(LaneID(2100), true) not in NodeMap', map_model/src/pathfind/node_map.rs:36:13
thread '<unnamed>' panicked at 'SidewalkEndpoint(LaneID(1186), false) not in NodeMap', map_model/src/pathfind/node_map.rs:36:13
thread '<unnamed>' panicked at 'SidewalkEndpoint(LaneID(708), false) not in NodeMap', map_model/src/pathfind/node_map.rs:36:13
thread '<unnamed>' panicked at 'SidewalkEndpoint(LaneID(1186), false) not in NodeMap', map_model/src/pathfind/node_map.rs:36:13
thread '<unnamed>' panicked at 'SidewalkEndpoint(LaneID(1186), false) not in NodeMap', map_model/src/pathfind/node_map.rs:36:13
thread '<unnamed>' panicked at 'SidewalkEndpoint(LaneID(398), true) not in NodeMap', map_model/src/pathfind/node_map.rs:36:13
   0: std::io::Read::read_exact
   1: core::fmt::ArgumentV1::show_usize
   2: std::io::Write::write_fmt
   3: std::panicking::default_hook::{{closure}}
   4: std::panicking::default_hook
   5: <std::panicking::begin_panic::PanicPayload<A> as core::panic::BoxMeUp>::get
   6: std::panicking::continue_panic_fmt
   7: crossbeam_epoch::internal::Global::try_advance
   8: map_model::pathfind::node_map::NodeMap<T>::get
             at map_model/src/pathfind/node_map.rs:36
   9: map_model::pathfind::walking::SidewalkPathfinder::pathfind
             at map_model/src/pathfind/walking.rs:98
  10: map_model::pathfind::Pathfinder::pathfind
             at map_model/src/pathfind/mod.rs:437
  11: map_model::map::Map::pathfind
             at map_model/src/map.rs:595
  12: sim::make::spawner::TripSpawner::spawn_all::{{closure}}
             at sim/src/make/spawner.rs:196
  13: abstutil::time::Timer::parallelize::{{closure}}::{{closure}}
             at /Users/alex/src/github.com/dabreegster/abstreet/abstutil/src/time.rs:335
  14: <F as scoped_threadpool::FnBox>::call_box
             at /Users/alex/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped_threadpool-0.1.9/src/lib.rs:71
  15: scoped_threadpool::Pool::new::{{closure}}
             at /Users/alex/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped_threadpool-0.1.9/src/lib.rs:127
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
stack backtrace:
   0: std::io::Read::read_exact
   1: core::fmt::ArgumentV1::show_usize
   2: std::io::Write::write_fmt
   3: std::panicking::default_hook::{{closure}}
   4: std::panicking::default_hook
   5: <std::panicking::begin_panic::PanicPayload<A> as core::panic::BoxMeUp>::get
   6: std::panicking::continue_panic_fmt
   7: crossbeam_epoch::internal::Global::try_advance
   8: map_model::pathfind::node_map::NodeMap<T>::get
             at map_model/src/pathfind/node_map.rs:36
   9: map_model::pathfind::walking::SidewalkPathfinder::pathfind
             at map_model/src/pathfind/walking.rs:98
  10: map_model::pathfind::Pathfinder::pathfind
             at map_model/src/pathfind/mod.rs:437
  11: map_model::map::Map::pathfind
             at map_model/src/map.rs:595
  12: sim::make::spawner::TripSpawner::spawn_all::{{closure}}
             at sim/src/make/spawner.rs:196
  13: abstutil::time::Timer::parallelize::{{closure}}::{{closure}}
             at /Users/alex/src/github.com/dabreegster/abstreet/abstutil/src/time.rs:335
  14: <F as scoped_threadpool::FnBox>::call_box
             at /Users/alex/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped_threadpool-0.1.9/src/lib.rs:71
  15: scoped_threadpool::Pool::new::{{closure}}
             at /Users/alex/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped_threadpool-0.1.9/src/lib.rs:127
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
stack backtrace:
   0: std::io::Read::read_exact
   1: core::fmt::ArgumentV1::show_usize
   2: std::io::Write::write_fmt
   3: std::panicking::default_hook::{{closure}}
   4: std::panicking::default_hook
   5: <std::panicking::begin_panic::PanicPayload<A> as core::panic::BoxMeUp>::get
   6: std::panicking::continue_panic_fmt
   7: crossbeam_epoch::internal::Global::try_advance
   8: map_model::pathfind::node_map::NodeMap<T>::get
             at map_model/src/pathfind/node_map.rs:36
   9: map_model::pathfind::walking::SidewalkPathfinder::pathfind
             at map_model/src/pathfind/walking.rs:98
  10: map_model::pathfind::Pathfinder::pathfind
             at map_model/src/pathfind/mod.rs:437
  11: map_model::map::Map::pathfind
             at map_model/src/map.rs:595
  12: sim::make::spawner::TripSpawner::spawn_all::{{closure}}
             at sim/src/make/spawner.rs:196
  13: abstutil::time::Timer::parallelize::{{closure}}::{{closure}}
             at /Users/alex/src/github.com/dabreegster/abstreet/abstutil/src/time.rs:335
  14: <F as scoped_threadpool::FnBox>::call_box
             at /Users/alex/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped_threadpool-0.1.9/src/lib.rs:71
  15: scoped_threadpool::Pool::new::{{closure}}
             at /Users/alex/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped_threadpool-0.1.9/src/lib.rs:127
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
stack backtrace:
   0: std::io::Read::read_exact
   1: core::fmt::ArgumentV1::show_usize
   2: std::io::Write::write_fmt
   3: std::panicking::default_hook::{{closure}}
   4: std::panicking::default_hook
   5: <std::panicking::begin_panic::PanicPayload<A> as core::panic::BoxMeUp>::get
   6: std::panicking::continue_panic_fmt
   7: crossbeam_epoch::internal::Global::try_advance
   8: map_model::pathfind::node_map::NodeMap<T>::get
             at map_model/src/pathfind/node_map.rs:36
   9: map_model::pathfind::walking::SidewalkPathfinder::pathfind
             at map_model/src/pathfind/walking.rs:98
  10: map_model::pathfind::Pathfinder::pathfind
             at map_model/src/pathfind/mod.rs:437
  11: map_model::map::Map::pathfind
             at map_model/src/map.rs:595
  12: sim::make::spawner::TripSpawner::spawn_all::{{closure}}
             at sim/src/make/spawner.rs:196
  13: abstutil::time::Timer::parallelize::{{closure}}::{{closure}}
             at /Users/alex/src/github.com/dabreegster/abstreet/abstutil/src/time.rs:335
  14: <F as scoped_threadpool::FnBox>::call_box
             at /Users/alex/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped_threadpool-0.1.9/src/lib.rs:71
  15: scoped_threadpool::Pool::new::{{closure}}
             at /Users/alex/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped_threadpool-0.1.9/src/lib.rs:127
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
stack backtrace:
   0: std::io::Read::read_exact
   1: core::fmt::ArgumentV1::show_usize
   2: std::io::Write::write_fmt
   3: std::panicking::default_hook::{{closure}}
   4: std::panicking::default_hook
   5: <std::panicking::begin_panic::PanicPayload<A> as core::panic::BoxMeUp>::get
   6: std::panicking::continue_panic_fmt
   7: crossbeam_epoch::internal::Global::try_advance
   8: map_model::pathfind::node_map::NodeMap<T>::get
             at map_model/src/pathfind/node_map.rs:36
   9: map_model::pathfind::walking::SidewalkPathfinder::pathfind
             at map_model/src/pathfind/walking.rs:98
  10: map_model::pathfind::Pathfinder::pathfind
             at map_model/src/pathfind/mod.rs:437
  11: map_model::map::Map::pathfind
             at map_model/src/map.rs:595
  12: sim::make::spawner::TripSpawner::spawn_all::{{closure}}
             at sim/src/make/spawner.rs:196
  13: abstutil::time::Timer::parallelize::{{closure}}::{{closure}}
             at /Users/alex/src/github.com/dabreegster/abstreet/abstutil/src/time.rs:335
  14: <F as scoped_threadpool::FnBox>::call_box
             at /Users/alex/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped_threadpool-0.1.9/src/lib.rs:71
  15: scoped_threadpool::Pool::new::{{closure}}
             at /Users/alex/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped_threadpool-0.1.9/src/lib.rs:127
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
stack backtrace:
   0: std::io::Read::read_exact
   1: core::fmt::ArgumentV1::show_usize
   2: std::io::Write::write_fmt
   3: std::panicking::default_hook::{{closure}}
   4: std::panicking::default_hook
   5: <std::panicking::begin_panic::PanicPayload<A> as core::panic::BoxMeUp>::get
   6: std::panicking::continue_panic_fmt
   7: crossbeam_epoch::internal::Global::try_advance
   8: map_model::pathfind::node_map::NodeMap<T>::get
             at map_model/src/pathfind/node_map.rs:36
   9: map_model::pathfind::walking::SidewalkPathfinder::pathfind
             at map_model/src/pathfind/walking.rs:98
  10: map_model::pathfind::Pathfinder::pathfind
             at map_model/src/pathfind/mod.rs:437
  11: map_model::map::Map::pathfind
             at map_model/src/map.rs:595
  12: sim::make::spawner::TripSpawner::spawn_all::{{closure}}
             at sim/src/make/spawner.rs:196
  13: abstutil::time::Timer::parallelize::{{closure}}::{{closure}}
             at /Users/alex/src/github.com/dabreegster/abstreet/abstutil/src/time.rs:335
  14: <F as scoped_threadpool::FnBox>::call_box
             at /Users/alex/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped_threadpool-0.1.9/src/lib.rs:71
  15: scoped_threadpool::Pool::new::{{closure}}
             at /Users/alex/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped_threadpool-0.1.9/src/lib.rs:127
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
stack backtrace:
   0: std::io::Read::read_exact
   1: core::fmt::ArgumentV1::show_usize
   2: std::io::Write::write_fmt
   3: std::panicking::default_hook::{{closure}}
   4: std::panicking::default_hook
   5: <std::panicking::begin_panic::PanicPayload<A> as core::panic::BoxMeUp>::get
   6: std::panicking::continue_panic_fmt
   7: crossbeam_epoch::internal::Global::try_advance
   8: map_model::pathfind::node_map::NodeMap<T>::get
             at map_model/src/pathfind/node_map.rs:36
   9: map_model::pathfind::walking::SidewalkPathfinder::pathfind
             at map_model/src/pathfind/walking.rs:98
  10: map_model::pathfind::Pathfinder::pathfind
             at map_model/src/pathfind/mod.rs:437
  11: map_model::map::Map::pathfind
             at map_model/src/map.rs:595
  12: sim::make::spawner::TripSpawner::spawn_all::{{closure}}
             at sim/src/make/spawner.rs:196
  13: abstutil::time::Timer::parallelize::{{closure}}::{{closure}}
             at /Users/alex/src/github.com/dabreegster/abstreet/abstutil/src/time.rs:335
  14: <F as scoped_threadpool::FnBox>::call_box
             at /Users/alex/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped_threadpool-0.1.9/src/lib.rs:71
  15: scoped_threadpool::Pool::new::{{closure}}
             at /Users/alex/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped_threadpool-0.1.9/src/lib.rs:127
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
stack backtrace:
   0: std::io::Read::read_exact
   1: core::fmt::ArgumentV1::show_usize
   2: std::io::Write::write_fmt
   3: std::panicking::default_hook::{{closure}}
   4: std::panicking::default_hook
   5: <std::panicking::begin_panic::PanicPayload<A> as core::panic::BoxMeUp>::get
   6: std::panicking::continue_panic_fmt
   7: crossbeam_epoch::internal::Global::try_advance
   8: map_model::pathfind::node_map::NodeMap<T>::get
             at map_model/src/pathfind/node_map.rs:36
   9: map_model::pathfind::walking::SidewalkPathfinder::pathfind
             at map_model/src/pathfind/walking.rs:99
  10: map_model::pathfind::Pathfinder::pathfind
             at map_model/src/pathfind/mod.rs:437
  11: map_model::map::Map::pathfind
             at map_model/src/map.rs:595
  12: sim::make::spawner::TripSpawner::spawn_all::{{closure}}
             at sim/src/make/spawner.rs:196
  13: abstutil::time::Timer::parallelize::{{closure}}::{{closure}}
             at /Users/alex/src/github.com/dabreegster/abstreet/abstutil/src/time.rs:335
  14: <F as scoped_threadpool::FnBox>::call_box
             at /Users/alex/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped_threadpool-0.1.9/src/lib.rs:71
  15: scoped_threadpool::Pool::new::{{closure}}
             at /Users/alex/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped_threadpool-0.1.9/src/lib.rs:127
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', src/libcore/option.rs:378:21
stack backtrace:
   0: std::io::Read::read_exact
   1: core::fmt::ArgumentV1::show_usize
   2: std::io::Write::write_fmt
   3: std::panicking::default_hook::{{closure}}
   4: std::panicking::default_hook
   5: <std::panicking::begin_panic::PanicPayload<A> as core::panic::BoxMeUp>::get
   6: std::panicking::continue_panic_fmt
   7: std::panicking::try::do_call
   8: std::thread::local::fast::Key<T>::try_initialize
   9: std::thread::local::fast::Key<T>::try_initialize
  10: core::option::Option<T>::unwrap
             at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/libcore/macros.rs:12
  11: abstutil::time::Timer::parallelize::{{closure}}::{{closure}}
             at /Users/alex/src/github.com/dabreegster/abstreet/abstutil/src/time.rs:345
  12: core::iter::adapters::map_fold::{{closure}}
             at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/libcore/iter/adapters/mod.rs:694
  13: core::iter::traits::iterator::Iterator::fold::ok::{{closure}}
             at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/libcore/iter/traits/iterator.rs:1813
  14: core::iter::traits::iterator::Iterator::try_fold
             at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/libcore/iter/traits/iterator.rs:1694
  15: core::iter::traits::iterator::Iterator::fold
             at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/libcore/iter/traits/iterator.rs:1816
  16: <core::iter::adapters::Map<I,F> as core::iter::traits::iterator::Iterator>::fold
             at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/libcore/iter/adapters/mod.rs:727
  17: core::iter::traits::iterator::Iterator::for_each
             at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/libcore/iter/traits/iterator.rs:616
  18: <alloc::vec::Vec<T> as alloc::vec::SpecExtend<T,I>>::spec_extend
             at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/liballoc/vec.rs:1966
  19: <alloc::vec::Vec<T> as alloc::vec::SpecExtend<T,I>>::from_iter
             at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/liballoc/vec.rs:1949
  20: <alloc::vec::Vec<T> as core::iter::traits::collect::FromIterator<T>>::from_iter
             at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/liballoc/vec.rs:1836
  21: core::iter::traits::iterator::Iterator::collect
             at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/libcore/iter/traits/iterator.rs:1478
  22: abstutil::time::Timer::parallelize::{{closure}}
             at /Users/alex/src/github.com/dabreegster/abstreet/abstutil/src/time.rs:345
  23: scoped_threadpool::Pool::scoped
             at /Users/alex/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped_threadpool-0.1.9/src/lib.rs:181
  24: abstutil::time::Timer::parallelize
             at /Users/alex/src/github.com/dabreegster/abstreet/abstutil/src/time.rs:325
  25: sim::make::spawner::TripSpawner::spawn_all
             at sim/src/make/spawner.rs:191
  26: sim::sim::Sim::spawn_all_trips
             at sim/src/sim.rs:162
  27: <map_model::turn::TurnPriority as core::cmp::PartialEq>::eq
  28: game::sandbox::gameplay::GameplayRunner::initialize::{{closure}}
             at game/src/sandbox/gameplay/mod.rs:161
  29: ezgui::event_ctx::EventCtx::loading_screen
             at /Users/alex/src/github.com/dabreegster/abstreet/ezgui/src/event_ctx.rs:41
  30: game::sandbox::gameplay::GameplayRunner::initialize
             at game/src/sandbox/gameplay/mod.rs:157
  31: game::sandbox::SandboxMode::new
             at game/src/sandbox/mod.rs:76
  32: <game::challenges::ChallengeSplash as game::game::State>::event
             at game/src/challenges.rs:238
  33: <game::game::Game as ezgui::runner::GUI>::event
             at game/src/game.rs:44
  34: ezgui::runner::State<G>::event::{{closure}}
             at /Users/alex/src/github.com/dabreegster/abstreet/ezgui/src/runner.rs:84
  35: core::ops::function::FnOnce::call_once
             at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/libcore/ops/function.rs:227
  36: <std::panic::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
             at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/libstd/panic.rs:315
  37: std::panicking::try::do_call
             at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/libstd/panicking.rs:292
  38: panic_unwind::imp::find_eh_action::{{closure}}
  39: std::panicking::try
             at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/libstd/panicking.rs:271
  40: std::panic::catch_unwind
             at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/libstd/panic.rs:394
  41: ezgui::runner::State<G>::event
             at /Users/alex/src/github.com/dabreegster/abstreet/ezgui/src/runner.rs:83
  42: ezgui::runner::loop_forever
             at /Users/alex/src/github.com/dabreegster/abstreet/ezgui/src/runner.rs:359
  43: ezgui::runner::run
             at /Users/alex/src/github.com/dabreegster/abstreet/ezgui/src/runner.rs:302
  44: game::main
             at game/src/main.rs:51
  45: std::rt::lang_start::{{closure}}
             at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/libstd/rt.rs:64
  46: std::panicking::try::do_call
  47: panic_unwind::imp::find_eh_action::{{closure}}
  48: std::io::lazy::Lazy<T>::get
  49: std::rt::lang_start
             at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/libstd/rt.rs:64
  50: game::main
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: "SendError(..)"', src/libcore/result.rs:1165:5
stack backtrace:
   0:        0x1081135e5 - std::io::Read::read_exact::ha476307323a9a57b
   1:        0x108139b21 - core::fmt::ArgumentV1::show_usize::h40e0340afa3a9ee9
   2:        0x1081241b9 - std::io::Write::write_fmt::ha9661be3deb7aad2
   3:        0x108115bea - std::panicking::default_hook::{{closure}}::h3c4469e572d8fcea
   4:        0x10811593f - std::panicking::default_hook::h244274cbfa0d3cb9
   5:        0x1081162a7 - <std::panicking::begin_panic::PanicPayload<A> as core::panic::BoxMeUp>::get::h33d686882e2a2672
   6:        0x108115e1d - std::panicking::continue_panic_fmt::h851031a5cf31ba4c
   7:        0x108115d79 - std::panicking::try::do_call::h3aa3549642d783df
   8:        0x108153b7f - std::thread::local::fast::Key<T>::try_initialize::h55fced50a298c0af
   9:        0x108153fb9 - std::thread::local::fast::Key<T>::try_initialize::h55fced50a298c0af
  10:        0x107e8d2ad - core::result::Result<T,E>::unwrap::hdca1da400a11ce20
                               at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/libcore/result.rs:933
  11:        0x107e782a9 - scoped_threadpool::Scope::join_all::he6f74dc78450ed0b
                               at /Users/alex/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped_threadpool-0.1.9/src/lib.rs:219
  12:        0x107e78415 - <scoped_threadpool::Scope as core::ops::drop::Drop>::drop::h4b5d9b5b13efe1ef
                               at /Users/alex/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped_threadpool-0.1.9/src/lib.rs:248
  13:        0x1070e20c5 - core::ptr::real_drop_in_place::h57eb0164e6bb365f
                               at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/libcore/ptr/mod.rs:175
  14:        0x106e80ce0 - scoped_threadpool::Pool::scoped::hb68545791b186de6
                               at /Users/alex/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped_threadpool-0.1.9/src/lib.rs:182
  15:        0x106a981ef - abstutil::time::Timer::parallelize::hd5cc3ce748441df6
                               at /Users/alex/src/github.com/dabreegster/abstreet/abstutil/src/time.rs:325
  16:        0x1070be5f4 - sim::make::spawner::TripSpawner::spawn_all::h6f46e1c8611b6f39
                               at sim/src/make/spawner.rs:191
  17:        0x1070246a5 - sim::sim::Sim::spawn_all_trips::h73bfa56349a4f28f
                               at sim/src/sim.rs:162
  18:        0x1069ab8e0 - <map_model::turn::TurnPriority as core::cmp::PartialEq>::eq::ha02220298fee37d6
  19:        0x106711d45 - game::sandbox::gameplay::GameplayRunner::initialize::{{closure}}::h1a1bd31a101f754d
                               at game/src/sandbox/gameplay/mod.rs:161
  20:        0x106665126 - ezgui::event_ctx::EventCtx::loading_screen::h8caa7fd526d3198e
                               at /Users/alex/src/github.com/dabreegster/abstreet/ezgui/src/event_ctx.rs:41
  21:        0x1066d2407 - game::sandbox::gameplay::GameplayRunner::initialize::h7bafab8fed6c38b0
                               at game/src/sandbox/gameplay/mod.rs:157
  22:        0x1065bad2b - game::sandbox::SandboxMode::new::h7687e77ed3d06bbf
                               at game/src/sandbox/mod.rs:76
  23:        0x10639c90f - <game::challenges::ChallengeSplash as game::game::State>::event::h0c4b7841e4c9f336
                               at game/src/challenges.rs:238
  24:        0x1067ff5ee - <game::game::Game as ezgui::runner::GUI>::event::hf53ccfb7d00d6a8c
                               at game/src/game.rs:44
  25:        0x1067620c5 - ezgui::runner::State<G>::event::{{closure}}::h4e47f32b19ff1ce0
                               at /Users/alex/src/github.com/dabreegster/abstreet/ezgui/src/runner.rs:84
  26:        0x106554614 - core::ops::function::FnOnce::call_once::hc3a2e5be5dc66136
                               at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/libcore/ops/function.rs:227
  27:        0x10678f038 - <std::panic::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once::hf7b93e74b0bd4b50
                               at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/libstd/panic.rs:315
  28:        0x106510e96 - std::panicking::try::do_call::h0b9aea9dcf53dc0b
                               at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/libstd/panicking.rs:292
  29:        0x108125c9f - panic_unwind::imp::find_eh_action::{{closure}}::h6188ae3b2a38145e
  30:        0x106510c95 - std::panicking::try::hc0bf3bc28c2cdc38
                               at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/libstd/panicking.rs:271
  31:        0x10678f088 - std::panic::catch_unwind::h9b53761c20aa24f1
                               at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/libstd/panic.rs:394
  32:        0x106761a2b - ezgui::runner::State<G>::event::h9fdbf33d5b3ab8e3
                               at /Users/alex/src/github.com/dabreegster/abstreet/ezgui/src/runner.rs:83
  33:        0x1067605a9 - ezgui::runner::loop_forever::h6ebaf94046c7706f
                               at /Users/alex/src/github.com/dabreegster/abstreet/ezgui/src/runner.rs:359
  34:        0x106762abc - ezgui::runner::run::h66b4b43869c6c909
                               at /Users/alex/src/github.com/dabreegster/abstreet/ezgui/src/runner.rs:302
  35:        0x10654fe21 - game::main::h793c540866a10097
                               at game/src/main.rs:51
  36:        0x10674f632 - std::rt::lang_start::{{closure}}::hb62e2bce6ebefdd7
                               at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/libstd/rt.rs:64
  37:        0x108115d08 - std::panicking::try::do_call::h3aa3549642d783df
  38:        0x108125c9f - panic_unwind::imp::find_eh_action::{{closure}}::h6188ae3b2a38145e
  39:        0x10811c043 - std::io::lazy::Lazy<T>::get::hef7f4e305e19331d
  40:        0x10674f612 - std::rt::lang_start::h03d6d2c10aef788b
                               at /private/tmp/rust-20191107-43598-2ji78o/rustc-1.39.0-src/src/libstd/rt.rs:64
  41:        0x10654ff52 - game::main::h793c540866a10097
thread panicked while panicking. aborting.
[1]    5654 illegal hardware instruction  RUST_BACKTRACE=1 cargo run

Starter project: auto pan map when the cursor is near the edge of the screen

Prison Architect has this UI control and it seems to work well. If the mouse is near the edge of the screen, automatically move the map in that direction. Code should be somewhere around https://github.com/dabreegster/abstreet/blob/573edbd13e5aa4bedba0bd819d3d7b32dba11b59/ezgui/src/canvas.rs#L93.
Open questions:

  1. Should this not work if the mouse is on a GUI element? (canvas.get_cursor_in_map_space().is_none())
  2. Should this stop near the edge of the map, so we don't fly off into empty space too much?

Crash: assertion failed: `(left == right)` at sim/src/mechanics/driving.rs:635:9

I'm getting a frequent crash at sim/src/mechanics/driving.rs#L635. It occurs after a few (game-time) hours of simulating huge_seattle with weekday_typical_traffic_from_psrc, if another crash doesn't happen first.

thread 'main' panicked at 'assertion failed: `(left == right)`
  left: `CarID(151715, Car)`,
 right: `CarID(176112, Bike)`', sim/src/mechanics/driving.rs:635:9

Attached a few logs of the last minute of console output with backtrace.

driving.rs-635-1.txt
driving.rs-635-2.txt

CLI options to choose map and scenario at startup

It would be nice to have command line options to set the sandbox mode map and scenario at startup, to quickly get back in to the simulation at startup.

Potentially also:

  • map
  • scenario
  • map scroll/zoom
  • start simulating
  • challenge mode

This would be useful after making code changes, to quickly get back in to simulation, or for automated testing.

Would be nice to be able to navigate backwards in menus

It would be nice to be able to navigate backwards in menus
For example, when changing lane types once I have picked a lane type to change I cannot go backwards to change the line type I have picked. I have to esc and then go through the bulk change menu again.

Minor, but would make it a little bit more user friendly.

Refactor trip table code

https://github.com/dabreegster/abstreet/blob/master/game/src/sandbox/dashboards/trip_table.rs

https://github.com/dabreegster/abstreet/blob/master/game/src/sandbox/dashboards/parking_overhead.rs

These share lots of duplicated code. I don't know what the ideal API to construct a table should be -- declare the columns, whether they're sortable, provide all the data in a reasonably type-safe way, etc. A bit complicated by the checkbox filters that're different between the two.

Any ideas? Or an existing crate for heterogeneously typed sortable tables?

Adding support for other cities

What's involved with this? It's not just converting the OSM data right? Are locations hardcoded in somewhere? My city has terrible street traffic. I'd love to modify this to support other cities easily.

What's the format for b - jump to specific time

What's the time format to be used with the b command? I'm trying to enter 14:00:00 but it is rewritten to 14;00;00 and the jump doesn't work.

Related question, what's the best way to complete the Traffic Lights tutorial quickly? It keeps reporting "No data yet, run the simulation for longer".

Thread panic: left == right

load map...
upload textures (14)... 0.0066s
14 textures grouped into 3 arrays (with the same dimensions)
Loading map ../data/system/maps/montlake.bin
Reading ../data/system/maps/montlake.bin: 0/5 MB... 0.000Read ../data/system/maps/montlake.bin (5)... 0.0802s
create sim...
create sim took 0.0028s
Map and Sim cost ~11 MB
draw_map...
make DrawRoads (415)... 0.0384s
generate thick roads...
generate thick roads took 0.0039s
prepare DrawLanes (2,181)... 0.0369s
finalize DrawLanes (2,181)... 0.0447s
make DrawIntersections (317)... 0.0302s
generate unzoomed intersections...
generate unzoomed intersections took 0.0009s
make DrawBuildings (3,018)... 0.0097s
upload all buildings...
upload all buildings took 0.0088s
make DrawBusStop (16)... 0.0003s
make DrawAreas (55)... 0.0000s
upload all areas...
upload all areas took 0.0001s
create quadtree...
create quadtree took 0.0914s
static DrawMap consumes 9 MB on the GPU
draw_map... plus 0.0066s
draw_map took 0.2719s
DrawMap cost ~159 MB
load map... plus 0.0281s
load map took 0.3895s

- load map took 0.3895s
  - upload textures (14)... 0.0066s
  - Read ../data/system/maps/montlake.bin (5)... 0.0802s
  - create sim took 0.0028s
  - draw_map took 0.2719s
    - make DrawRoads (415)... 0.0384s
    - generate thick roads took 0.0039s
    - prepare DrawLanes (2,181)... 0.0369s
    - finalize DrawLanes (2,181)... 0.0447s
    - make DrawIntersections (317)... 0.0302s
    - generate unzoomed intersections took 0.0009s
    - make DrawBuildings (3,018)... 0.0097s
    - upload all buildings took 0.0088s
    - make DrawBusStop (16)... 0.0003s
    - make DrawAreas (55)... 0.0000s
    - upload all areas took 0.0001s
    - create quadtree took 0.0914s
    - ... plus 0.0066s
  - ... plus 0.0281s

5 notes:
14 textures grouped into 3 arrays (with the same dimensions)
Loading map ../data/system/maps/montlake.bin
Map and Sim cost ~11 MB
static DrawMap consumes 9 MB on the GPU
DrawMap cost ~159 MB

1 warnings:
Couldn't make geometry for TurnID(LaneID(531), LaneID(192), IntersectionID(52)). look for Pt2D(336.4989, 876.3308) to Pt2D(355.7037, 866.4475) in [Pt2D { inner_x: 336.3221, inner_y: 891.3298 }, Pt2D { inner_x: 336.4989, inner_y: 876.3308 }, Pt2D { inner_x: 345.5252, inner_y: 876.4371 }, Pt2D { inner_x: 355.3143, inner_y: 866.8297 }, Pt2D { inner_x: 366.594, inner_y: 876.7766 }, Pt2D { inner_x: 366.3413, inner_y: 891.7741 }, Pt2D { inner_x: 353.0851, inner_y: 891.5507 }, Pt2D { inner_x: 349.9952, inner_y: 897.5429 }, Pt2D { inner_x: 336.3221, inner_y: 891.3298 }]

- load map took 0.3895s
instantiate scenario...
instantiate scenario took 0.0000s

- instantiate scenario took 0.0000s

- instantiate scenario took 0.0000s
both CONTEXTUAL: spawn agents around this intersection and CONTEXTUAL: cycle through this lane's turns read key Z
reset simulation...
reset simulation took 0.0034s

- reset simulation took 0.0034s

- reset simulation took 0.0034s
thread 'main' panicked at 'assertion failed: `(left == right)`
  left: `ScreenDims { width: 17.7598, height: 17.759799999995707 }`,
 right: `ScreenDims { width: 17.7598, height: 17.759799999999345 }`', ezgui/src/widgets/button.rs:36:9
stack backtrace:
   0: backtrace::backtrace::libunwind::trace
             at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.34/src/backtrace/libunwind.rs:88
   1: backtrace::backtrace::trace_unsynchronized
             at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.34/src/backtrace/mod.rs:66
   2: std::sys_common::backtrace::_print
             at src/libstd/sys_common/backtrace.rs:47
   3: std::sys_common::backtrace::print
             at src/libstd/sys_common/backtrace.rs:36
   4: std::panicking::default_hook::{{closure}}
             at src/libstd/panicking.rs:200
   5: std::panicking::default_hook
             at src/libstd/panicking.rs:214
   6: std::panicking::rust_panic_with_hook
             at src/libstd/panicking.rs:477
   7: std::panicking::continue_panic_fmt
             at src/libstd/panicking.rs:384
   8: std::panicking::begin_panic_fmt
             at src/libstd/panicking.rs:339
   9: ezgui::widgets::button::Button::new
  10: ezgui::widgets::button::Button::rectangle_svg
  11: game::sandbox::speed::SpeedControls::new
  12: game::sandbox::SandboxMode::new
  13: game::sandbox::gameplay::change_scenario
  14: core::ops::function::Fn::call
  15: <game::game::WizardState as game::game::State>::event
  16: <game::game::Game as ezgui::runner::GUI>::event
  17: std::panicking::try::do_call
  18: __rust_maybe_catch_panic
             at src/libpanic_unwind/lib.rs:80
  19: ezgui::runner::State<G>::event
  20: ezgui::runner::run
  21: game::main
  22: std::rt::lang_start::{{closure}}
  23: std::rt::lang_start_internal::{{closure}}
             at src/libstd/rt.rs:49
  24: std::panicking::try::do_call
             at src/libstd/panicking.rs:296
  25: __rust_maybe_catch_panic
             at src/libpanic_unwind/lib.rs:80
  26: std::panicking::try
             at src/libstd/panicking.rs:275
  27: std::panic::catch_unwind
             at src/libstd/panic.rs:394
  28: std::rt::lang_start_internal
             at src/libstd/rt.rs:48
  29: main
  30: __libc_start_main
  31: _start
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
********************************************************************************
UI broke! Primary sim:
********************************************************************************
At 00:00:00.0

Game crashes at various points with the same issue, happy to provide further info as needed.

Starter project: arrow keys to pan map

Panning the map today uses the mouse to click and drag. Players also expect to use arrow keys. This is pretty simple to add to https://github.com/dabreegster/abstreet/blob/573edbd13e5aa4bedba0bd819d3d7b32dba11b59/ezgui/src/canvas.rs#L93, but the complication is that arrow keys are currently used in some GUI menus. I think there are cases where the menus are active, but the player can still drag around the map underneath. We should probably redesign that a bit first, or maybe just disable canvas map scrolling by arrow key in that case.

Thread panic when trying to spawn agents on intersection

I've got the following thread panic trying to executing the first point of the "Playing the game" section of the readme:

In sandbox mode, hover over an intersection, right click, and spawn agents. Then you can start the simulation by pressing space or clicking the icon.

HiDPI factor is purportedly 1
load map...
upload textures (14)... 0.0108s
14 textures grouped into 3 arrays (with the same dimensions)
Loading map ../data/system/maps/montlake.bin
Read ../data/system/maps/montlake.bin (4)... 0.0465s
create sim...
create sim took 0.0018s
Map and Sim cost ~10 MB
draw_map...
make DrawRoads (415)... 0.0271s
generate thick roads...
generate thick roads took 0.0028s
prepare DrawLanes (2,181)... 0.0358s
finalize DrawLanes (2,181)... 0.0353s
make DrawIntersections (317)... 0.0264s
generate unzoomed intersections...
generate unzoomed intersections took 0.0009s
make DrawBuildings (3,018)... 0.0074s
upload all buildings...
upload all buildings took 0.0041s
make DrawBusStop (16)... 0.0003s
make DrawAreas (55)... 0.0000s
upload all areas...
upload all areas took 0.0001s
create quadtree...
create quadtree took 0.0715s
static DrawMap consumes 9 MB on the GPU
draw_map... plus 0.0060s
draw_map took 0.2177s
DrawMap cost ~158 MB
load map... plus 0.0201s
load map took 0.2969s

- load map took 0.2969s
  - upload textures (14)... 0.0108s
  - Read ../data/system/maps/montlake.bin (4)... 0.0465s
  - create sim took 0.0018s
  - draw_map took 0.2177s
    - make DrawRoads (415)... 0.0271s
    - generate thick roads took 0.0028s
    - prepare DrawLanes (2,181)... 0.0358s
    - finalize DrawLanes (2,181)... 0.0353s
    - make DrawIntersections (317)... 0.0264s
    - generate unzoomed intersections took 0.0009s
    - make DrawBuildings (3,018)... 0.0074s
    - upload all buildings took 0.0041s
    - make DrawBusStop (16)... 0.0003s
    - make DrawAreas (55)... 0.0000s
    - upload all areas took 0.0001s
    - create quadtree took 0.0715s
    - ... plus 0.0060s
  - ... plus 0.0201s

5 notes:
14 textures grouped into 3 arrays (with the same dimensions)
Loading map ../data/system/maps/montlake.bin
Map and Sim cost ~10 MB
static DrawMap consumes 9 MB on the GPU
DrawMap cost ~158 MB

1 warnings:
Couldn't make geometry for TurnID(LaneID(531), LaneID(192), IntersectionID(52)). look for Pt2D(336.4989, 876.3308) to Pt2D(355.7037, 866.4475) in [Pt2D { inner_x: 336.3221, inner_y: 891.3298 }, Pt2D { inner_x: 336.4989, inner_y: 876.3308 }, Pt2D { inner_x: 345.5252, inner_y: 876.4371 }, Pt2D { inner_x: 355.3143, inner_y: 866.8297 }, Pt2D { inner_x: 366.594, inner_y: 876.7766 }, Pt2D { inner_x: 366.3413, inner_y: 891.7741 }, Pt2D { inner_x: 353.0851, inner_y: 891.5507 }, Pt2D { inner_x: 349.9952, inner_y: 897.5429 }, Pt2D { inner_x: 336.3221, inner_y: 891.3298 }]

- load map took 0.2969s
instantiate scenario...
instantiate scenario took 0.0000s

- instantiate scenario took 0.0000s

- instantiate scenario took 0.0000s
reset simulation...
reset simulation took 0.0046s

- reset simulation took 0.0046s

- reset simulation took 0.0046s
instantiate scenario...
instantiate scenario took 0.0000s

- instantiate scenario took 0.0000s

- instantiate scenario took 0.0000s
thread 'thread 'thread 'thread 'thread '<unnamed><unnamed>' panicked at '<unnamed>' panicked at 'no entry found for key' panicked at '', no entry found for keysrc/libcore/option.rs', :src/libcore/option.rs1190::<unnamed><unnamed>11905' panicked at ':
' panicked at 'no entry found for key5note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
', 
src/libcore/option.rs:no entry found for key', no entry found for key', thread 'src/libcore/option.rs1190<unnamed>thread '' panicked at ':<unnamed>no entry found for key1190:' panicked at '', :5no entry found for keysrc/libcore/option.rs
', :src/libcore/option.rssrc/libcore/option.rs:511901190
:thread ':<unnamed>5' panicked at ':
5no entry found for key1190
', :src/libcore/option.rs5:
1190:5
thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', src/libcore/option.rs:378:21
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: "SendError(..)"', src/libcore/result.rs:1165:5
stack backtrace:
   0:     0x55cada4679f4 - backtrace::backtrace::libunwind::trace::hda41dbcdfba36aa0
                               at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.37/src/backtrace/libunwind.rs:88
   1:     0x55cada4679f4 - backtrace::backtrace::trace_unsynchronized::h1a8d6e1f8cb3f5d4
                               at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.37/src/backtrace/mod.rs:66
   2:     0x55cada4679f4 - std::sys_common::backtrace::_print_fmt::h610c4127487e10da
                               at src/libstd/sys_common/backtrace.rs:76
   3:     0x55cada4679f4 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h0722dc552e01bd1d
                               at src/libstd/sys_common/backtrace.rs:60
   4:     0x55cada48f1bc - core::fmt::write::h01edf6dd68a42c9c
                               at src/libcore/fmt/mod.rs:1030
   5:     0x55cada4639f7 - std::io::Write::write_fmt::hf15985f193f03c04
                               at src/libstd/io/mod.rs:1412
   6:     0x55cada469f15 - std::sys_common::backtrace::_print::hd8d5d08a1795e743
                               at src/libstd/sys_common/backtrace.rs:64
   7:     0x55cada469f15 - std::sys_common::backtrace::print::hf89a79e3921a2366
                               at src/libstd/sys_common/backtrace.rs:49
   8:     0x55cada469f15 - std::panicking::default_hook::{{closure}}::h3a8f42beb3bb8ae3
                               at src/libstd/panicking.rs:196
   9:     0x55cada469c06 - std::panicking::default_hook::h8f803b0bc31a5c37
                               at src/libstd/panicking.rs:210
  10:     0x55cada46a615 - std::panicking::rust_panic_with_hook::h825f041245da8739
                               at src/libstd/panicking.rs:473
  11:     0x55cada46a1b2 - std::panicking::continue_panic_fmt::hbe0378e33481e81b
                               at src/libstd/panicking.rs:380
  12:     0x55cada46a0a6 - rust_begin_unwind
                               at src/libstd/panicking.rs:307
  13:     0x55cada48ae6a - core::panicking::panic_fmt::h527855ce0bc891f6
                               at src/libcore/panicking.rs:85
  14:     0x55cada48af67 - core::result::unwrap_failed::ha8b77e6004f0ba38
                               at src/libcore/result.rs:1165
  15:     0x55cada2f7c3c - scoped_threadpool::Scope::join_all::h90328822974430c3
  16:     0x55cad9ff3d44 - scoped_threadpool::Pool::scoped::h23d3c0a65b3839aa
  17:     0x55cad9f62db3 - abstutil::time::Timer::parallelize::ha823fecf13b2bbde
  18:     0x55cad9f4d13c - sim::make::spawner::TripSpawner::spawn_all::hc1532ecee05b9d68
  19:     0x55cad9f94edc - sim::sim::Sim::spawn_all_trips::he48301f395ddb241
  20:     0x55cad9dd1786 - game::sandbox::gameplay::spawner::spawn_agents_around::h313367c17e02f941
  21:     0x55cad9dcef57 - game::sandbox::gameplay::spawner::AgentSpawner::new::ha38fdaab740bd5cf
  22:     0x55cad9d774d3 - <game::sandbox::gameplay::freeform::Freeform as game::sandbox::gameplay::GameplayState>::event::h630c9b8defde470f
  23:     0x55cad9d781c0 - <game::sandbox::SandboxMode as game::game::State>::event::h15641abae535d20a
  24:     0x55cad9e0ea12 - <game::game::Game as ezgui::runner::GUI>::event::h9f61dcd2bd50e5d2
  25:     0x55cad9d36d11 - std::panicking::try::do_call::h2d6652771a795e52
  26:     0x55cada4727da - __rust_maybe_catch_panic
                               at src/libpanic_unwind/lib.rs:80
  27:     0x55cad9df36c9 - ezgui::runner::State<G>::event::h89affbbdff6766dc
  28:     0x55cad9df506f - ezgui::runner::run::h7cacd4f4b053b02f
  29:     0x55cad9dd2bd6 - game::main::h5b516a8028736dc2
  30:     0x55cad9e3fbe3 - std::rt::lang_start::{{closure}}::h9e9cd991840640b1
  31:     0x55cada46a043 - std::rt::lang_start_internal::{{closure}}::ha04574f12d97cbe2
                               at src/libstd/rt.rs:49
  32:     0x55cada46a043 - std::panicking::try::do_call::h7c2a8488f72db90c
                               at src/libstd/panicking.rs:292
  33:     0x55cada4727da - __rust_maybe_catch_panic
                               at src/libpanic_unwind/lib.rs:80
  34:     0x55cada46abcd - std::panicking::try::hc3a9b5da4250385d
                               at src/libstd/panicking.rs:271
  35:     0x55cada46abcd - std::panic::catch_unwind::hf27600bf8c37809a
                               at src/libstd/panic.rs:394
  36:     0x55cada46abcd - std::rt::lang_start_internal::h409d4f2fe51133b0
                               at src/libstd/rt.rs:48
  37:     0x55cad9dd2ca2 - main
  38:     0x7f2b46f8cb97 - __libc_start_main
  39:     0x55cad9c71afa - _start
  40:                0x0 - <unknown>
thread panicked while panicking. aborting.
fish: 'cargo run --release' terminated by signal SIGILL (Illegal instruction)

Parallelize importer

The importer tool converts one map at a time. Easy opportunity to make use of all CPUs. Simple change in one layer of the code. Makes logging harder to read, but eh. Only trick is that ensure_popdat_exists has to be called before the parallelization starts.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.